From 797b4cdc5553c0f3ed9f492a436b800aab860d13 Mon Sep 17 00:00:00 2001 From: Weijia Song Date: Thu, 9 May 2024 15:20:16 -0400 Subject: [PATCH] create v1.0.1rc to match derecho2.4.0 --- .../console_printer_udl.cpp | 2 +- .../standalone/dairy_farm/filter_udl.cpp | 2 +- .../standalone/dairy_farm/infer_udl.cpp | 2 +- .../standalone/dairy_farm/storage_udl.cpp | 2 +- .../standalone/dds/src/dds_udl.cpp | 6 +-- .../notification/notification_udl.cpp | 2 +- .../cli_example.cpp | 18 +++---- .../cascade_as_subgroup_classes/perf.cpp | 4 +- .../tests/pipeline/pipeline_client.cpp | 2 +- src/service/client.cpp | 14 +++--- src/service/cs/cascade_client_cs.cpp | 24 +++++----- src/service/java/jni/cascade_jni.cpp | 10 ++-- src/service/python/cascade_client_py.cpp | 4 +- src/service/server.hpp | 2 +- src/udl_zoo/csharp/gateway_to_managed.hpp | 48 +++++++++---------- 15 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/applications/standalone/console_printer_udl/console_printer_udl.cpp b/src/applications/standalone/console_printer_udl/console_printer_udl.cpp index dcec3873..5dff102e 100644 --- a/src/applications/standalone/console_printer_udl/console_printer_udl.cpp +++ b/src/applications/standalone/console_printer_udl/console_printer_udl.cpp @@ -16,7 +16,7 @@ std::string get_description() { } class ConsolePrinterOCDPO: public OffCriticalDataPathObserver { - virtual void operator () (const node_id_t sender, + virtual void operator () (const derecho::node_id_t sender, const std::string& key_string, const uint32_t prefix_length, persistent::version_t version, diff --git a/src/applications/standalone/dairy_farm/filter_udl.cpp b/src/applications/standalone/dairy_farm/filter_udl.cpp index 6024ac18..3024f853 100644 --- a/src/applications/standalone/dairy_farm/filter_udl.cpp +++ b/src/applications/standalone/dairy_farm/filter_udl.cpp @@ -39,7 +39,7 @@ std::string get_description() { class DairyFarmFilterOCDPO: public OffCriticalDataPathObserver { std::mutex p2p_send_mutex; - virtual void operator () (const node_id_t, + virtual void operator () (const derecho::node_id_t, const std::string& key_string, const uint32_t prefix_length, persistent::version_t version, diff --git a/src/applications/standalone/dairy_farm/infer_udl.cpp b/src/applications/standalone/dairy_farm/infer_udl.cpp index 6c7a9004..c9fa1919 100644 --- a/src/applications/standalone/dairy_farm/infer_udl.cpp +++ b/src/applications/standalone/dairy_farm/infer_udl.cpp @@ -239,7 +239,7 @@ class DairyFarmInferOCDPO: public OffCriticalDataPathObserver { private: mutable std::mutex p2p_send_mutex; - virtual void operator () (const node_id_t, + virtual void operator () (const derecho::node_id_t, const std::string& key_string, const uint32_t prefix_length, persistent::version_t version, diff --git a/src/applications/standalone/dairy_farm/storage_udl.cpp b/src/applications/standalone/dairy_farm/storage_udl.cpp index 74162560..c92fa359 100644 --- a/src/applications/standalone/dairy_farm/storage_udl.cpp +++ b/src/applications/standalone/dairy_farm/storage_udl.cpp @@ -20,7 +20,7 @@ std::string get_description() { class DairyFarmStorageOCDPO: public OffCriticalDataPathObserver { - virtual void operator () (const node_id_t, + virtual void operator () (const derecho::node_id_t, const std::string&, const uint32_t, persistent::version_t, diff --git a/src/applications/standalone/dds/src/dds_udl.cpp b/src/applications/standalone/dds/src/dds_udl.cpp index 149b0bd7..2ed76989 100644 --- a/src/applications/standalone/dds/src/dds_udl.cpp +++ b/src/applications/standalone/dds/src/dds_udl.cpp @@ -26,7 +26,7 @@ class DDSOCDPO: public OffCriticalDataPathObserver { /* control plane suffix */ std::string control_plane_suffix; /* subscriber registry */ - std::unordered_map> subscriber_registry; + std::unordered_map> subscriber_registry; #ifdef USE_DDS_TIMESTAMP_LOG #define INIT_TIMESTAMP_SLOTS (262144) /* log the server timestamp, they are grouped by topic name */ @@ -35,7 +35,7 @@ class DDSOCDPO: public OffCriticalDataPathObserver { /* Is shared_mutex fast enough? */ mutable std::shared_mutex subscriber_registry_mutex; - virtual void operator () (const node_id_t sender, + virtual void operator () (const derecho::node_id_t sender, const std::string& key_string, const uint32_t prefix_length, persistent::version_t, // version @@ -64,7 +64,7 @@ class DDSOCDPO: public OffCriticalDataPathObserver { if (command.command_type == DDSCommand::SUBSCRIBE) { std::unique_lock wlock(this->subscriber_registry_mutex); if (subscriber_registry.find(command.topic) == subscriber_registry.end()) { - subscriber_registry.emplace(command.topic,std::unordered_set{}); + subscriber_registry.emplace(command.topic,std::unordered_set{}); #ifdef USE_DDS_TIMESTAMP_LOG // only add log for new topic. server_timestamp.emplace(command.topic,std::vector{}); diff --git a/src/applications/standalone/notification/notification_udl.cpp b/src/applications/standalone/notification/notification_udl.cpp index a3fcc695..3d6cab4a 100644 --- a/src/applications/standalone/notification/notification_udl.cpp +++ b/src/applications/standalone/notification/notification_udl.cpp @@ -17,7 +17,7 @@ std::string get_description() { } class NotificationOCDPO: public OffCriticalDataPathObserver { - virtual void operator () (const node_id_t sender, + virtual void operator () (const derecho::node_id_t sender, const std::string& key_string, const uint32_t prefix_length, persistent::version_t, diff --git a/src/applications/tests/cascade_as_subgroup_classes/cli_example.cpp b/src/applications/tests/cascade_as_subgroup_classes/cli_example.cpp index f53e6ac5..57043e3e 100644 --- a/src/applications/tests/cascade_as_subgroup_classes/cli_example.cpp +++ b/src/applications/tests/cascade_as_subgroup_classes/cli_example.cpp @@ -59,7 +59,7 @@ static void client_help() { // put_type = 1 : persistent // put_type = 2 : trigger static void client_put(derecho::ExternalGroupClient& group, - node_id_t member, + derecho::node_id_t member, const std::vector& tokens, bool is_persistent) { if (tokens.size() != 3) { @@ -88,7 +88,7 @@ static void client_put(derecho::ExternalGroupClient& group, } static void client_trigger_put(derecho::ExternalGroupClient& group, - node_id_t member, + derecho::node_id_t member, const std::vector& tokens) { if (tokens.size() != 3) { std::cout << "Invalid format of 'put' command." << std::endl; @@ -107,7 +107,7 @@ static void client_trigger_put(derecho::ExternalGroupClient& group, // get static void client_get(derecho::ExternalGroupClient& group, - node_id_t member, + derecho::node_id_t member, const std::vector& tokens, bool is_persistent, bool is_stable) { @@ -152,7 +152,7 @@ static void client_get(derecho::ExternalGroupClient& group, // list static void client_list(derecho::ExternalGroupClient& group, - node_id_t member, + derecho::node_id_t member, const std::vector& tokens, bool is_persistent) { uint64_t ver = CURRENT_VERSION; @@ -195,7 +195,7 @@ static void client_list(derecho::ExternalGroupClient& group, // remove static void client_remove(derecho::ExternalGroupClient& group, - node_id_t member, + derecho::node_id_t member, const std::vector& tokens, bool is_persistent) { if (tokens.size() != 2) { @@ -226,28 +226,28 @@ void do_client() { std::cout << "Finished constructing ExternalGroupClient." << std::endl; /** 2 - get members */ - std::vector g_members = group.get_members(); + std::vector g_members = group.get_members(); std::cout << "Members in top derecho group:[ "; for(auto& nid:g_members) { std::cout << nid << " "; } std::cout << "]" << std::endl; - std::vector vcs_members = group.template get_shard_members(0,0); + std::vector vcs_members = group.template get_shard_members(0,0); std::cout << "Members in the single shard of Volatile Cascade Store:[ "; for (auto& nid:vcs_members) { std::cout << nid << " "; } std::cout << "]" << std::endl; - std::vector pcs_members = group.template get_shard_members(0,0); + std::vector pcs_members = group.template get_shard_members(0,0); std::cout << "Members in the single shard of Persistent Cascade Store:[ "; for (auto& nid:pcs_members) { std::cout << nid << " "; } std::cout << "]" << std::endl; - std::vector tcs_members = group.template get_shard_members(0,0); + std::vector tcs_members = group.template get_shard_members(0,0); std::cout << "Members in the single shard of Trigger Cascade (NO)Store:[ "; for (auto& nid:tcs_members) { std::cout << nid << " "; diff --git a/src/applications/tests/cascade_as_subgroup_classes/perf.cpp b/src/applications/tests/cascade_as_subgroup_classes/perf.cpp index ea5419a6..4b31e69c 100644 --- a/src/applications/tests/cascade_as_subgroup_classes/perf.cpp +++ b/src/applications/tests/cascade_as_subgroup_classes/perf.cpp @@ -343,7 +343,7 @@ int do_client(int argc,char** args) { ExternalClientCaller::type>& pcs_ec = group.get_subgroup_caller(); auto members = group.template get_shard_members(0,0); - node_id_t server_id = members[my_node_id % members.size()]; + derecho::node_id_t server_id = members[my_node_id % members.size()]; for(uint64_t i = 0; i < num_messages; i++) { ObjectWithUInt64Key o(randomize_key(i)%max_distinct_objects,Blob(bbuf, msg_size)); @@ -363,7 +363,7 @@ int do_client(int argc,char** args) { ExternalClientCaller::type>& vcs_ec = group.get_subgroup_caller(); auto members = group.template get_shard_members(0,0); - node_id_t server_id = members[my_node_id % members.size()]; + derecho::node_id_t server_id = members[my_node_id % members.size()]; for(uint64_t i = 0; i < num_messages; i++) { ObjectWithUInt64Key o(randomize_key(i)%max_distinct_objects,Blob(bbuf, msg_size)); diff --git a/src/applications/tests/pipeline/pipeline_client.cpp b/src/applications/tests/pipeline/pipeline_client.cpp index c21e77b5..893ee512 100644 --- a/src/applications/tests/pipeline/pipeline_client.cpp +++ b/src/applications/tests/pipeline/pipeline_client.cpp @@ -108,7 +108,7 @@ int main(int argc, char** argv) { uint64_t next_ns = 0; uint64_t end_ns = now_ns + duration_sec*1e9; #ifdef ENABLE_EVALUATION - node_id_t my_node_id = capi.get_my_id(); + derecho::node_id_t my_node_id = capi.get_my_id(); uint64_t msg_id = 0; #endif diff --git a/src/service/client.cpp b/src/service/client.cpp index 01403db1..be512155 100644 --- a/src/service/client.cpp +++ b/src/service/client.cpp @@ -125,7 +125,7 @@ void print_member_selection_policy(ServiceClientAPI& capi, uint32_t subgroup_ind template void set_member_selection_policy(ServiceClientAPI& capi, uint32_t subgroup_index, uint32_t shard_index, - ShardMemberSelectionPolicy policy, node_id_t user_specified_node_id) { + ShardMemberSelectionPolicy policy, derecho::node_id_t user_specified_node_id) { capi.template set_member_selection_policy(subgroup_index,shard_index,policy,user_specified_node_id); } @@ -332,7 +332,7 @@ void op_trigger_put(ServiceClientAPI& capi, const std::string& key, const std::s } template -void collective_trigger_put(ServiceClientAPI& capi, const std::string& key, const std::string& value, uint32_t subgroup_index, std::vector nodes) { +void collective_trigger_put(ServiceClientAPI& capi, const std::string& key, const std::string& value, uint32_t subgroup_index, std::vector nodes) { typename SubgroupType::ObjectType obj; if constexpr (std::is_same::value) { obj.key = static_cast(std::stol(key,nullptr,0)); @@ -344,7 +344,7 @@ void collective_trigger_put(ServiceClientAPI& capi, const std::string& key, cons } obj.blob = Blob(reinterpret_cast(value.c_str()),value.length()); - std::unordered_map>> nodes_and_futures; + std::unordered_map>> nodes_and_futures; for (auto& nid: nodes) { nodes_and_futures.emplace(nid,nullptr); } @@ -1079,9 +1079,9 @@ std::vector commands = print_red("Invalid policy name:" + cmd_tokens[4]); return false; } - node_id_t user_specified_node_id = INVALID_NODE_ID; + derecho::node_id_t user_specified_node_id = INVALID_NODE_ID; if (cmd_tokens.size() >= 6) { - user_specified_node_id = static_cast(std::stoi(cmd_tokens[5],nullptr,0)); + user_specified_node_id = static_cast(std::stoi(cmd_tokens[5],nullptr,0)); } on_subgroup_type(cmd_tokens[1],set_member_selection_policy,capi,subgroup_index,shard_index,policy,user_specified_node_id); return true; @@ -1300,12 +1300,12 @@ std::vector commands = "collective_trigger_put [node id 2, ...] \n" " type := " SUBGROUP_TYPE_LIST, [](ServiceClientAPI& capi, const std::vector& cmd_tokens) { - std::vector nodes; + std::vector nodes; CHECK_FORMAT(cmd_tokens,6); uint32_t subgroup_index = static_cast(std::stoi(cmd_tokens[4],nullptr,0)); size_t arg_idx = 5; while(arg_idx < cmd_tokens.size()) { - nodes.push_back(static_cast(std::stoi(cmd_tokens[arg_idx++],nullptr,0))); + nodes.push_back(static_cast(std::stoi(cmd_tokens[arg_idx++],nullptr,0))); } on_subgroup_type(cmd_tokens[1],collective_trigger_put,capi,cmd_tokens[2]/*key*/,cmd_tokens[3]/*value*/,subgroup_index,nodes); return true; diff --git a/src/service/cs/cascade_client_cs.cpp b/src/service/cs/cascade_client_cs.cpp index 8f99da3a..fff811fa 100644 --- a/src/service/cs/cascade_client_cs.cpp +++ b/src/service/cs/cascade_client_cs.cpp @@ -456,16 +456,16 @@ struct TwoDimensionalNodeList { struct PolicyMetadataInternal { const char* policyString; ShardMemberSelectionPolicy policy; - node_id_t userNode; + derecho::node_id_t userNode; }; -TwoDimensionalNodeList convert_2d_vector(std::vector> vector) { +TwoDimensionalNodeList convert_2d_vector(std::vector> vector) { // heap-allocated so that they persist into the managed code without being destructed - auto flattened_list = new std::vector(); + auto flattened_list = new std::vector(); auto vector_sizes = new std::vector(); for (const auto& inner_list : vector) { vector_sizes->push_back(inner_list.size()); - for (const node_id_t node : inner_list) { + for (const derecho::node_id_t node : inner_list) { flattened_list->push_back(node); } } @@ -512,7 +512,7 @@ EXPORT bool deleteStringVectorPointer(std::vector* ptr) { return true; } -EXPORT bool deleteNodeIdVectorPointer(std::vector* ptr) { +EXPORT bool deleteNodeIdVectorPointer(std::vector* ptr) { delete ptr; return true; } @@ -540,25 +540,25 @@ EXPORT uint32_t EXPORT_getMyId(ServiceClientAPI& capi) { EXPORT StdVectorWrapper EXPORT_getMembers(ServiceClientAPI& capi) { // heap-allocated so that it persists into the managed code without being destructed - auto vec = new std::vector(capi.get_members()); + auto vec = new std::vector(capi.get_members()); return {vec->data(), vec, vec->size()}; } EXPORT TwoDimensionalNodeList EXPORT_getSubgroupMembers(ServiceClientAPI& capi, char* serviceType, uint32_t subgroupIndex) { - std::vector> members; + std::vector> members; on_all_subgroup_type(std::string(serviceType), members = capi.template get_subgroup_members, subgroupIndex); return convert_2d_vector(members); } EXPORT TwoDimensionalNodeList EXPORT_getSubgroupMembersByObjectPool(ServiceClientAPI& capi, char* objectPoolPathname) { - std::vector> members = capi.get_subgroup_members(objectPoolPathname); + std::vector> members = capi.get_subgroup_members(objectPoolPathname); return convert_2d_vector(members); } EXPORT StdVectorWrapper EXPORT_getShardMembers(ServiceClientAPI& capi, char* serviceType, uint32_t subgroupIndex, uint32_t shardIndex) { // heap-allocated so that it persists into the managed code without being destructed - auto members_ptr = new std::vector(); - std::vector members; + auto members_ptr = new std::vector(); + std::vector members; on_all_subgroup_type(std::string(serviceType), members = capi.template get_shard_members, subgroupIndex, shardIndex); for (auto member : members) { members_ptr->push_back(member); @@ -569,7 +569,7 @@ EXPORT StdVectorWrapper EXPORT_getShardMembers(ServiceClientAPI& capi, char* ser EXPORT StdVectorWrapper EXPORT_getShardMembersByObjectPool(ServiceClientAPI& capi, char* objectPoolPathname, uint32_t shardIndex) { // heap-allocated so that it persists into the managed code without being destructed - auto members = new std::vector(); + auto members = new std::vector(); for (auto member : capi.get_shard_members(objectPoolPathname, shardIndex)) { members->push_back(member); } @@ -588,7 +588,7 @@ EXPORT uint32_t EXPORT_getNumberOfShards(ServiceClientAPI& capi, char* serviceTy return num_shards; } -EXPORT void EXPORT_setMemberSelectionPolicy(ServiceClientAPI& capi, char* serviceType, uint32_t subgroupIndex, uint32_t shardIndex, char* policy, node_id_t userNode) { +EXPORT void EXPORT_setMemberSelectionPolicy(ServiceClientAPI& capi, char* serviceType, uint32_t subgroupIndex, uint32_t shardIndex, char* policy, derecho::node_id_t userNode) { ShardMemberSelectionPolicy real_policy = parse_policy_name(std::string(policy)); on_all_subgroup_type(std::string(serviceType), capi.template set_member_selection_policy, subgroupIndex, shardIndex, real_policy, userNode); } diff --git a/src/service/java/jni/cascade_jni.cpp b/src/service/java/jni/cascade_jni.cpp index 2f00f3ee..d9f17fe6 100644 --- a/src/service/java/jni/cascade_jni.cpp +++ b/src/service/java/jni/cascade_jni.cpp @@ -92,7 +92,7 @@ derecho::cascade::ServiceClientAPI *get_api(JNIEnv *env, jobject obj) /** * Translate a C++ int vector to a Java Integer List. */ -jobject cpp_int_vector_to_java_list(JNIEnv *env, std::vector vec) +jobject cpp_int_vector_to_java_list(JNIEnv *env, std::vector vec) { // create a Java array list jclass arr_list_cls = env->FindClass("java/util/ArrayList"); @@ -108,7 +108,7 @@ jobject cpp_int_vector_to_java_list(JNIEnv *env, std::vector vec) jmethodID integer_init_mid = env->GetMethodID(integer_cls, "", "(I)V"); // fill everything in - for (node_id_t id : vec) + for (derecho::node_id_t id : vec) { jobject int_obj = env->NewObject(integer_cls, integer_init_mid, id); env->CallObjectMethod(arr_obj, list_add_mid, int_obj); @@ -125,7 +125,7 @@ JNIEXPORT jobject JNICALL Java_io_cascade_Client_getMembers(JNIEnv *env, jobject { // get members first! derecho::cascade::ServiceClientAPI *capi = get_api(env, obj); - std::vector members = capi->get_members(); + std::vector members = capi->get_members(); // create an array list return cpp_int_vector_to_java_list(env, members); @@ -141,7 +141,7 @@ JNIEXPORT jobject JNICALL Java_io_cascade_Client_getShardMembers__JJ(JNIEnv *env { // get shard members in C++ derecho::cascade::ServiceClientAPI *capi = get_api(env, obj); - std::vector members = capi->get_shard_members(subgroupID, shardID); + std::vector members = capi->get_shard_members(subgroupID, shardID); // create an array list return cpp_int_vector_to_java_list(env, members); @@ -168,7 +168,7 @@ JNIEXPORT jobject JNICALL Java_io_cascade_Client_getShardMembers(JNIEnv *env, jo // get the value of the service type int service_type = get_int_value(env, j_service_type); derecho::cascade::ServiceClientAPI *capi = get_api(env, obj); - std::vector members; + std::vector members; // call get shard members on_service_type(service_type, members = capi->get_shard_members, subgroup_index, shard_index); diff --git a/src/service/python/cascade_client_py.cpp b/src/service/python/cascade_client_py.cpp index 252e9e8a..fa60eb38 100644 --- a/src/service/python/cascade_client_py.cpp +++ b/src/service/python/cascade_client_py.cpp @@ -465,7 +465,7 @@ PYBIND11_MODULE(member_client, m) { .def( "get_subgroup_members", [](ServiceClientAPI_PythonWrapper& capi, std::string service_type, uint32_t subgroup_index) { - std::vector> members; + std::vector> members; on_all_subgroup_type(service_type, members = capi.ref.template get_subgroup_members, subgroup_index); return members; }, @@ -488,7 +488,7 @@ PYBIND11_MODULE(member_client, m) { .def( "get_shard_members", [](ServiceClientAPI_PythonWrapper& capi, std::string service_type, uint32_t subgroup_index, uint32_t shard_index) { - std::vector members; + std::vector members; on_all_subgroup_type(service_type, members = capi.ref.template get_shard_members, subgroup_index, shard_index); return members; }, diff --git a/src/service/server.hpp b/src/service/server.hpp index 21a73aba..ee348cb5 100644 --- a/src/service/server.hpp +++ b/src/service/server.hpp @@ -36,7 +36,7 @@ template class CascadeServiceCDPO : public CriticalDataPathObserver { virtual void operator()(const uint32_t sgidx, const uint32_t shidx, - const node_id_t sender_id, + const derecho::node_id_t sender_id, const typename CascadeType::KeyType& key, const typename CascadeType::ObjectType& value, ICascadeContext* cascade_ctxt, diff --git a/src/udl_zoo/csharp/gateway_to_managed.hpp b/src/udl_zoo/csharp/gateway_to_managed.hpp index 2cf4af50..ac0eee90 100644 --- a/src/udl_zoo/csharp/gateway_to_managed.hpp +++ b/src/udl_zoo/csharp/gateway_to_managed.hpp @@ -9,42 +9,42 @@ // Made up of blittable types and pointers (IntPtr on the C# side). // See this for a reference: https://learn.microsoft.com/en-us/dotnet/framework/interop/blittable-and-non-blittable-types typedef struct { - node_id_t sender; - const char* const object_pool_pathname; - const char* const key_string; - const char* const object_key; - const uint8_t* object_bytes; - std::size_t object_bytes_size; - uint32_t worker_id; - const derecho::cascade::emit_func_t* emit_func; + derecho::node_id_t sender; + const char* const object_pool_pathname; + const char* const key_string; + const char* const object_key; + const uint8_t* object_bytes; + std::size_t object_bytes_size; + uint32_t worker_id; + const derecho::cascade::emit_func_t* emit_func; } OcdpoArgs; typedef void (*emit_callback_ptr)(const derecho::cascade::emit_func_t* emit_func, - const char* key, const uint8_t* bytes, const uint32_t size); + const char* key, const uint8_t* bytes, const uint32_t size); // Function pointer types for the managed call and unmanaged callback // Representation of the ocdpo_handler (Process) in managed code. -typedef void (*managed_direct_method_ptr)(const char* dll_path, const char* class_name, - const OcdpoArgs& ocdpo_args, emit_callback_ptr emit); +typedef void (*managed_direct_method_ptr)(const char* dll_path, const char* class_name, + const OcdpoArgs& ocdpo_args, emit_callback_ptr emit); class GatewayToManaged { public: - GatewayToManaged(); - ~GatewayToManaged(); + GatewayToManaged(); + ~GatewayToManaged(); - bool Init(const std::string& master_absolute_dll_path); - void Invoke(const char* dll_path, const char* class_ame, const OcdpoArgs& ocdpo_args, - emit_callback_ptr emit_invoke_ptr); - bool Close(); + bool Init(const std::string& master_absolute_dll_path); + void Invoke(const char* dll_path, const char* class_ame, const OcdpoArgs& ocdpo_args, + emit_callback_ptr emit_invoke_ptr); + bool Close(); private: - bool _is_initialized; - void* _host_handle; - unsigned int _domain_id; - managed_direct_method_ptr _managed_direct_method; + bool _is_initialized; + void* _host_handle; + unsigned int _domain_id; + managed_direct_method_ptr _managed_direct_method; - void build_tpa_list(const char* directory, const char* extension, std::string& tpa_list); - managed_direct_method_ptr create_managed_delegate(); + void build_tpa_list(const char* directory, const char* extension, std::string& tpa_list); + managed_direct_method_ptr create_managed_delegate(); - void* _core_clr; + void* _core_clr; };