Added Object/ObjectAllocator/ObjectManager ....
This commit is contained in:
@@ -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
16
src/Object/Object.cpp
Normal 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
|
71
src/Object/ObjectManager.cpp
Normal file
71
src/Object/ObjectManager.cpp
Normal 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
|
Reference in New Issue
Block a user