void DataContainer::Allocate() { // Check that memory has not been allocated if (m_pAllocatedMemory != NULL) { _EXCEPTIONT("Attempting Allocate() on attached DataContainer"); } // Allocate memory as one contiguous chunk size_t sTotalByteSize = GetTotalByteSize(); m_pAllocatedMemory = reinterpret_cast<unsigned char*>(malloc(sTotalByteSize)); if (m_pAllocatedMemory == NULL) { _EXCEPTIONT("Out of memory"); } // Initialize allocated memory to zero memset(m_pAllocatedMemory, 0, sTotalByteSize); // Assign memory to DataChunks unsigned char * pAccumulated = m_pAllocatedMemory; for (size_t i = 0; i < m_vecDataChunks.size(); i++) { DataChunk * pDataChunk = reinterpret_cast<DataChunk*>(m_vecDataChunks[i]); pDataChunk->AttachToData( reinterpret_cast<void *>(pAccumulated)); #pragma message "Alignment may be an issue here on 32-bit systems" pAccumulated += pDataChunk->GetByteSize(); } }
bool FitsIntoProtobuf() { return GetTotalByteSize() < static_cast<size_t>(INT_MAX); }