1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
5 #include <CryMemory/CrySizer.h>
6 #include <CryMemory/PoolAllocator.h>
8 #include <CrySchematyc2/IObjectManager.h>
13 // #SchematycTODO : Finish implementing object pool and look-up system!!!
18 ////////////////////////////////////////////////////////////////////////////////////////////////////
19 class CObjectManager
: public IObjectManager
28 virtual IObject
* CreateObject(const SObjectParams
& params
) override
;
29 virtual void DestroyObject(IObject
* pObject
) override
;
30 virtual IObject
* GetObjectById(const ObjectId
& objectId
) override
;
31 //virtual IObject* GetObjectByEntityId(const ExplicitEntityId& entityId) override;
32 virtual void VisitObjects(const IObjectVisitor
& visitor
) override
;
33 virtual void VisitObjects(const IObjectConstVisitor
& visitor
) const override
;
34 virtual void SendSignal(const ObjectId
& objectId
, const SGUID
& signalGUID
, const TVariantConstArray
& inputs
= TVariantConstArray()) override
;
35 virtual void SendSignal(const ExplicitEntityId
& entityId
, const SGUID
& signalGUID
, const TVariantConstArray
& inputs
= TVariantConstArray()) override
;
36 virtual void BroadcastSignal(const SGUID
& signalGUID
, const TVariantConstArray
& inputs
= TVariantConstArray()) override
;
41 static const uint32 POOL_SIZE
= 256;
42 static const uint32 MAX_POOL_COUNT
= 256;
43 static const uint32 POOL_INDEX_SHIFT
= 0;
44 static const uint32 POOL_INDEX_MASK
= 0x000000ff;
45 static const uint32 BUCKET_INDEX_SHIFT
= 8;
46 static const uint32 BUCKET_INDEX_MASK
= 0x0000ff00;
47 static const uint32 SALT_SHIFT
= 16;
48 static const uint32 SALT_MASK
= 0x00ff0000;
56 bool Allocate(void*& ptr
, uint32
& iBucket
, uint32
& salt
);
57 void Free(uint32 iBucket
);
58 void* Get(uint32 iBucket
, uint32 salt
);
66 uint32 iNextFreeBucket
;
67 uint8 storage
[sizeof(CObject
)];
73 SBucket m_buckets
[POOL_SIZE
];
74 uint32 m_iFirstFreeBucket
;
77 DECLARE_SHARED_POINTERS(CPool
)
79 typedef stl::TPoolAllocator
<CObject
> TObjectAllocator
;
80 typedef VectorMap
<ObjectId
, CObject
*> TObjectMap
;
81 typedef std::vector
<CPoolPtr
> TPoolVector
;
83 bool CreateObject(const SObjectParams
& params
, CObject
*& pObject
, ObjectId
& objectId
);
84 void DestroyObject(const ObjectId
& objectId
);
85 CObject
* GetObjectImpl(const ObjectId
& objectId
);
87 ObjectId m_nextObjectId
;
88 TObjectAllocator m_objectAllocator
;