Added Object/ObjectAllocator/ObjectManager ....

This commit is contained in:
2024-10-05 22:14:04 +08:00
parent afa80ed4de
commit e16b93400b
11 changed files with 637 additions and 2 deletions

View File

@@ -13,6 +13,10 @@ SET(CORE_PLATFORM_HEADER_FILES ${CORE_PLATFORM_HEADER_FILES}
${CORE_PLATFORM_OS_FILES}
${CORE_PLATFORM_COMPILER_FILES})
SET(TYPE_INFO_FILE ${CMCORE_ROOT_INCLUDE_PATH}/hgl/type/TypeInfo.h)
SOURCE_GROUP("DataType" FILES ${TYPE_INFO_FILE})
SET(TYPE_INCLUDE_PATH ${CMCORE_ROOT_INCLUDE_PATH}/hgl/type)
SET(TYPE_IDNAME_HEADER_FILES ${TYPE_INCLUDE_PATH}/ConstStringSet.h
@@ -48,9 +52,18 @@ SET(SYSTEM_INFO_SOURCE ${CORE_PLATFORM_INCLUDE_PATH}/SystemInfo.h
SET(MATH_INCLUDE_PATH ${CMCORE_ROOT_INCLUDE_PATH}/hgl/math)
SET(BASE_OBJECT_SOURCE_FILES Object/TickObject.cpp)
SET(BASE_OBJECT_HEADER_FILES ${CMCORE_ROOT_INCLUDE_PATH}/hgl/type/object/ObjectBaseInfo.h
${CMCORE_ROOT_INCLUDE_PATH}/hgl/type/object/Object.h
${CMCORE_ROOT_INCLUDE_PATH}/hgl/type/object/ObjectAllocator.h
${CMCORE_ROOT_INCLUDE_PATH}/hgl/type/object/ObjectManager.h
${CMCORE_ROOT_INCLUDE_PATH}/hgl/type/object/DefaultCreateObject.h)
SOURCE_GROUP("DataType\\Object" FILES ${BASE_OBJECT_SOURCE_FILES})
SET(BASE_OBJECT_SOURCE_FILES Object/Object.cpp
Object/ObjectManager.cpp
Object/TickObject.cpp)
SOURCE_GROUP("DataType\\Object" FILES ${BASE_OBJECT_HEADER_FILES}
${BASE_OBJECT_SOURCE_FILES})
##Math--------------------------------------------------------
SET(MATH_HEADER_FILES ${MATH_INCLUDE_PATH}/bvec.h
@@ -237,6 +250,8 @@ SOURCE_GROUP("Log\\Source Files" FILES ${BASE_LOG_SOURCE})
add_cm_library(CMCore "CM" ${CORE_PLATFORM_HEADER_FILES}
#${SYSTEM_INFO_SOURCE}
${TYPE_INFO_FILE}
${BASE_OBJECT_HEADER_FILES}
${BASE_OBJECT_SOURCE_FILES}
${COLOR_HEADER_FILES}

16
src/Object/Object.cpp Normal file
View File

@@ -0,0 +1,16 @@
//#include<hgl/type/object/Object.h>
namespace hgl
{
//Object::Object(const ObjectBaseInfo &obi) noexcept
//{
// object_base_info=obi;
// std::cout<<"Object Construct("<<GetSerialNumber()<<")"<<std::endl;
//}
//Object::~Object()
//{
// std::cout<<"Object Destruct("<<GetSerialNumber()<<")."<<std::endl;
//}
}//namespace hgl

View File

@@ -0,0 +1,71 @@
#include<hgl/type/object/ObjectManager.h>
//#include<hgl/type/object/Object.h>
//#include<iostream>
#include<tsl/robin_map.h>
namespace hgl
{
namespace
{
using ObjectManagerMap=tsl::robin_map<size_t,ObjectManager *>;
static ObjectManagerMap *object_manager_map=nullptr;
ObjectManagerMap *GetObjectManagerMap()
{
if(!object_manager_map)
object_manager_map=new ObjectManagerMap;
return(object_manager_map);
}
}//namespace
bool RegistryObjectManager(ObjectManager *om)
{
if(!om)
return(false);
const size_t hc=om->GetHashCode();
auto *omm=GetObjectManagerMap();
if(omm->contains(hc))
return(false);
omm->insert({hc,om});
//std::cout<<"RegistryObjectManager("<<std::hex<<hc<<":"<<om->GetTypename()<<")"<<std::endl;
return(true);
}
void UnregistryObjectManager(ObjectManager *om)
{
if(!om)
return;
const size_t hc=om->GetHashCode();
auto *omm=GetObjectManagerMap();
auto omi=omm->find(hc);
if(omi.key()!=hc)
return;
//std::cout<<"UnregistryObjectManager("<<std::hex<<hc<<":"<<om->GetTypename()<<")"<<std::endl;
omm->erase(hc);
}
ObjectManager *GetObjectManager(const size_t &hash_code)
{
auto *omm=GetObjectManagerMap();
auto omi=omm->find(hash_code);
if(omi.key()==hash_code)
return(omi.value());
else
return(nullptr);
}
}//namespace hgl