Example #1
0
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;
    }
}
Example #2
0
 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);
 }
Example #3
0
 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);