#include "test.gen.h" #include /** * Class **/ test::Test::Test_Class::Test_Class() : ::meta::reflection::Class("test::Test", nullptr) { } void test::Test::Test_Class::Register() { auto self = new test::Test::Test_Class(); auto clz = std::shared_ptr<::meta::reflection::Class>(self); // self->AddBaseClassProxy(); self->AddMethod(std::make_shared("size", clz)); self->AddMethod(std::make_shared("length", clz)); self->AddField(std::make_shared("length_", clz)); self->AddField(std::make_shared("size_", clz)); ::meta::reflection::Registry::Instance()->RegisterClass(clz); } void test::Test::Test_Class::AddBaseClassProxy(std::shared_ptr<::meta::reflection::Class> base) { AddBaseClass(base); } void test::Test::Test_Class::AddMethodProxy(std::shared_ptr<::meta::reflection::Method> method) { AddMethod(method); } void test::Test::Test_Class::AddFieldProxy(std::shared_ptr<::meta::reflection::Field> field) { AddField(field); } /** * Field **/ test::Test::Test_Field::Test_Field( const std::string& name, std::shared_ptr<::meta::reflection::Class> parent) : ::meta::reflection::Field(name, parent) {} ::meta::reflection::any test::Test::Test_Field::GetImpl(void* instance) const { ::test::Test* obj = (::test::Test*)instance; if (strcmp(Name().c_str(), "length_") == 0) { return obj->length_; } if (strcmp(Name().c_str(), "size_") == 0) { return obj->size_; } return ::meta::reflection::any{}; } void test::Test::Test_Field::SetImpl(void* instance, const ::meta::reflection::any& value) const { ::test::Test* obj = (::test::Test*)instance; if(strcmp(Name().c_str(), "length_") == 0) { obj->length_ = ::meta::reflection::any_cast(value);} if(strcmp(Name().c_str(), "size_") == 0) { obj->size_ = ::meta::reflection::any_cast(value);} } /** * Method **/ test::Test::Test_Method::Test_Method( const std::string& name, std::shared_ptr<::meta::reflection::Class> parent) : ::meta::reflection::Method(name, parent) {} ::meta::reflection::any test::Test::Test_Method::InvokeImpl(void* instance, const std::vector<::meta::reflection::any> ¶ms) const { ::test::Test* obj = (::test::Test*)instance; if (strcmp(Name().c_str(), "size") == 0) { return obj-> size( ); } if (strcmp(Name().c_str(), "length") == 0) { return obj-> length( ); } return ::meta::reflection::any{}; }