15 class UserDataBlobCategory
20 UserDataBlobCategory(BlobCategory* blobCategory);
22 void SetUserData(
KyUInt32 blobTypeId,
void* userData)
24 KyUInt32 blobEnum = BlobTypeIdUtils::GetBlobEnum(blobTypeId);
25 m_userDatas[blobEnum] = userData;
28 void* GetUserData(
KyUInt32 blobTypeId)
const
30 KyUInt32 blobEnum = BlobTypeIdUtils::GetBlobEnum(blobTypeId);
31 return m_userDatas[blobEnum];
35 BlobCategory* m_blobCategory;
36 KyArray<void*> m_userDatas;
40 class UserDataBlobNameSpace
45 UserDataBlobNameSpace(BlobNameSpace* blobNameSpace);
46 ~UserDataBlobNameSpace();
48 void* GetUserData(
KyUInt32 blobTypeId) const;
51 BlobNameSpace* m_blobNameSpace;
52 KyArray<UserDataBlobCategory*> m_userDataCategories;
56 class UserDataBlobRegistry
61 ~UserDataBlobRegistry();
66 UserDataBlobNameSpace* GetOrCreateUserDataNameSpace(BlobNameSpace* blobNameSpace);
67 UserDataBlobNameSpace* GetUserDataNameSpace(BlobNameSpace* blobNameSpace);
69 KyArray<UserDataBlobNameSpace*> m_userDataNameSpaces;
72 class UserBlobRegistryInternal
75 static KyResult CheckCollisions(UserDataBlobRegistry& current, UserDataBlobRegistry& other);
76 static void TransferContent(UserDataBlobRegistry& current, UserDataBlobRegistry& other);
77 static void Clear(UserDataBlobRegistry& current);
80 class UserBlobRegistryIdx
96 void* GetAndAdvance(
const UserDataBlobRegistry& registry);
106 class UserBlobRegistryRefCountBase :
public RefCountBase<UserBlobRegistryRefCountBase, Stat_Default_Mem>
111 template<
class T,
class TOwned,
bool IsTOwnedAutodelete>
112 class UserBlobRegistryBase :
public UserBlobRegistryRefCountBase
116 typedef UserBlobRegistryBase<T, TOwned, IsTOwnedAutodelete> SelfType;
118 ~UserBlobRegistryBase()
125 if (m_userDatas.Set(blobTypeId,
object) ==
KY_ERROR)
127 m_owned.PushBack(
object);
133 return m_userDatas.Set(blobTypeId,
object);
136 template<
class BlobT>
139 return SetVal(BlobT::GetBlobTypeId(),
object);
142 template<
class BlobT>
145 return SetRef(BlobT::GetBlobTypeId(),
object);
150 return (T*)m_userDatas.Get(blobTypeId);
154 KyResult TransferContent(SelfType& fromRegistry)
157 KyResult result = UserBlobRegistryInternal::CheckCollisions(m_userDatas, fromRegistry.m_userDatas);
164 m_owned.Reserve(m_owned.GetCount() + fromRegistry.m_owned.GetCount());
165 m_owned.Append(fromRegistry.m_owned);
166 fromRegistry.m_owned.Clear();
169 UserBlobRegistryInternal::TransferContent(m_userDatas, fromRegistry.m_userDatas);
176 return m_userDatas.m_userDataNameSpaces.IsEmpty();
181 UserBlobRegistryInternal::Clear(m_userDatas);
182 if (IsTOwnedAutodelete ==
false)
184 for (
KyUInt32 i = 0; i < m_owned.GetCount(); ++i)
190 T* GetAndAdvance(UserBlobRegistryIdx& idx)
const
192 return (T*) idx.GetAndAdvance(m_userDatas);
197 UserDataBlobRegistry m_userDatas;
198 KyArray<TOwned> m_owned;
202 class UserBlobRegistry :
public UserBlobRegistryBase<T, T*, false>
208 class UserPtrBlobRegistry :
public UserBlobRegistryBase<T, Ptr<T>, true>
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KY_ERROR
use result == KY_ERROR to test for error
Definition: types.h:132
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68