43 if ((err = FileWrite(m_hFile, count, buffPtr)) != NoError) ReturnWithError(err);
53 if ((err = FileRead(m_hFile, count, buffPtr)) != NoError) ReturnWithError(err);
60 if ((err = SetFPos(m_hFile, posMode, posOff)) != NoError) ReturnWithError(err);
68 if ((err = GetFPos(
m_hFile, &pos)) != NoError) ReturnWithError2(err, pos);
81 m_buffer = m_pos = m_eos =
new(std::nothrow) UINT8[m_size];
82 if (!m_buffer) ReturnWithError(InsufficientMemory);
92 , m_eos(pBuffer + size)
94 , m_allocated(
false) {
104 m_buffer = m_pos = pBuffer;
106 m_eos = m_buffer + size;
115 const size_t deltaSize = 0x4000 + *count;
117 if (m_pos + *count <= m_buffer + m_size) {
118 memcpy(m_pos, buffPtr, *count);
120 if (m_pos > m_eos) m_eos = m_pos;
121 }
else if (m_allocated) {
123 size_t offset = m_pos - m_buffer;
124 UINT8 *buf_tmp = (UINT8 *)realloc(m_buffer, m_size + deltaSize);
128 ReturnWithError(InsufficientMemory);
135 m_pos = m_buffer + offset;
138 memcpy(m_pos, buffPtr, *count);
140 if (m_pos > m_eos) m_eos = m_pos;
142 ReturnWithError(InsufficientMemory);
144 ASSERT(m_pos <= m_eos);
156 memcpy(buffPtr,
m_pos, *count);
161 memcpy(buffPtr,
m_pos, *count);
172 m_pos = m_buffer + posOff;
178 m_pos = m_eos + posOff;
184 ReturnWithError(InvalidStreamPos);
191 void CPGFMemFileStream::Write(
int *count,
void *buffPtr) THROW_ {
196 m_memFile->Write(buffPtr, *count);
200 void CPGFMemFileStream::Read(
int *count,
void *buffPtr) THROW_ {
204 m_memFile->Read(buffPtr, *count);
208 void CPGFMemFileStream::SetPos(
short posMode, INT64 posOff) THROW_ {
210 m_memFile->Seek(posOff, posMode);
214 UINT64 CPGFMemFileStream::GetPos() const THROW_ {
215 return (UINT64)m_memFile->GetPosition();
221 #if defined(WIN32) || defined(WINCE)
222 void CPGFIStream::Write(
int *count,
void *buffPtr) THROW_ {
228 HRESULT hr = m_stream->Write(buffPtr, *count, (ULONG *)count);
235 void CPGFIStream::Read(
int *count,
void *buffPtr) THROW_ {
240 HRESULT hr = m_stream->Read(buffPtr, *count, (ULONG *)count);
247 void CPGFIStream::SetPos(
short posMode, INT64 posOff) THROW_ {
251 li.QuadPart = posOff;
253 HRESULT hr = m_stream->Seek(li, posMode, NULL);
260 UINT64 CPGFIStream::GetPos() const THROW_ {
267 HRESULT hr = m_stream->Seek(n, FSFromCurrent, &pos);
271 ReturnWithError2(hr, pos.QuadPart);
274 #endif // WIN32 || WINCE