CTString &CTString::operator+=(const CTString &strSecond) { ASSERT(IsValid() && strSecond.IsValid()); GrowMemory( (void **)&str_String, strlen( str_String) + strlen( strSecond) + 1 ); strcat(str_String, strSecond.str_String); return *this; }
// expand buffer to be given number of bytes in size void CBuffer::Expand(SLONG slNewSize) { ASSERT(slNewSize>0); ASSERT(bu_slSize>=0); // if not already allocated if (bu_slSize==0) { // allocate a new empty buffer ASSERT(bu_pubBuffer==NULL); bu_pubBuffer = (UBYTE*)AllocMemory(slNewSize); bu_slWriteOffset = 0; bu_slReadOffset = 0; bu_slFree = slNewSize; bu_slSize = slNewSize; // if already allocated } else { ASSERT(slNewSize>bu_slSize); SLONG slSizeDiff = slNewSize-bu_slSize; ASSERT(bu_pubBuffer!=NULL); // grow buffer GrowMemory((void**)&bu_pubBuffer, slNewSize); // if buffer is currently wrapping if (bu_slReadOffset>bu_slWriteOffset||bu_slFree==0) { // move part at the end of buffer to the end memmove(bu_pubBuffer+bu_slReadOffset+slSizeDiff, bu_pubBuffer+bu_slReadOffset, bu_slSize-bu_slReadOffset); bu_slReadOffset+=slSizeDiff; } bu_slFree += slNewSize-bu_slSize; bu_slSize = slNewSize; ASSERT(bu_slReadOffset>=0 && bu_slReadOffset<bu_slSize); ASSERT(bu_slFree>=0 && bu_slFree<=bu_slSize); } }
ON_3dVector* ON_Workspace::GrowVectorMemory( ON_3dVector* p, size_t size ) { ON_3dVector* v3d = (ON_3dVector*)(GrowMemory(p,size*sizeof(*v3d))); return v3d; }
ON_3dPoint* ON_Workspace::GrowPointMemory( ON_3dPoint* p, size_t size ) { ON_3dPoint* p3d = (ON_3dPoint*)(GrowMemory(p,size*sizeof(*p3d))); return p3d; }
double* ON_Workspace::GrowDoubleMemory( double* p, size_t size ) { double* pd = (double*)(GrowMemory(p,size*sizeof(*pd))); return pd; }
int* ON_Workspace::GrowIntMemory( int* p, size_t size ) { int* pi = (int*)(GrowMemory(p,size*sizeof(*pi))); return pi; }