コード例 #1
0
CNamedHollowObject* CObjects::AllocateNamedHollow(unsigned short iNumEmbedded)
{
	CNamedHollowObject*		pcHollow;
	int						iAdditionalBytes;
	void*					pvEmbedded;
	int						iHollowSize;

	if (iNumEmbedded == 0)
	{
		return NULL;
	}
	if (iNumEmbedded == 1)
	{
		pcHollow = Allocate<CNamedHollowObject>();
		pcHollow->Init(1);
		return pcHollow;
	}
	else
	{
		iAdditionalBytes = sizeof(CHollowEmbeddedObject) * (iNumEmbedded-1);
		pcHollow = Allocate<CNamedHollowObject>(iAdditionalBytes);
		pcHollow->Init(iNumEmbedded);

		iHollowSize = sizeof(CNamedHollowObject);
		pvEmbedded = RemapSinglePointer(pcHollow, iHollowSize);
		AppenedHollowEmbeddedObjects(pcHollow, iNumEmbedded, pvEmbedded);

		return pcHollow;
	}
}
コード例 #2
0
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;
}
コード例 #3
0
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;
	}
}