From 926c20448ff671343f98e90f93161f51cef0b7ee Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sat, 7 Jun 2025 05:16:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BB=93=E6=9E=84=E7=9A=84ID?= =?UTF-8?q?Name=EF=BC=8C=E7=9B=B4=E6=8E=A5=E4=B8=BA=E6=AF=8F=E7=A7=8D?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89=E4=B8=80=E4=B8=AAConstStri?= =?UTF-8?q?ngSet=E6=9D=A5=E5=8C=BA=E5=88=86=EF=BC=8C=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=90=86=E8=A7=A3=E6=9B=B4=E7=9B=B4=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/type/IDName.h | 25 ++++++++++++++++--------- src/CMakeLists.txt | 3 +-- src/Type/IDName.cpp | 30 ------------------------------ 3 files changed, 17 insertions(+), 41 deletions(-) delete mode 100644 src/Type/IDName.cpp 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