int32 String::checkToClearAndAlloc(int32 nNewLength) { if (getRefCount() <= 1) { internalAlloc(nNewLength); } else { release(); internalAlloc(nNewLength); } return nNewLength; }
int32 String::checkToCopyAndAlloc(int32 nNewLength) { if (getRefCount() <= 1) { internalAlloc(nNewLength); } else { XCHAR * pStrOld = m_pString; int32 nOldLength = getLength(); release(); internalAlloc(nNewLength); xMemoryCopy(m_pString, pStrOld, sizeof(XCHAR)*nOldLength); } return nNewLength; }
void * mylloc(size_t requestedSize) { if (!_initialized || requestedSize > _totalFreeSize) return NULL; if (requestedSize > _maxFreeSize) defragmentDescriptorList(&_freeList, &_minFreeSize, &_maxFreeSize, &_freeCount); if (requestedSize > _maxFreeSize) return NULL; //printf("About to enter internalAlloc\n"); MyDescriptor * ret = internalAlloc(requestedSize, &_freeList, &_usedList, &_usedCount, &_freeCount); //printf("Allocated chunk: blocks=%d, ptr=%d\n", ret->blockCount, ret->memory); _totalFreeSize -= requestedSize; return ret->memory; }