void dng_memory_stream::DoWrite (const void *data, uint32 count, uint64 offset) { DoSetLength (Max_uint64 (fMemoryStreamLength, offset + count)); uint64 baseOffset = offset; while (count) { uint32 pageIndex = (uint32) (offset / fPageSize); uint32 pageOffset = (uint32) (offset % fPageSize); uint32 blockCount = Min_uint32 (fPageSize - pageOffset, count); const uint8 *sPtr = ((const uint8 *) data) + (uint32) (offset - baseOffset); uint8 *dPtr = fPageList [pageIndex]->Buffer_uint8 () + pageOffset; DoCopyBytes (sPtr, dPtr, blockCount); offset += blockCount; count -= blockCount; } }
void dng_stream::SetLength (uint64 length) { Flush (); if (Length () != length) { DoSetLength (length); fLength = length; } }
void WordVector::SetMaxLength(long n) { long OldLength = length(); DoSetLength(n); if (rep) rep[-1] = OldLength; }