bool has_next_bidder(Mixin* mixin, Message* message) { internal::mixin_type_info& mixin_info = _dynamix_get_mixin_type_info(mixin); auto& msg = static_cast<const internal::message_t&>(_dynamix_get_mixin_feature_fast(message)); const object* obj = object_of(mixin); const internal::object_type_info::call_table_entry& entry = obj->_type_info->_call_table[msg.id]; if (!entry.top_bid_message) return false; if (msg.mechanism == internal::message_t::unicast) { auto ptr = entry.begin; if (!ptr) return false; while ((*ptr++)->_mixin_id != mixin_info.id) DYNAMIX_ASSERT(ptr < entry.end); return ptr < entry.end; } else { auto ptr = entry.begin; while ((*ptr++)->_mixin_id != mixin_info.id); if (!ptr) return false; const internal::message_for_mixin* prev_msg_data = *(ptr - 1); while ((*ptr)->bid == prev_msg_data->bid) ++ptr; return !!ptr; } }
bool has() const noexcept { const internal::mixin_type_info& info = _dynamix_get_mixin_type_info(static_cast<Mixin*>(nullptr)); return internal_has_mixin(info.id); }
const Mixin* get() const noexcept { const internal::mixin_type_info& info = _dynamix_get_mixin_type_info(static_cast<Mixin*>(nullptr)); return reinterpret_cast<const Mixin*>(internal_get_mixin(info.id)); }
#include "PagedMixinAllocator.h" struct test_struct { int data; }; HA_MIXIN_DEFINE_WITHOUT_CODEGEN(test_struct, dynamix::none); #define test_alloc(x) x = a.alloc_mixin(mixin_info, &Object::dummy()) #define test_dealloc(x) a.dealloc_mixin(x.first, 0, mixin_info, &Object::dummy()) #define test_write(x, val) (reinterpret_cast<test_struct*>(x.first + x.second))->data = val test_case("[core] testing PagedMixinAllocator with int") { auto& mixin_info = _dynamix_get_mixin_type_info((test_struct*)nullptr); std::pair<char*, size_t> res_0; std::pair<char*, size_t> res_1; std::pair<char*, size_t> res_2; std::pair<char*, size_t> res_3; std::pair<char*, size_t> res_4; std::pair<char*, size_t> res_5; std::pair<char*, size_t> res_6; std::pair<char*, size_t> res_7; std::pair<char*, size_t> res_8; std::pair<char*, size_t> res_9; PagedMixinAllocator<int, 3> a; check_eq(a.getNumAllocations(), 0u);