Skip to content

Commit

Permalink
Experimenting with programatically defining mixins
Browse files Browse the repository at this point in the history
  • Loading branch information
iboB committed Jul 29, 2018
1 parent df6f204 commit 85faa1d
Showing 1 changed file with 34 additions and 1 deletion.
35 changes: 34 additions & 1 deletion example/scratch/scratch.cpp
Expand Up @@ -36,13 +36,46 @@ class b

DYNAMIX_DEFINE_MIXIN(b, testv_msg);

struct script_mixin
{
int n = 10;
};

void script_testv(void* m, vector<int> data)
{
auto sm = reinterpret_cast<script_mixin*>(m);
cout << "script(" << sm->n << "): " << data.size() << endl;
}

int main()
{
auto& dom = dynamix::internal::domain::safe_instance();
dynamix::internal::mixin_type_info info0;

info0.name = "bagavag";
info0.size = sizeof(script_mixin);
info0.alignment = std::alignment_of<script_mixin>::value;
info0.constructor = &dynamix::internal::call_mixin_constructor<script_mixin>;
info0.destructor = &dynamix::internal::call_mixin_destructor<script_mixin>;
info0.copy_constructor = dynamix::internal::get_mixin_copy_constructor<script_mixin>();
info0.copy_assignment = dynamix::internal::get_mixin_copy_assignment<script_mixin>();
info0.move_constructor = dynamix::internal::get_mixin_move_constructor<script_mixin>();
info0.allocator = dom._allocator;

dom.internal_register_mixin_type(info0);

info0.message_infos.emplace_back();
auto& msg = info0.message_infos.back();
msg.bid = msg.priority = 0;
msg._mixin_id = info0.id;
msg.caller = reinterpret_cast<dynamix::internal::func_ptr>(script_testv);
msg.message = static_cast<dynamix::internal::message_t*>(&_dynamix_get_mixin_feature_safe(testv_msg));

auto hero = new dynamix::object;
dynamix::mutate(hero)
.add<a>()
.add<b>();
.add<b>()
.add("bagavag");

vector<int> foo = {1, 2, 3};
testv(hero, foo);
Expand Down

0 comments on commit 85faa1d

Please sign in to comment.