BOOL CNamedIndexedObjects::AddWithIDAndName(CBaseObject* pvObject, OIndex oi, char* szName) { CNamedObject* pcNamed; CNamedHollowObject* pcNamedHollow; BOOL bResult; if (mcNames.HasKey(szName)) { gcLogger.Error2(__METHOD__, " Cannot add object named [", szName, "]. It already exists.", NULL); return FALSE; } bResult = AddWithID(pvObject, oi); if (!bResult) { char sz[32]; gcLogger.Error2(__METHOD__, " Cannot add object named [", szName, "]. An index [", IToA(oi, sz, 10), "] already exists.", NULL); return FALSE; } if (!pvObject->IsHollow()) { pcNamed = (CNamedObject*)pvObject; bResult = pcNamed->InitName(szName); } else { pcNamedHollow = (CNamedHollowObject*)pvObject; bResult = pcNamedHollow->InitName(szName); } if ((szName != NULL) && (szName[0] != 0)) { oi = pvObject->GetOI(); szName = (char*)mcNames.Put(szName, &oi, sizeof(OIndex)); bResult = szName != NULL; } return bResult; }
CBaseObject* CObjectAllocator::AddHollow(char* szObjectName, unsigned short iNumEmbedded) { CNamedHollowObject* pcHollow; BOOL bResult; CBaseObject* pvExisting; if ((szObjectName == NULL || szObjectName[0] == '\0')) { return NULL; } pvExisting = mpcObjects->GetFromMemory(szObjectName); if (pvExisting) { return pvExisting; } pcHollow = mpcObjects->AllocateNamedHollow(iNumEmbedded); if (!pcHollow) { return NULL; } pcHollow->InitName(szObjectName); bResult = mpcObjects->AddWithIDAndName(pcHollow, szObjectName, mpcObjects->GetIndexGenerator()->PopIndex()); if (bResult) { LOG_OBJECT_ALLOCATION(pcHollow); return pcHollow; } else { return NULL; } }