diff --git a/inc/hgl/type/IDName.h b/inc/hgl/type/IDName.h index 4caa3ad..9d3411c 100644 --- a/inc/hgl/type/IDName.h +++ b/inc/hgl/type/IDName.h @@ -5,18 +5,24 @@ namespace hgl { - template - bool RegistryIDName(const size_t hash_code,ConstStringView &csv,const SC *name_string,const int name_length); + template + bool RegistryIDName(ConstStringView &csv,const SC *name_string,const int name_length) + { + if(!T::id_name_set) + T::id_name_set=new ConstStringSet; + + return(T::id_name_set->AddString(csv,name_string,name_length)>=0); + } /** * 顺序ID+名称数据结构模板
* 按添加进来的名字先后顺序一个个产生连续的序号,所有数据只可读不可写 */ - template class OrderedIDName:public Comparator> + template class OrderedIDName:public Comparator> { public: - using SelfClass=OrderedIDName; + using SelfClass=OrderedIDName; protected: @@ -39,7 +45,7 @@ namespace hgl return; } - RegistryIDName(typeid(SelfClass).hash_code(),csv,name_string,name_length); + RegistryIDName(csv,name_string,name_length); } public: @@ -90,10 +96,11 @@ namespace hgl const int compare(const OrderedIDName &oin)const override{return GetID()-oin.GetID();} };//class IDName -#define HGL_DEFINE_IDNAME(name,type) constexpr const char IDNameTag_##name[]=#name; \ - using name=OrderedIDName; \ - using name##Set=SortedSet; //使用__COUNTER__是为了让typeid()不同 - +#define HGL_DEFINE_IDNAME(name,char_type) struct IDName##_##name##_Manager{static ConstStringSet *id_name_set;}; \ + ConstStringSet *IDName##_##name##_Manager::id_name_set=nullptr; \ + using name=OrderedIDName; \ + using name##Set=SortedSet; + HGL_DEFINE_IDNAME(AIDName, char) HGL_DEFINE_IDNAME(WIDName, wchar_t) HGL_DEFINE_IDNAME(U8IDName, u8char) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5c49025..20e9d49 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,8 +27,7 @@ SOURCE_GROUP("DataType\\BitsArray" FILES ${BITS_ARRAY_FILES}) SET(TYPE_IDNAME_HEADER_FILES ${TYPE_INCLUDE_PATH}/ConstStringSet.h ${TYPE_INCLUDE_PATH}/IDName.h) -SET(TYPE_IDNAME_SOURCE_FILES Text/ConstStringSetSaveToTextStream.cpp - Type/IDName.cpp) +SET(TYPE_IDNAME_SOURCE_FILES Text/ConstStringSetSaveToTextStream.cpp) SOURCE_GROUP("DataType\\IDName" FILES ${TYPE_IDNAME_HEADER_FILES} ${TYPE_IDNAME_SOURCE_FILES}) diff --git a/src/Type/IDName.cpp b/src/Type/IDName.cpp deleted file mode 100644 index 234efce..0000000 --- a/src/Type/IDName.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include - -namespace hgl -{ - template - bool RegistryIDName(const size_t hash_code,ConstStringView &csv,const SC *name_string,const int name_length) - { - static ObjectMap> css_map; - - ConstStringSet *css; - - if(!css_map.Get(hash_code,css)) - { - css=new ConstStringSet; - css_map.Add(hash_code,css); - } - - return(css->AddString(csv,name_string,name_length)>=0); - } - -#define REGISTRY_ID_NAME(type) bool RegistryIDName_##type(const size_t hash_code,ConstStringView &csv,const type *name,const int length){return RegistryIDName(hash_code,csv,name,length);} - - REGISTRY_ID_NAME(char) - REGISTRY_ID_NAME(wchar_t) - REGISTRY_ID_NAME(u8char) - REGISTRY_ID_NAME(u16char) - REGISTRY_ID_NAME(os_char) - -#undef REGISTRY_ID_NAME -}//namespace hgl