void CStateTemplate::resize() { unsigned C_INT32 OldSize = mSize; if (mSize) mSize *= 2; else mSize = 16; // Resize the entities array. CModelEntity ** pTmp = mpEntities; mpEntities = new CModelEntity * [mSize]; memcpy(mpEntities, pTmp, sizeof(CModelEntity *) * OldSize); pdeletev(pTmp); // Resize the states C_FLOAT64 * pInitialValues = mpInitialValues = mInitialState.resize(mSize); C_FLOAT64 * pCurrentValues = mpCurrentValues = mCurrentState.resize(mSize); // Update all pointers in the entities pTmp = mpEntities; CModelEntity ** pEnd = pTmp + mInsert; for (; pTmp != pEnd; ++pTmp, ++pInitialValues, ++pCurrentValues) if (*pTmp != NULL) { (*pTmp)->setInitialValuePtr(pInitialValues); (*pTmp)->setValuePtr(pCurrentValues); } }
CState & CState::operator=(const CState & rhs) { if (this != &rhs) { if (mSize != rhs.mSize) { pdeletev(mpValues); mpValues = new C_FLOAT64[rhs.mSize]; mSize = rhs.mSize; } memcpy(mpValues, rhs.mpValues, sizeof(C_FLOAT64) * mSize); mpBeginIndependent = mpValues + (rhs.mpBeginIndependent - rhs.mpValues); mpBeginDependent = mpValues + (rhs.mpBeginDependent - rhs.mpValues); mpBeginFixed = mpValues + (rhs.mpBeginFixed - rhs.mpValues); mpEnd = mpValues + (rhs.mpEnd - rhs.mpValues); mUpdateDependentRequired = rhs.mUpdateDependentRequired; } return *this; }
C_FLOAT64 * CState::resize(const unsigned C_INT32 & size) { if (mSize != size) { C_FLOAT64 * pTmp = mpValues; if (size > 0) { mpValues = new C_FLOAT64[size]; memcpy(mpValues, pTmp, sizeof(C_FLOAT64) * std::min(mSize, size)); } else mpValues = NULL; pdeletev(pTmp); mSize = size; } updateIterator(getNumIndependent(), getNumDependent(), getNumFixed()); return mpValues; }
CCompressedColumnFormat::~CCompressedColumnFormat() { pdelete(mpValue); pdelete(mpRowIndex); pdeletev(mpColumnStart); }
CStateTemplate::~CStateTemplate() { pdeletev(mpEntities); }
CState::~CState() {pdeletev(mpValues);}