55#include " TypeInfo.hpp"
66#include " PString.h"
77
8- namespace pesapi
9- {
10- namespace regimpl
11- {
12- pesapi_registry pesapi_create_registry ();
13- pesapi_type_info pesapi_alloc_type_infos (size_t count);
14- void pesapi_set_type_info (
15- pesapi_type_info type_infos, size_t index, const char * name, int is_pointer, int is_const, int is_ref, int is_primitive);
16- pesapi_signature_info pesapi_create_signature_info (
17- pesapi_type_info return_type, size_t parameter_count, pesapi_type_info parameter_types);
18- const char * str_dup (const char * str);
19- void pesapi_define_class (pesapi_registry registry, const void * type_id, const void * super_type_id, const char * module_name,
20- const char * type_name, pesapi_constructor constructor, pesapi_finalize finalize, void * data, int copy_str);
21- void pesapi_set_property_info_size (
22- pesapi_registry registry, const void * type_id, int method_count, int function_count, int property_count, int variable_count);
23- void pesapi_set_method_info (pesapi_registry registry, const void * type_id, int index, const char * name, int is_static,
24- pesapi_callback method, void * data, int copy_str);
25- void pesapi_set_property_info (pesapi_registry registry, const void * type_id, int index, const char * name, int is_static,
26- pesapi_callback getter, pesapi_callback setter, void * getter_data, void * setter_data, int copy_str);
27- void * pesapi_get_class_data (pesapi_registry _registry, const void * type_id, int force_load);
28- void pesapi_on_class_not_found (pesapi_registry registry, pesapi_class_not_found_callback callback);
29- void pesapi_class_type_info (pesapi_registry registry, const char * proto_magic_id, const void * type_id, const void * constructor_info,
30- const void * methods_info, const void * functions_info, const void * properties_info, const void * variables_info);
31- const void * pesapi_find_type_id (pesapi_registry registry, const char * module_name, const char * type_name);
32- int pesapi_trace_native_object_lifecycle (
33- pesapi_registry registry, const void * type_id, pesapi_on_native_object_enter on_enter, pesapi_on_native_object_exit on_exit);
34- } // namespace regimpl
35- } // namespace pesapi
8+ #ifdef __cplusplus
9+ extern " C" {
10+ #endif
11+
12+ pesapi_registry_api* GetRegisterApi ();
13+
14+ #ifdef __cplusplus
15+ }
16+ #endif
3617
3718namespace pesapi
3819{
@@ -239,11 +220,11 @@ class PApiBaseTest : public ::testing::Test
239220 // 封装TestStructBase
240221 const int base_properties_count = 2 ;
241222
242- registry = regimpl::pesapi_create_registry ();
243- regimpl::pesapi_set_property_info_size (registry, &g_dummy_base_type_id, 1 , 0 , base_properties_count, 0 );
244- regimpl::pesapi_set_property_info (registry, &g_dummy_base_type_id, 0 , " b" , false , BGetterWrap, BSetterWrap, NULL , NULL , 1 );
245- regimpl::pesapi_set_method_info (registry, &g_dummy_base_type_id, 1 , " Foo" , false , BaseFooWrap, NULL , false );
246- regimpl::pesapi_define_class (registry,&g_dummy_base_type_id, nullptr ,nullptr ,baseTypeName,
223+ registry = GetRegisterApi ()-> create_registry ();
224+ GetRegisterApi ()-> set_property_info_size (registry, &g_dummy_base_type_id, 1 , 0 , base_properties_count, 0 );
225+ GetRegisterApi ()-> set_property_info (registry, &g_dummy_base_type_id, 0 , " b" , false , BGetterWrap, BSetterWrap, NULL , NULL , 1 );
226+ GetRegisterApi ()-> set_method_info (registry, &g_dummy_base_type_id, 1 , " Foo" , false , BaseFooWrap, NULL , false );
227+ GetRegisterApi ()-> define_class (registry,&g_dummy_base_type_id, nullptr ,nullptr ,baseTypeName,
247228 [](struct pesapi_ffi * apis, pesapi_callback_info info) -> void * { // Ctor
248229 auto env = apis->get_env (info);
249230 auto p0 = apis->get_arg (info, 0 );
@@ -256,19 +237,19 @@ class PApiBaseTest : public ::testing::Test
256237
257238 // 封装TestStruct
258239 const int properties_count = 6 ;
259- regimpl::pesapi_set_property_info_size (registry, typeName, 3 , 0 , properties_count, 0 );
260- regimpl::pesapi_set_method_info (registry, &g_dummy_type_id, 0 , " Add" , true , AddWrap, NULL , NULL );
261- regimpl::pesapi_set_method_info (registry, &g_dummy_type_id, 1 , " Calc" , false , CalcWrap, NULL , NULL );
262- regimpl::pesapi_set_property_info (registry, &g_dummy_type_id, 2 , " a" , false , AGetterWrap, ASetterWrap, NULL , NULL , NULL );
263- regimpl::pesapi_set_property_info (
240+ GetRegisterApi ()-> set_property_info_size (registry, typeName, 3 , 0 , properties_count, 0 );
241+ GetRegisterApi ()-> set_method_info (registry, &g_dummy_type_id, 0 , " Add" , true , AddWrap, NULL , NULL );
242+ GetRegisterApi ()-> set_method_info (registry, &g_dummy_type_id, 1 , " Calc" , false , CalcWrap, NULL , NULL );
243+ GetRegisterApi ()-> set_property_info (registry, &g_dummy_type_id, 2 , " a" , false , AGetterWrap, ASetterWrap, NULL , NULL , NULL );
244+ GetRegisterApi ()-> set_property_info (
264245 registry, &g_dummy_type_id, 3 , " ctor_count" , true , CtorCountGetterWrap, CtorCountSetterWrap, NULL , NULL , NULL );
265- regimpl::pesapi_set_method_info (registry, &g_dummy_type_id, 4 , " GetSelf" , false , GetSelfWrap, NULL , NULL );
266- regimpl::pesapi_set_method_info (registry, &g_dummy_type_id, 5 , " Inc" , false , IncWrap, NULL , NULL );
267- regimpl::pesapi_define_class (registry, &g_dummy_type_id, &g_dummy_base_type_id, nullptr , typeName, TestStructCtor,
246+ GetRegisterApi ()-> set_method_info (registry, &g_dummy_type_id, 4 , " GetSelf" , false , GetSelfWrap, NULL , NULL );
247+ GetRegisterApi ()-> set_method_info (registry, &g_dummy_type_id, 5 , " Inc" , false , IncWrap, NULL , NULL );
248+ GetRegisterApi ()-> define_class (registry, &g_dummy_type_id, &g_dummy_base_type_id, nullptr , typeName, TestStructCtor,
268249 TestStructFinalize, nullptr , false );
269250
270- regimpl::pesapi_trace_native_object_lifecycle (registry, baseTypeName, OnObjEnter, OnObjExit);
271- regimpl::pesapi_trace_native_object_lifecycle (registry, typeName, OnObjEnter, OnObjExit);
251+ GetRegisterApi ()-> trace_native_object_lifecycle (registry, baseTypeName, OnObjEnter, OnObjExit);
252+ GetRegisterApi ()-> trace_native_object_lifecycle (registry, typeName, OnObjEnter, OnObjExit);
272253 }
273254
274255 static void * BindData;
@@ -348,10 +329,10 @@ class PApiBaseTest : public ::testing::Test
348329 char buff[1024 ];
349330 size_t len = sizeof (buff);
350331 const char * className = apis->get_value_string_utf8 (env, arg0, buff, &len);
351- auto clsDef = (puerts::ScriptClassDefinition) regimpl::pesapi_find_type_id (registry, nullptr , className);
352- if (clsDef. TypeId != nullptr )
332+ auto typeId = GetRegisterApi ()-> find_type_id (registry, nullptr , className);
333+ if (typeId != nullptr )
353334 {
354- auto ret = apis->create_class (env, clsDef. TypeId );
335+ auto ret = apis->create_class (env, typeId );
355336 apis->add_return (info, ret);
356337 }
357338 else
@@ -395,9 +376,9 @@ TEST_F(PApiBaseTest, RegApi)
395376{
396377 const void * typeId = " Test" ;
397378 int dummyTypeId = 0 ;
398- regimpl::pesapi_define_class (registry, &dummyTypeId, nullptr , nullptr , " Test" , nullptr , nullptr , nullptr , false );
399- regimpl::pesapi_set_property_info_size (registry, &dummyTypeId, 0 , 1 , 0 , 0 );
400- regimpl::pesapi_set_method_info (registry, &dummyTypeId, 0 , " Foo" , true , Foo, nullptr , false );
379+ GetRegisterApi ()-> define_class (registry, &dummyTypeId, nullptr , nullptr , " Test" , nullptr , nullptr , nullptr , false );
380+ GetRegisterApi ()-> set_property_info_size (registry, &dummyTypeId, 0 , 1 , 0 , 0 );
381+ GetRegisterApi ()-> set_method_info (registry, &dummyTypeId, 0 , " Foo" , true , Foo, nullptr , false );
401382
402383 auto clsDef = puerts::FindClassByID ((puerts::ScriptClassRegistry*)registry, &dummyTypeId);
403384 ASSERT_TRUE (clsDef != nullptr );
0 commit comments