diff --git a/include/trick/checkpoint_map.hh b/include/trick/checkpoint_map.hh index 65916c384..0d0a7dc78 100644 --- a/include/trick/checkpoint_map.hh +++ b/include/trick/checkpoint_map.hh @@ -51,8 +51,7 @@ int checkpoint_map_ik_id(STL & in_map , std::string object_name , std::string va typename STL::key_type * keys = nullptr ; typename STL::mapped_type * items = nullptr ; - cont_size = in_map.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = in_map.size(); if ( cont_size > 0 ) { std::string type_string ; @@ -130,8 +129,7 @@ int checkpoint_map_ik_sd(STL & in_map , std::string object_name , std::string va typename STL::key_type * keys = nullptr ; std::string * items = nullptr ; - cont_size = in_map.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = in_map.size(); if ( cont_size > 0 ) { std::string type_string ; @@ -211,8 +209,7 @@ int checkpoint_map_sk_id(STL & in_map , std::string object_name , std::string va std::string * keys = nullptr ; typename STL::mapped_type * items = nullptr ; - cont_size = in_map.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = in_map.size(); if ( cont_size > 0 ) { var_declare << "std::string " @@ -291,8 +288,7 @@ int checkpoint_map_stl_sk_sd(STL & in_map , std::string object_name , std::strin std::string * keys = nullptr ; std::string * items = nullptr ; - cont_size = in_map.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = in_map.size(); if ( cont_size > 0 ) { var_declare << "std::string " @@ -355,8 +351,8 @@ int checkpoint_stl(std::multimap & in_map , std::strin /* =================================================================================================*/ template -int delete_map_allocs(STL & in_map __attribute__ ((unused)), std::string object_name , std::string var_name ) { - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); +int delete_map_allocs(STL& in_map __attribute__((unused)), std::string object_name, std::string var_name) +{ REF2 * items_ref ; std::string temp_str; temp_str = object_name + std::string("_") + var_name + std::string("_keys"); @@ -404,7 +400,6 @@ int restore_map_ik_id(STL & in_map , std::string object_name , std::string var_n //message_publish(1, "in regular map template restore\n") ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); temp_str = object_name + "_" + var_name + "_keys"; keys_ref = ref_attributes(temp_str.c_str()) ; temp_str = object_name + "_" + var_name + "_data"; @@ -453,8 +448,6 @@ int restore_map_ik_sd(STL & in_map , std::string object_name , std::string var_n //message_publish(1, "in regular map template restore\n") ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); - temp_str = object_name + "_" + var_name + "_keys"; keys_ref = ref_attributes(temp_str.c_str()) ; temp_str = object_name + "_" + var_name + "_data"; @@ -507,8 +500,6 @@ int restore_map_sk_id(STL & in_map , std::string object_name , std::string var_n //message_publish(1, "in regular map template restore\n") ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); - temp_str = object_name + "_" + var_name + "_keys"; keys_ref = ref_attributes(temp_str.c_str()) ; temp_str = object_name + "_" + var_name + "_data"; @@ -561,8 +552,6 @@ int restore_map_sk_sd(STL & in_map , std::string object_name , std::string var_n //message_publish(1, "in regular map template restore\n") ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); - temp_str = object_name + "_" + var_name + "_keys"; keys_ref = ref_attributes((char *)temp_str.c_str()) ; temp_str = object_name + "_" + var_name + "_data"; diff --git a/include/trick/checkpoint_pair.hh b/include/trick/checkpoint_pair.hh index c4fc014db..0f447f260 100644 --- a/include/trick/checkpoint_pair.hh +++ b/include/trick/checkpoint_pair.hh @@ -32,8 +32,7 @@ int checkpoint_stl(std::pair & in_pair , std::string object_name std::string temp_str; FIRST * first = nullptr ; - SECOND * second = nullptr ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + SECOND* second = nullptr; std::string type_string ; try { @@ -83,8 +82,7 @@ int checkpoint_stl(std::pair & in_pair , std::string object_name std::string temp_str; FIRST * first = nullptr ; - std::string * second = nullptr ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + std::string* second = nullptr; std::string type_string; try { type_string = stl_type_name_convert(abi::__cxa_demangle(typeid(*first).name(), 0, 0, &status )) ; @@ -129,8 +127,7 @@ int checkpoint_stl(std::pair & in_pair , std::string object_name std::string temp_str ; std::string * first = nullptr ; - SECOND * second = nullptr ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + SECOND* second = nullptr; var_declare << "std::string " << object_name << "_" << var_name << "_first[1]" ; @@ -173,8 +170,6 @@ int checkpoint_stl(std::pair & in_pair , std::string object_name std::string temp_str; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); - var_declare << "std::string " << object_name << "_" << var_name << "_first[1]" ; temp_str = var_declare.str(); @@ -201,8 +196,8 @@ int checkpoint_stl(std::pair & in_pair , std::string object_name /* =================================================================================================*/ template -int delete_stl(std::pair & in_stl __attribute__ ((unused)) , std::string object_name , std::string var_name ) { - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); +int delete_stl(std::pair& in_stl __attribute__((unused)), std::string object_name, std::string var_name) +{ REF2 * items_ref ; std::string temp_str = object_name + "_" + var_name + "_first"; items_ref = ref_attributes(temp_str.c_str()) ; @@ -229,8 +224,7 @@ int restore_stl(std::pair & in_pair , std::string object_name , FIRST * first ; SECOND * second ; - std::string temp_str; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + std::string temp_str; //message_publish(1, "RESTORE_STL_queue %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + "_" + var_name + "_first"; first_ref = ref_attributes((char *)temp_str.c_str()) ; @@ -263,7 +257,6 @@ int restore_stl(std::pair & in_pair , std::string object_name , std::string temp_str; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); //message_publish(1, "RESTORE_STL_queue %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + "_" + var_name + "_first"; first_ref = ref_attributes((char *)temp_str.c_str()) ; @@ -294,8 +287,7 @@ int restore_stl(std::pair & in_pair , std::string object_name , std::string * first_inner ; SECOND * second ; - std::string temp_str; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + std::string temp_str; //message_publish(1, "RESTORE_STL_queue %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + "_" + var_name + "_first"; first_ref = ref_attributes((char *)temp_str.c_str()) ; @@ -327,7 +319,6 @@ int restore_stl(std::pair & in_pair , std::string object_name , std::string temp_str; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); //message_publish(1, "RESTORE_STL_queue %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + "_" + var_name + "_first"; first_ref = ref_attributes((char *)temp_str.c_str()) ; diff --git a/include/trick/checkpoint_queue.hh b/include/trick/checkpoint_queue.hh index b9ec67409..2b2b37e84 100644 --- a/include/trick/checkpoint_queue.hh +++ b/include/trick/checkpoint_queue.hh @@ -40,8 +40,7 @@ int checkpoint_stl(std::queue & in_stl , std::string object ITEM_TYPE * items = nullptr ; std::queue temp_queue(in_stl) ; - cont_size = temp_queue.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = temp_queue.size(); if ( cont_size > 0 ) { std::string type_string; @@ -84,8 +83,7 @@ int checkpoint_stl(std::queue & in_stl , std::string object std::string * items = nullptr ; std::queue temp_queue(in_stl) ; - cont_size = temp_queue.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = temp_queue.size(); if ( cont_size > 0 ) { var_declare << "std::string " @@ -127,8 +125,7 @@ int checkpoint_stl(std::priority_queue & in_stl ITEM_TYPE * items = nullptr ; std::priority_queue temp_queue(in_stl) ; - cont_size = temp_queue.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = temp_queue.size(); if ( cont_size > 0 ) { std::string type_string; @@ -172,8 +169,7 @@ int checkpoint_stl(std::priority_queue & in_stl std::string * items = nullptr ; std::priority_queue temp_queue(in_stl) ; - cont_size = temp_queue.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = temp_queue.size(); if ( cont_size > 0 ) { var_declare << "std::string " @@ -234,8 +230,7 @@ int restore_stl(std::queue & in_stl , std::string object_na std::string temp_str ; REF2 * items_ref ; - ITEM_TYPE * items ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + ITEM_TYPE* items; //message_publish(1, "RESTORE_STL_queue %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + std::string("_") + var_name ; @@ -268,8 +263,7 @@ int restore_stl(std::queue & in_stl , std::string object_na std::string temp_str ; REF2 * items_ref ; - std::string * items ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + std::string* items; //message_publish(1, "RESTORE_STL_queue %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + "_" + var_name ; @@ -307,8 +301,7 @@ int restore_stl(std::priority_queue & in_stl , std::string temp_str ; REF2 * items_ref ; - ITEM_TYPE * items ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + ITEM_TYPE* items; //message_publish(1, "RESTORE_STL_queue %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + std::string("_") + var_name ; @@ -342,8 +335,7 @@ int restore_stl(std::priority_queue & in_stl , std::string temp_str ; REF2 * items_ref ; - std::string * items ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + std::string* items; //message_publish(1, "RESTORE_STL_queue %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + "_" + var_name ; diff --git a/include/trick/checkpoint_sequence_stl.hh b/include/trick/checkpoint_sequence_stl.hh index 11c147d00..9c8535353 100644 --- a/include/trick/checkpoint_sequence_stl.hh +++ b/include/trick/checkpoint_sequence_stl.hh @@ -43,8 +43,7 @@ int checkpoint_sequence_i(STL & in_stl , std::string object_name , std::string v //message_publish(1, "%s\n", __PRETTY_FUNCTION__) ; - cont_size = in_stl.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = in_stl.size(); if ( cont_size > 0 ) { std::string type_string; @@ -86,9 +85,7 @@ int checkpoint_sequence_s(STL & in_stl , std::string object_name , std::string v typename STL::iterator it ; typename STL::iterator end ; - - cont_size = in_stl.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = in_stl.size(); //message_publish(1, "%s\n", __PRETTY_FUNCTION__) ; @@ -220,8 +217,8 @@ int checkpoint_stl(std::multiset & in_stl , std::string object /* =================================================================================================*/ template -int delete_sequence_alloc(STL & in_stl __attribute__ ((unused)), std::string object_name , std::string var_name ) { - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); +int delete_sequence_alloc(STL& in_stl __attribute__((unused)), std::string object_name, std::string var_name) +{ REF2 * items_ref ; std::string temp_str = object_name + std::string("_") + var_name ; items_ref = ref_attributes((char *)temp_str.c_str()) ; @@ -279,8 +276,7 @@ int restore_sequence_i(STL & in_stl , std::string object_name , std::string var_ std::string temp_str ; REF2 * items_ref ; - typename STL::value_type * items ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + typename STL::value_type* items; //message_publish(1, "RESTORE_SEQUENCE_STL %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + std::string("_") + var_name ; @@ -308,8 +304,7 @@ int restore_sequence_s(STL & in_stl , std::string object_name , std::string var_ REF2 * items_ref ; std::string * items ; - std::string temp_str ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + std::string temp_str; //message_publish(1, "%s\n", __PRETTY_FUNCTION__) ; temp_str = object_name + "_" + var_name ; @@ -345,8 +340,7 @@ int restore_stl(std::array & in_stl , std::string object_name , std REF2 * items_ref ; std::string * items ; - std::string temp_str ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + std::string temp_str; //message_publish(1, "%s\n", __PRETTY_FUNCTION__) ; temp_str = object_name + "_" + var_name ; @@ -378,8 +372,7 @@ int restore_stl(std::array & in_stl , std::string object_name , std std::string temp_str ; REF2 * items_ref ; - typename std::array::value_type * items ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + typename std::array::value_type* items; //message_publish(1, "RESTORE_SEQUENCE_STL %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + std::string("_") + var_name ; diff --git a/include/trick/checkpoint_stack.hh b/include/trick/checkpoint_stack.hh index 4279d2633..249b48a96 100644 --- a/include/trick/checkpoint_stack.hh +++ b/include/trick/checkpoint_stack.hh @@ -37,8 +37,7 @@ int checkpoint_stl(std::stack & in_stl , std::string object ITEM_TYPE * items = nullptr ; std::stack temp_stack(in_stl) ; - cont_size = temp_stack.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = temp_stack.size(); if ( cont_size > 0 ) { std::string type_string; @@ -80,8 +79,7 @@ int checkpoint_stl(std::stack & in_stl , std::string object std::string * items = nullptr ; std::stack temp_stack(in_stl) ; - cont_size = temp_stack.size() ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + cont_size = temp_stack.size(); if ( cont_size > 0 ) { var_declare << "std::string " @@ -133,8 +131,7 @@ int restore_stl(std::stack & in_stl , std::string object_na std::string temp_str ; REF2 * items_ref ; - ITEM_TYPE * items = nullptr ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + ITEM_TYPE* items = nullptr; //message_publish(1, "RESTORE_STL_STACK %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + std::string("_") + var_name ; @@ -165,8 +162,7 @@ int restore_stl(std::stack & in_stl , std::string object_na std::string temp_str ; REF2 * items_ref ; - std::string * items = nullptr ; - std::replace_if(object_name.begin(), object_name.end(), static_cast(std::ispunct), '_'); + std::string* items = nullptr; //message_publish(1, "RESTORE_STL_STACK %s_%s\n", object_name.c_str() , var_name.c_str()) ; temp_str = object_name + std::string("_") + var_name ; diff --git a/include/trick/checkpoint_stl_protos.hh b/include/trick/checkpoint_stl_protos.hh index 8cb6455c5..25d4f009a 100644 --- a/include/trick/checkpoint_stl_protos.hh +++ b/include/trick/checkpoint_stl_protos.hh @@ -2,8 +2,62 @@ #ifndef CHECKPOINT_STL_PROTOS_HH #define CHECKPOINT_STL_PROTOS_HH +#include "trick/memorymanager_c_intf.h" + +#include #include +inline std::string checkpoint_stl_name_encode(const std::string& name) +{ + std::string encoded_name; + encoded_name.reserve(name.size()); + + for (const char character : name) + { + if (character == '_') + { + encoded_name += "__"; + } + else if (std::ispunct(static_cast(character))) + { + encoded_name += '_'; + } + else + { + encoded_name += character; + } + } + + return encoded_name; +} + +inline std::string checkpoint_stl_name_encode_legacy(const std::string& name) +{ + std::string encoded_name; + encoded_name.reserve(name.size()); + + for (const char character : name) + { + if (std::ispunct(static_cast(character))) + { + encoded_name += '_'; + } + else + { + encoded_name += character; + } + } + + return encoded_name; +} + +inline bool checkpoint_stl_allocation_exists(const std::string& object_name, const std::string& var_name) +{ + const std::string base_name = object_name + "_" + var_name; + return TMM_var_exists(base_name.c_str()) || TMM_var_exists((base_name + "_keys").c_str()) + || TMM_var_exists((base_name + "_first").c_str()); +} + // prototype of functions used in checkpoint_stl templates std::string stl_type_name_convert(std::string in_type) ; diff --git a/trick_source/codegen/Interface_Code_Gen/PrintFileContents10.cpp b/trick_source/codegen/Interface_Code_Gen/PrintFileContents10.cpp index 5e1b3b1e1..9543b722f 100644 --- a/trick_source/codegen/Interface_Code_Gen/PrintFileContents10.cpp +++ b/trick_source/codegen/Interface_Code_Gen/PrintFileContents10.cpp @@ -390,15 +390,26 @@ void PrintFileContents10::print_io_src_delete( std::ostream & ostream , ClassVal } void PrintFileContents10::print_checkpoint_stl(std::ostream & ostream , FieldDescription * fdes , ClassValues * cv ) { - printStlFunction("checkpoint", "void* start_address, const char* obj_name , const char* var_name", "checkpoint_stl(*stl, obj_name, var_name)", ostream, *fdes, *cv); + printStlFunction("checkpoint", "void* start_address, const char* obj_name , const char* var_name", + "checkpoint_stl(*stl, checkpoint_stl_name_encode(obj_name), checkpoint_stl_name_encode(var_name))", + ostream, *fdes, *cv); } void PrintFileContents10::print_post_checkpoint_stl(std::ostream & ostream , FieldDescription * fdes , ClassValues * cv ) { - printStlFunction("post_checkpoint", "void* start_address, const char* obj_name , const char* var_name", "delete_stl(*stl, obj_name, var_name)", ostream, *fdes, *cv); + printStlFunction("post_checkpoint", "void* start_address, const char* obj_name , const char* var_name", + "delete_stl(*stl, checkpoint_stl_name_encode(obj_name), checkpoint_stl_name_encode(var_name))", + ostream, *fdes, *cv); } void PrintFileContents10::print_restore_stl(std::ostream & ostream , FieldDescription * fdes , ClassValues * cv ) { - printStlFunction("restore", "void* start_address, const char* obj_name , const char* var_name", "restore_stl(*stl, obj_name, var_name)",ostream, *fdes, *cv); + printStlFunction( + "restore", "void* start_address, const char* obj_name , const char* var_name", + "const std::string encoded_object_name = checkpoint_stl_name_encode(obj_name);\n const std::string " + "encoded_var_name = checkpoint_stl_name_encode(var_name);\n if " + "(checkpoint_stl_allocation_exists(encoded_object_name, encoded_var_name)) {\n restore_stl(*stl, " + "encoded_object_name, encoded_var_name);\n } else {\n restore_stl(*stl, " + "checkpoint_stl_name_encode_legacy(obj_name), checkpoint_stl_name_encode_legacy(var_name));\n }", + ostream, *fdes, *cv); } void PrintFileContents10::print_clear_stl(std::ostream & ostream , FieldDescription * fdes , ClassValues * cv ) { diff --git a/trick_source/sim_services/MemoryManager/test/MM_stl_checkpoint.cc b/trick_source/sim_services/MemoryManager/test/MM_stl_checkpoint.cc index a16e5bacb..bedfa456f 100644 --- a/trick_source/sim_services/MemoryManager/test/MM_stl_checkpoint.cc +++ b/trick_source/sim_services/MemoryManager/test/MM_stl_checkpoint.cc @@ -2,9 +2,12 @@ #define private public #include "trick/MemoryManager.hh" -#include "trick/memorymanager_c_intf.h" -#include "MM_test.hh" + #include "MM_stl_testbed.hh" +#include "MM_test.hh" + +#include "trick/checkpoint_stl_protos.hh" +#include "trick/memorymanager_c_intf.h" /* This tests the implementations of checkpoint_stl @@ -28,9 +31,51 @@ class MM_stl_checkpoint : public ::testing::Test { void TearDown() {} }; +TEST(STLCheckpointNameEncoding, distinguishes_member_separators_from_literal_underscores) +{ + EXPECT_EQ("vehicle_lvlh_lvlh__frame_links", + checkpoint_stl_name_encode("vehicle.lvlh.lvlh_frame") + "_" + checkpoint_stl_name_encode("links")); + EXPECT_EQ("vehicle_lvlh_lvlh_frame_links", + checkpoint_stl_name_encode("vehicle.lvlh.lvlh.frame") + "_" + checkpoint_stl_name_encode("links")); +} + +std::string checkpoint_test_name(const std::string& object_name, const std::string& suffix) +{ + size_t encoded_suffix_end = suffix.size(); + + for (size_t index = 0; index < suffix.size(); ++index) + { + if (suffix[index] != '_') + { + continue; + } + + if ((suffix.compare(index, 5, "_keys") == 0) || (suffix.compare(index, 5, "_data") == 0) + || (suffix.compare(index, 6, "_first") == 0) || (suffix.compare(index, 7, "_second") == 0)) + { + encoded_suffix_end = index; + break; + } + + size_t digit = index + 1; + while ((digit < suffix.size()) && std::isdigit(static_cast(suffix[digit]))) + { + ++digit; + } + if ((digit > index + 1) && ((digit == suffix.size()) || (suffix[digit] == '_'))) + { + encoded_suffix_end = index; + break; + } + } + + return checkpoint_stl_name_encode(object_name) + "_" + + checkpoint_stl_name_encode(suffix.substr(0, encoded_suffix_end)) + suffix.substr(encoded_suffix_end); +} + template void validate_single (Trick::MemoryManager * memmgr, std::string object_name, std::string var_name, T expected_data) { - std::string temp_name = object_name + "_" + var_name; + std::string temp_name = checkpoint_test_name(object_name, var_name); ASSERT_TRUE(memmgr->var_exists(temp_name) == 1); REF2 * data_ref = memmgr->ref_attributes(temp_name.c_str()); @@ -45,7 +90,7 @@ void validate_single (Trick::MemoryManager * memmgr, std::string object_name, st template void validate_temp_sequence (Trick::MemoryManager * memmgr, std::string object_name, std::string var_name, std::vector expected_data) { - std::string temp_name = object_name + "_" + var_name; + std::string temp_name = checkpoint_test_name(object_name, var_name); ASSERT_TRUE(memmgr->var_exists(temp_name) == 1); REF2 * data_ref = memmgr->ref_attributes(temp_name.c_str()); @@ -64,7 +109,7 @@ void validate_temp_sequence (Trick::MemoryManager * memmgr, std::string object_n } void validate_links_sequences (Trick::MemoryManager * memmgr, std::string object_name, std::string top_level_name, std::vector lengths) { - std::string temp_name = object_name + "_" + top_level_name; + std::string temp_name = checkpoint_test_name(object_name, top_level_name); ASSERT_TRUE(memmgr->var_exists(temp_name) == 1); REF2 * data_ref = memmgr->ref_attributes(temp_name.c_str()); @@ -80,7 +125,7 @@ void validate_links_sequences (Trick::MemoryManager * memmgr, std::string object } void validate_links_pairs (Trick::MemoryManager * memmgr, std::string object_name, std::string top_level_name, int num_pairs) { - std::string temp_name = object_name + "_" + top_level_name; + std::string temp_name = checkpoint_test_name(object_name, top_level_name); ASSERT_TRUE(memmgr->var_exists(temp_name) == 1); REF2 * data_ref = memmgr->ref_attributes(temp_name.c_str()); @@ -99,7 +144,7 @@ void validate_links_pairs (Trick::MemoryManager * memmgr, std::string object_nam } void validate_link_from_pair (Trick::MemoryManager * memmgr, std::string object_name, std::string top_level_name) { - std::string temp_name = object_name + "_" + top_level_name; + std::string temp_name = checkpoint_test_name(object_name, top_level_name); ASSERT_TRUE(memmgr->var_exists(temp_name) == 1); REF2 * link_ref = memmgr->ref_attributes(temp_name.c_str()); @@ -110,7 +155,7 @@ void validate_link_from_pair (Trick::MemoryManager * memmgr, std::string object_ template void validate_temp_set (Trick::MemoryManager * memmgr, std::string object_name, std::string var_name, std::set expected_data) { - std::string temp_name = object_name + "_" + var_name; + std::string temp_name = checkpoint_test_name(object_name, var_name); ASSERT_TRUE(memmgr->var_exists(temp_name) == 1); REF2 * data_ref = memmgr->ref_attributes(temp_name.c_str()); @@ -134,7 +179,7 @@ void validate_temp_set (Trick::MemoryManager * memmgr, std::string object_name, template void validate_temp_pair (Trick::MemoryManager * memmgr, std::string object_name, std::string var_name, std::pair expected_data) { - std::string temp_name = object_name + "_" + var_name; + std::string temp_name = checkpoint_test_name(object_name, var_name); std::string first_name = temp_name + "_first"; std::string second_name = temp_name + "_second"; @@ -160,7 +205,7 @@ void validate_temp_pair (Trick::MemoryManager * memmgr, std::string object_name, template void validate_temp_map (Trick::MemoryManager * memmgr, std::string object_name, std::string var_name, std::map expected_data) { - std::string temp_name = object_name + "_" + var_name; + std::string temp_name = checkpoint_test_name(object_name, var_name); std::string keys_name = temp_name + "_keys"; std::string vals_name = temp_name + "_data"; @@ -1179,9 +1224,9 @@ TEST_F(MM_stl_checkpoint, vec_user_defined ) { (vec_attr->checkpoint_stl)((void *) &testbed->vec_user_defined, "my_alloc", vec_attr->name) ; // ASSERT - ASSERT_TRUE(memmgr->var_exists("my_alloc_vec_user_defined") == 1); + ASSERT_TRUE(memmgr->var_exists("my__alloc_vec__user__defined") == 1); - REF2 * data_ref = memmgr->ref_attributes("my_alloc_vec_user_defined"); + REF2* data_ref = memmgr->ref_attributes("my__alloc_vec__user__defined"); UserClass * data = (UserClass *) data_ref->address; ASSERT_TRUE(data != NULL); diff --git a/trick_source/sim_services/MemoryManager/test/MM_write_checkpoint.cc b/trick_source/sim_services/MemoryManager/test/MM_write_checkpoint.cc index 63a705d72..a72cd70af 100644 --- a/trick_source/sim_services/MemoryManager/test/MM_write_checkpoint.cc +++ b/trick_source/sim_services/MemoryManager/test/MM_write_checkpoint.cc @@ -1117,16 +1117,17 @@ TEST_F(MM_write_checkpoint, WrappedStl ) { std::string result= ss.str(); ASSERT_NE (result.size(), 0); - EXPECT_EQ( strcmp_IgnoringWhiteSpace( - "// Variable Declarations." - "VectorWrapper vec_allocation;" - "int vec_allocation_vec[4];" - "// Clear all allocations to 0." - "clear_all_vars();" - "// Variable Assignments." - "// STL: vec_allocation.vec" - "vec_allocation_vec = " - "{10, 20, 30, 40};", result.c_str()), 0); + EXPECT_EQ(strcmp_IgnoringWhiteSpace("// Variable Declarations." + "VectorWrapper vec_allocation;" + "int vec__allocation_vec[4];" + "// Clear all allocations to 0." + "clear_all_vars();" + "// Variable Assignments." + "// STL: vec_allocation.vec" + "vec__allocation_vec = " + "{10, 20, 30, 40};", + result.c_str()), + 0); } // ================================================================================