OLD | NEW |
---|---|
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fgas/crt/fgas_stream.h" | 7 #include "xfa/fgas/crt/fgas_stream.h" |
8 | 8 |
9 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ | 9 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ |
10 _FX_OS_ == _FX_WIN64_ | 10 _FX_OS_ == _FX_WIN64_ |
11 #include <io.h> | 11 #include <io.h> |
12 #endif | 12 #endif |
13 | 13 |
14 #include <algorithm> | 14 #include <algorithm> |
15 #include <memory> | 15 #include <memory> |
16 | 16 |
17 #include "xfa/fgas/crt/fgas_codepage.h" | 17 #include "xfa/fgas/crt/fgas_codepage.h" |
18 | 18 |
19 namespace { | 19 namespace { |
20 | 20 |
21 class IFX_StreamImp { | 21 class IFX_StreamImp { |
npm
2016/12/02 16:23:22
You probably want to rename all the classes in thi
Tom Sepez
2016/12/02 18:02:08
Good suggestion.
| |
22 public: | 22 public: |
23 virtual ~IFX_StreamImp() {} | 23 virtual ~IFX_StreamImp() {} |
24 | 24 |
25 virtual int32_t GetLength() const = 0; | 25 virtual int32_t GetLength() const = 0; |
26 virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) = 0; | 26 virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) = 0; |
27 virtual int32_t GetPosition() = 0; | 27 virtual int32_t GetPosition() = 0; |
28 virtual bool IsEOF() const = 0; | 28 virtual bool IsEOF() const = 0; |
29 virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) = 0; | 29 virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) = 0; |
30 virtual int32_t ReadString(FX_WCHAR* pStr, | 30 virtual int32_t ReadString(FX_WCHAR* pStr, |
31 int32_t iMaxLength, | 31 int32_t iMaxLength, |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
184 }; | 184 }; |
185 | 185 |
186 enum FX_STREAMTYPE { | 186 enum FX_STREAMTYPE { |
187 FX_SREAMTYPE_Unknown = 0, | 187 FX_SREAMTYPE_Unknown = 0, |
188 FX_STREAMTYPE_File, | 188 FX_STREAMTYPE_File, |
189 FX_STREAMTYPE_Buffer, | 189 FX_STREAMTYPE_Buffer, |
190 FX_STREAMTYPE_Stream, | 190 FX_STREAMTYPE_Stream, |
191 FX_STREAMTYPE_BufferRead, | 191 FX_STREAMTYPE_BufferRead, |
192 }; | 192 }; |
193 | 193 |
194 class CFX_Stream : public IFX_Stream { | 194 class CFGAS_Stream : public IFGAS_Stream { |
195 public: | 195 public: |
196 CFX_Stream(); | 196 CFGAS_Stream(); |
197 ~CFX_Stream() override; | 197 ~CFGAS_Stream() override; |
198 | 198 |
199 bool LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess); | 199 bool LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess); |
200 bool LoadBuffer(uint8_t* pData, int32_t iTotalSize, uint32_t dwAccess); | 200 bool LoadBuffer(uint8_t* pData, int32_t iTotalSize, uint32_t dwAccess); |
201 bool LoadFileRead(IFX_SeekableReadStream* pFileRead, uint32_t dwAccess); | 201 bool LoadFileRead(IFX_SeekableReadStream* pFileRead, uint32_t dwAccess); |
202 bool LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, uint32_t dwAccess); | 202 bool LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, uint32_t dwAccess); |
203 bool LoadBufferRead(IFX_BufferedReadStream* pBufferRead, | 203 bool LoadBufferRead(IFX_BufferedReadStream* pBufferRead, |
204 int32_t iFileSize, | 204 int32_t iFileSize, |
205 uint32_t dwAccess, | 205 uint32_t dwAccess, |
206 bool bReleaseBufferRead); | 206 bool bReleaseBufferRead); |
207 | 207 |
208 // IFX_Stream | 208 // IFGAS_Stream |
209 void Release() override; | 209 void Release() override; |
210 IFX_Stream* Retain() override; | 210 IFGAS_Stream* Retain() override; |
211 uint32_t GetAccessModes() const override; | 211 uint32_t GetAccessModes() const override; |
212 int32_t GetLength() const override; | 212 int32_t GetLength() const override; |
213 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; | 213 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; |
214 int32_t GetPosition() override; | 214 int32_t GetPosition() override; |
215 bool IsEOF() const override; | 215 bool IsEOF() const override; |
216 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override; | 216 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override; |
217 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override; | 217 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override; |
218 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override; | 218 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override; |
219 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override; | 219 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override; |
220 void Flush() override; | 220 void Flush() override; |
221 bool SetLength(int32_t iLength) override; | 221 bool SetLength(int32_t iLength) override; |
222 int32_t GetBOM(uint8_t bom[4]) const override; | 222 int32_t GetBOM(uint8_t bom[4]) const override; |
223 uint16_t GetCodePage() const override; | 223 uint16_t GetCodePage() const override; |
224 uint16_t SetCodePage(uint16_t wCodePage) override; | 224 uint16_t SetCodePage(uint16_t wCodePage) override; |
225 IFX_Stream* CreateSharedStream(uint32_t dwAccess, | 225 IFGAS_Stream* CreateSharedStream(uint32_t dwAccess, |
226 int32_t iOffset, | 226 int32_t iOffset, |
227 int32_t iLength) override; | 227 int32_t iLength) override; |
228 | 228 |
229 protected: | 229 protected: |
230 FX_STREAMTYPE m_eStreamType; | 230 FX_STREAMTYPE m_eStreamType; |
231 IFX_StreamImp* m_pStreamImp; | 231 IFX_StreamImp* m_pStreamImp; |
232 uint32_t m_dwAccess; | 232 uint32_t m_dwAccess; |
233 int32_t m_iTotalSize; | 233 int32_t m_iTotalSize; |
234 int32_t m_iPosition; | 234 int32_t m_iPosition; |
235 int32_t m_iStart; | 235 int32_t m_iStart; |
236 int32_t m_iLength; | 236 int32_t m_iLength; |
237 int32_t m_iRefCount; | 237 int32_t m_iRefCount; |
238 }; | 238 }; |
239 | 239 |
240 class CFX_TextStream : public IFX_Stream { | 240 class CFGAS_TextStream : public IFGAS_Stream { |
241 public: | 241 public: |
242 CFX_TextStream(IFX_Stream* pStream, bool bDelStream); | 242 CFGAS_TextStream(IFGAS_Stream* pStream, bool bDelStream); |
243 ~CFX_TextStream() override; | 243 ~CFGAS_TextStream() override; |
244 | 244 |
245 // IFX_Stream | 245 // IFGAS_Stream |
246 void Release() override; | 246 void Release() override; |
247 IFX_Stream* Retain() override; | 247 IFGAS_Stream* Retain() override; |
248 uint32_t GetAccessModes() const override; | 248 uint32_t GetAccessModes() const override; |
249 int32_t GetLength() const override; | 249 int32_t GetLength() const override; |
250 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; | 250 int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override; |
251 int32_t GetPosition() override; | 251 int32_t GetPosition() override; |
252 bool IsEOF() const override; | 252 bool IsEOF() const override; |
253 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override; | 253 int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override; |
254 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override; | 254 int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) override; |
255 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override; | 255 int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override; |
256 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override; | 256 int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override; |
257 void Flush() override; | 257 void Flush() override; |
258 bool SetLength(int32_t iLength) override; | 258 bool SetLength(int32_t iLength) override; |
259 int32_t GetBOM(uint8_t bom[4]) const override; | 259 int32_t GetBOM(uint8_t bom[4]) const override; |
260 uint16_t GetCodePage() const override; | 260 uint16_t GetCodePage() const override; |
261 uint16_t SetCodePage(uint16_t wCodePage) override; | 261 uint16_t SetCodePage(uint16_t wCodePage) override; |
262 IFX_Stream* CreateSharedStream(uint32_t dwAccess, | 262 IFGAS_Stream* CreateSharedStream(uint32_t dwAccess, |
263 int32_t iOffset, | 263 int32_t iOffset, |
264 int32_t iLength) override; | 264 int32_t iLength) override; |
265 | 265 |
266 protected: | 266 protected: |
267 uint16_t m_wCodePage; | 267 uint16_t m_wCodePage; |
268 int32_t m_wBOMLength; | 268 int32_t m_wBOMLength; |
269 uint32_t m_dwBOM; | 269 uint32_t m_dwBOM; |
270 uint8_t* m_pBuf; | 270 uint8_t* m_pBuf; |
271 int32_t m_iBufSize; | 271 int32_t m_iBufSize; |
272 bool m_bDelStream; | 272 bool m_bDelStream; |
273 IFX_Stream* m_pStreamImp; | 273 IFGAS_Stream* m_pStreamImp; |
274 int32_t m_iRefCount; | 274 int32_t m_iRefCount; |
275 void InitStream(); | 275 void InitStream(); |
276 }; | 276 }; |
277 | 277 |
278 class CFGAS_FileRead : public IFX_SeekableReadStream { | 278 class CFGAS_FileRead : public IFX_SeekableReadStream { |
279 public: | 279 public: |
280 CFGAS_FileRead(IFX_Stream* pStream, bool bReleaseStream); | 280 CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream); |
281 ~CFGAS_FileRead() override; | 281 ~CFGAS_FileRead() override; |
282 | 282 |
283 // IFX_SeekableReadStream | 283 // IFX_SeekableReadStream |
284 void Release() override; | 284 void Release() override; |
285 FX_FILESIZE GetSize() override; | 285 FX_FILESIZE GetSize() override; |
286 bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; | 286 bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; |
287 | 287 |
288 protected: | 288 protected: |
289 bool m_bReleaseStream; | 289 bool m_bReleaseStream; |
290 IFX_Stream* m_pStream; | 290 IFGAS_Stream* m_pStream; |
291 }; | 291 }; |
292 | 292 |
293 int32_t FileLength(FXSYS_FILE* file) { | 293 int32_t FileLength(FXSYS_FILE* file) { |
294 ASSERT(file); | 294 ASSERT(file); |
295 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ | 295 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ |
296 return _filelength(_fileno(file)); | 296 return _filelength(_fileno(file)); |
297 #else | 297 #else |
298 int32_t iPos = FXSYS_ftell(file); | 298 int32_t iPos = FXSYS_ftell(file); |
299 FXSYS_fseek(file, 0, FXSYS_SEEK_END); | 299 FXSYS_fseek(file, 0, FXSYS_SEEK_END); |
300 int32_t iLen = FXSYS_ftell(file); | 300 int32_t iLen = FXSYS_ftell(file); |
(...skipping 14 matching lines...) Expand all Loading... | |
315 ::SetFilePointer(hFile, (int32_t)dwPos, 0, FILE_BEGIN); | 315 ::SetFilePointer(hFile, (int32_t)dwPos, 0, FILE_BEGIN); |
316 return bRet; | 316 return bRet; |
317 #else | 317 #else |
318 return false; | 318 return false; |
319 #endif | 319 #endif |
320 } | 320 } |
321 | 321 |
322 } // namespace | 322 } // namespace |
323 | 323 |
324 // static | 324 // static |
325 IFX_Stream* IFX_Stream::CreateStream(IFX_SeekableReadStream* pFileRead, | 325 IFGAS_Stream* IFGAS_Stream::CreateStream(IFX_SeekableReadStream* pFileRead, |
326 uint32_t dwAccess) { | 326 uint32_t dwAccess) { |
327 CFX_Stream* pSR = new CFX_Stream; | 327 CFGAS_Stream* pSR = new CFGAS_Stream; |
328 if (!pSR->LoadFileRead(pFileRead, dwAccess)) { | 328 if (!pSR->LoadFileRead(pFileRead, dwAccess)) { |
329 pSR->Release(); | 329 pSR->Release(); |
330 return nullptr; | 330 return nullptr; |
331 } | 331 } |
332 if (dwAccess & FX_STREAMACCESS_Text) { | 332 if (dwAccess & FX_STREAMACCESS_Text) { |
npm
2016/12/02 16:23:22
Nit: {}
Tom Sepez
2016/12/02 18:02:08
Done.
| |
333 return new CFX_TextStream(pSR, true); | 333 return new CFGAS_TextStream(pSR, true); |
334 } | 334 } |
335 return pSR; | 335 return pSR; |
336 } | 336 } |
337 | 337 |
338 // static | 338 // static |
339 IFX_Stream* IFX_Stream::CreateStream(IFX_SeekableWriteStream* pFileWrite, | 339 IFGAS_Stream* IFGAS_Stream::CreateStream(IFX_SeekableWriteStream* pFileWrite, |
340 uint32_t dwAccess) { | 340 uint32_t dwAccess) { |
341 CFX_Stream* pSR = new CFX_Stream; | 341 CFGAS_Stream* pSR = new CFGAS_Stream; |
342 if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) { | 342 if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) { |
343 pSR->Release(); | 343 pSR->Release(); |
344 return nullptr; | 344 return nullptr; |
345 } | 345 } |
346 if (dwAccess & FX_STREAMACCESS_Text) { | 346 if (dwAccess & FX_STREAMACCESS_Text) { |
npm
2016/12/02 16:23:22
Nitto
Tom Sepez
2016/12/02 18:02:07
Done.
| |
347 return new CFX_TextStream(pSR, true); | 347 return new CFGAS_TextStream(pSR, true); |
348 } | 348 } |
349 return pSR; | 349 return pSR; |
350 } | 350 } |
351 | 351 |
352 // static | 352 // static |
353 IFX_Stream* IFX_Stream::CreateStream(uint8_t* pData, | 353 IFGAS_Stream* IFGAS_Stream::CreateStream(uint8_t* pData, |
354 int32_t length, | 354 int32_t length, |
355 uint32_t dwAccess) { | 355 uint32_t dwAccess) { |
356 CFX_Stream* pSR = new CFX_Stream; | 356 CFGAS_Stream* pSR = new CFGAS_Stream; |
357 if (!pSR->LoadBuffer(pData, length, dwAccess)) { | 357 if (!pSR->LoadBuffer(pData, length, dwAccess)) { |
358 pSR->Release(); | 358 pSR->Release(); |
359 return nullptr; | 359 return nullptr; |
360 } | 360 } |
361 if (dwAccess & FX_STREAMACCESS_Text) { | 361 if (dwAccess & FX_STREAMACCESS_Text) { |
npm
2016/12/02 16:23:22
Nitto
Tom Sepez
2016/12/02 18:02:08
Done.
| |
362 return new CFX_TextStream(pSR, true); | 362 return new CFGAS_TextStream(pSR, true); |
363 } | 363 } |
364 return pSR; | 364 return pSR; |
365 } | 365 } |
366 | 366 |
367 IFX_StreamImp::IFX_StreamImp() : m_dwAccess(0) {} | 367 IFX_StreamImp::IFX_StreamImp() : m_dwAccess(0) {} |
368 | 368 |
369 CFX_FileStreamImp::CFX_FileStreamImp() : m_hFile(nullptr), m_iLength(0) {} | 369 CFX_FileStreamImp::CFX_FileStreamImp() : m_hFile(nullptr), m_iLength(0) {} |
370 | 370 |
371 CFX_FileStreamImp::~CFX_FileStreamImp() { | 371 CFX_FileStreamImp::~CFX_FileStreamImp() { |
372 if (m_hFile) | 372 if (m_hFile) |
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
889 } | 889 } |
890 FXSYS_memcpy(m_pData + m_iPosition, pStr, iLen * 2); | 890 FXSYS_memcpy(m_pData + m_iPosition, pStr, iLen * 2); |
891 m_iPosition += iLen * 2; | 891 m_iPosition += iLen * 2; |
892 if (m_iPosition > m_iLength) { | 892 if (m_iPosition > m_iLength) { |
893 m_iLength = m_iPosition; | 893 m_iLength = m_iPosition; |
894 } | 894 } |
895 return iLen; | 895 return iLen; |
896 } | 896 } |
897 | 897 |
898 // static | 898 // static |
899 IFX_Stream* IFX_Stream::CreateTextStream(IFX_Stream* pBaseStream, | 899 IFGAS_Stream* IFGAS_Stream::CreateTextStream(IFGAS_Stream* pBaseStream, |
900 bool bDeleteOnRelease) { | 900 bool bDeleteOnRelease) { |
901 ASSERT(pBaseStream); | 901 ASSERT(pBaseStream); |
902 return new CFX_TextStream(pBaseStream, bDeleteOnRelease); | 902 return new CFGAS_TextStream(pBaseStream, bDeleteOnRelease); |
903 } | 903 } |
904 | 904 |
905 CFX_TextStream::CFX_TextStream(IFX_Stream* pStream, bool bDelStream) | 905 CFGAS_TextStream::CFGAS_TextStream(IFGAS_Stream* pStream, bool bDelStream) |
906 : m_wCodePage(FX_CODEPAGE_DefANSI), | 906 : m_wCodePage(FX_CODEPAGE_DefANSI), |
907 m_wBOMLength(0), | 907 m_wBOMLength(0), |
908 m_dwBOM(0), | 908 m_dwBOM(0), |
909 m_pBuf(nullptr), | 909 m_pBuf(nullptr), |
910 m_iBufSize(0), | 910 m_iBufSize(0), |
911 m_bDelStream(bDelStream), | 911 m_bDelStream(bDelStream), |
912 m_pStreamImp(pStream), | 912 m_pStreamImp(pStream), |
913 m_iRefCount(1) { | 913 m_iRefCount(1) { |
914 ASSERT(m_pStreamImp); | 914 ASSERT(m_pStreamImp); |
915 m_pStreamImp->Retain(); | 915 m_pStreamImp->Retain(); |
916 InitStream(); | 916 InitStream(); |
917 } | 917 } |
npm
2016/12/02 16:23:22
Nits: space needed between methods
Tom Sepez
2016/12/02 18:02:08
Done.
| |
918 CFX_TextStream::~CFX_TextStream() { | 918 CFGAS_TextStream::~CFGAS_TextStream() { |
919 m_pStreamImp->Release(); | 919 m_pStreamImp->Release(); |
920 if (m_bDelStream) { | 920 if (m_bDelStream) { |
921 m_pStreamImp->Release(); | 921 m_pStreamImp->Release(); |
922 } | 922 } |
923 if (m_pBuf) { | 923 if (m_pBuf) { |
924 FX_Free(m_pBuf); | 924 FX_Free(m_pBuf); |
925 } | 925 } |
926 } | 926 } |
927 void CFX_TextStream::InitStream() { | 927 void CFGAS_TextStream::InitStream() { |
928 int32_t iPosition = m_pStreamImp->GetPosition(); | 928 int32_t iPosition = m_pStreamImp->GetPosition(); |
929 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, 0); | 929 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, 0); |
930 m_pStreamImp->ReadData((uint8_t*)&m_dwBOM, 3); | 930 m_pStreamImp->ReadData((uint8_t*)&m_dwBOM, 3); |
931 #if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ | 931 #if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ |
932 m_dwBOM &= 0x00FFFFFF; | 932 m_dwBOM &= 0x00FFFFFF; |
933 if (m_dwBOM == 0x00BFBBEF) { | 933 if (m_dwBOM == 0x00BFBBEF) { |
934 m_wBOMLength = 3; | 934 m_wBOMLength = 3; |
935 m_wCodePage = FX_CODEPAGE_UTF8; | 935 m_wCodePage = FX_CODEPAGE_UTF8; |
936 } else { | 936 } else { |
937 m_dwBOM &= 0x0000FFFF; | 937 m_dwBOM &= 0x0000FFFF; |
(...skipping 24 matching lines...) Expand all Loading... | |
962 m_wCodePage = FX_CODEPAGE_UTF16LE; | 962 m_wCodePage = FX_CODEPAGE_UTF16LE; |
963 } else { | 963 } else { |
964 m_wBOMLength = 0; | 964 m_wBOMLength = 0; |
965 m_dwBOM = 0; | 965 m_dwBOM = 0; |
966 m_wCodePage = FXSYS_GetACP(); | 966 m_wCodePage = FXSYS_GetACP(); |
967 } | 967 } |
968 } | 968 } |
969 #endif | 969 #endif |
970 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, std::max(m_wBOMLength, iPosition)); | 970 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, std::max(m_wBOMLength, iPosition)); |
971 } | 971 } |
972 void CFX_TextStream::Release() { | 972 void CFGAS_TextStream::Release() { |
973 if (--m_iRefCount < 1) { | 973 if (--m_iRefCount < 1) { |
974 delete this; | 974 delete this; |
975 } | 975 } |
976 } | 976 } |
977 IFX_Stream* CFX_TextStream::Retain() { | 977 IFGAS_Stream* CFGAS_TextStream::Retain() { |
978 m_iRefCount++; | 978 m_iRefCount++; |
979 return this; | 979 return this; |
980 } | 980 } |
981 uint32_t CFX_TextStream::GetAccessModes() const { | 981 uint32_t CFGAS_TextStream::GetAccessModes() const { |
982 return m_pStreamImp->GetAccessModes() | FX_STREAMACCESS_Text; | 982 return m_pStreamImp->GetAccessModes() | FX_STREAMACCESS_Text; |
983 } | 983 } |
984 int32_t CFX_TextStream::GetLength() const { | 984 int32_t CFGAS_TextStream::GetLength() const { |
985 return m_pStreamImp->GetLength(); | 985 return m_pStreamImp->GetLength(); |
986 } | 986 } |
987 int32_t CFX_TextStream::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { | 987 int32_t CFGAS_TextStream::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { |
988 return m_pStreamImp->Seek(eSeek, iOffset); | 988 return m_pStreamImp->Seek(eSeek, iOffset); |
989 } | 989 } |
990 int32_t CFX_TextStream::GetPosition() { | 990 int32_t CFGAS_TextStream::GetPosition() { |
991 return m_pStreamImp->GetPosition(); | 991 return m_pStreamImp->GetPosition(); |
992 } | 992 } |
993 bool CFX_TextStream::IsEOF() const { | 993 bool CFGAS_TextStream::IsEOF() const { |
994 return m_pStreamImp->IsEOF(); | 994 return m_pStreamImp->IsEOF(); |
995 } | 995 } |
996 int32_t CFX_TextStream::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { | 996 int32_t CFGAS_TextStream::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { |
997 return m_pStreamImp->ReadData(pBuffer, iBufferSize); | 997 return m_pStreamImp->ReadData(pBuffer, iBufferSize); |
998 } | 998 } |
999 int32_t CFX_TextStream::WriteData(const uint8_t* pBuffer, int32_t iBufferSize) { | 999 int32_t CFGAS_TextStream::WriteData(const uint8_t* pBuffer, |
1000 int32_t iBufferSize) { | |
1000 return m_pStreamImp->WriteData(pBuffer, iBufferSize); | 1001 return m_pStreamImp->WriteData(pBuffer, iBufferSize); |
1001 } | 1002 } |
1002 void CFX_TextStream::Flush() { | 1003 void CFGAS_TextStream::Flush() { |
1003 m_pStreamImp->Flush(); | 1004 m_pStreamImp->Flush(); |
1004 } | 1005 } |
1005 bool CFX_TextStream::SetLength(int32_t iLength) { | 1006 bool CFGAS_TextStream::SetLength(int32_t iLength) { |
1006 return m_pStreamImp->SetLength(iLength); | 1007 return m_pStreamImp->SetLength(iLength); |
1007 } | 1008 } |
1008 uint16_t CFX_TextStream::GetCodePage() const { | 1009 uint16_t CFGAS_TextStream::GetCodePage() const { |
1009 return m_wCodePage; | 1010 return m_wCodePage; |
1010 } | 1011 } |
1011 IFX_Stream* CFX_TextStream::CreateSharedStream(uint32_t dwAccess, | 1012 IFGAS_Stream* CFGAS_TextStream::CreateSharedStream(uint32_t dwAccess, |
1012 int32_t iOffset, | 1013 int32_t iOffset, |
1013 int32_t iLength) { | 1014 int32_t iLength) { |
1014 IFX_Stream* pSR = | 1015 IFGAS_Stream* pSR = |
1015 m_pStreamImp->CreateSharedStream(dwAccess, iOffset, iLength); | 1016 m_pStreamImp->CreateSharedStream(dwAccess, iOffset, iLength); |
1016 if (!pSR) { | 1017 if (!pSR) { |
1017 return nullptr; | 1018 return nullptr; |
1018 } | 1019 } |
1019 if (dwAccess & FX_STREAMACCESS_Text) { | 1020 if (dwAccess & FX_STREAMACCESS_Text) { |
npm
2016/12/02 16:23:22
{}
Tom Sepez
2016/12/02 18:02:08
Done.
| |
1020 return new CFX_TextStream(pSR, true); | 1021 return new CFGAS_TextStream(pSR, true); |
1021 } | 1022 } |
1022 return pSR; | 1023 return pSR; |
1023 } | 1024 } |
1024 int32_t CFX_TextStream::GetBOM(uint8_t bom[4]) const { | 1025 int32_t CFGAS_TextStream::GetBOM(uint8_t bom[4]) const { |
1025 if (m_wBOMLength < 1) { | 1026 if (m_wBOMLength < 1) { |
1026 return 0; | 1027 return 0; |
1027 } | 1028 } |
1028 *(uint32_t*)bom = m_dwBOM; | 1029 *(uint32_t*)bom = m_dwBOM; |
1029 return m_wBOMLength; | 1030 return m_wBOMLength; |
1030 } | 1031 } |
1031 uint16_t CFX_TextStream::SetCodePage(uint16_t wCodePage) { | 1032 uint16_t CFGAS_TextStream::SetCodePage(uint16_t wCodePage) { |
1032 if (m_wBOMLength > 0) { | 1033 if (m_wBOMLength > 0) { |
1033 return m_wCodePage; | 1034 return m_wCodePage; |
1034 } | 1035 } |
1035 uint16_t v = m_wCodePage; | 1036 uint16_t v = m_wCodePage; |
1036 m_wCodePage = wCodePage; | 1037 m_wCodePage = wCodePage; |
1037 return v; | 1038 return v; |
1038 } | 1039 } |
1039 int32_t CFX_TextStream::ReadString(FX_WCHAR* pStr, | 1040 int32_t CFGAS_TextStream::ReadString(FX_WCHAR* pStr, |
1040 int32_t iMaxLength, | 1041 int32_t iMaxLength, |
1041 bool& bEOS) { | 1042 bool& bEOS) { |
1042 ASSERT(pStr && iMaxLength > 0); | 1043 ASSERT(pStr && iMaxLength > 0); |
1043 if (!m_pStreamImp) { | 1044 if (!m_pStreamImp) { |
1044 return -1; | 1045 return -1; |
1045 } | 1046 } |
1046 int32_t iLen; | 1047 int32_t iLen; |
1047 if (m_wCodePage == FX_CODEPAGE_UTF16LE || | 1048 if (m_wCodePage == FX_CODEPAGE_UTF16LE || |
1048 m_wCodePage == FX_CODEPAGE_UTF16BE) { | 1049 m_wCodePage == FX_CODEPAGE_UTF16BE) { |
1049 int32_t iBytes = iMaxLength * 2; | 1050 int32_t iBytes = iMaxLength * 2; |
1050 iLen = m_pStreamImp->ReadData((uint8_t*)pStr, iBytes); | 1051 iLen = m_pStreamImp->ReadData((uint8_t*)pStr, iBytes); |
1051 iMaxLength = iLen / 2; | 1052 iMaxLength = iLen / 2; |
(...skipping 29 matching lines...) Expand all Loading... | |
1081 if (iDecode < 1) { | 1082 if (iDecode < 1) { |
1082 return -1; | 1083 return -1; |
1083 } | 1084 } |
1084 } else { | 1085 } else { |
1085 iMaxLength = 0; | 1086 iMaxLength = 0; |
1086 } | 1087 } |
1087 } | 1088 } |
1088 bEOS = m_pStreamImp->IsEOF(); | 1089 bEOS = m_pStreamImp->IsEOF(); |
1089 return iMaxLength; | 1090 return iMaxLength; |
1090 } | 1091 } |
1091 int32_t CFX_TextStream::WriteString(const FX_WCHAR* pStr, int32_t iLength) { | 1092 int32_t CFGAS_TextStream::WriteString(const FX_WCHAR* pStr, int32_t iLength) { |
1092 ASSERT(pStr && iLength > 0); | 1093 ASSERT(pStr && iLength > 0); |
1093 if ((m_pStreamImp->GetAccessModes() & FX_STREAMACCESS_Write) == 0) { | 1094 if ((m_pStreamImp->GetAccessModes() & FX_STREAMACCESS_Write) == 0) { |
1094 return -1; | 1095 return -1; |
1095 } | 1096 } |
1096 if (m_wCodePage == FX_CODEPAGE_UTF8) { | 1097 if (m_wCodePage == FX_CODEPAGE_UTF8) { |
1097 int32_t len = iLength; | 1098 int32_t len = iLength; |
1098 CFX_UTF8Encoder encoder; | 1099 CFX_UTF8Encoder encoder; |
1099 while (len-- > 0) { | 1100 while (len-- > 0) { |
1100 encoder.Input(*pStr++); | 1101 encoder.Input(*pStr++); |
1101 } | 1102 } |
1102 CFX_ByteStringC bsResult = encoder.GetResult(); | 1103 CFX_ByteStringC bsResult = encoder.GetResult(); |
1103 m_pStreamImp->WriteData((const uint8_t*)bsResult.c_str(), | 1104 m_pStreamImp->WriteData((const uint8_t*)bsResult.c_str(), |
1104 bsResult.GetLength()); | 1105 bsResult.GetLength()); |
1105 } | 1106 } |
1106 return iLength; | 1107 return iLength; |
1107 } | 1108 } |
1108 CFX_Stream::CFX_Stream() | 1109 CFGAS_Stream::CFGAS_Stream() |
1109 : m_eStreamType(FX_SREAMTYPE_Unknown), | 1110 : m_eStreamType(FX_SREAMTYPE_Unknown), |
1110 m_pStreamImp(nullptr), | 1111 m_pStreamImp(nullptr), |
1111 m_dwAccess(0), | 1112 m_dwAccess(0), |
1112 m_iTotalSize(0), | 1113 m_iTotalSize(0), |
1113 m_iPosition(0), | 1114 m_iPosition(0), |
1114 m_iStart(0), | 1115 m_iStart(0), |
1115 m_iLength(0), | 1116 m_iLength(0), |
1116 m_iRefCount(1) {} | 1117 m_iRefCount(1) {} |
1117 | 1118 |
1118 CFX_Stream::~CFX_Stream() { | 1119 CFGAS_Stream::~CFGAS_Stream() { |
1119 if (m_eStreamType != FX_STREAMTYPE_Stream) | 1120 if (m_eStreamType != FX_STREAMTYPE_Stream) |
1120 delete m_pStreamImp; | 1121 delete m_pStreamImp; |
1121 } | 1122 } |
1122 | 1123 |
1123 bool CFX_Stream::LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess) { | 1124 bool CFGAS_Stream::LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess) { |
1124 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) | 1125 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) |
1125 return false; | 1126 return false; |
1126 | 1127 |
1127 if (!pszSrcFileName || FXSYS_wcslen(pszSrcFileName) < 1) | 1128 if (!pszSrcFileName || FXSYS_wcslen(pszSrcFileName) < 1) |
1128 return false; | 1129 return false; |
1129 | 1130 |
1130 std::unique_ptr<CFX_FileStreamImp> pImp(new CFX_FileStreamImp()); | 1131 std::unique_ptr<CFX_FileStreamImp> pImp(new CFX_FileStreamImp()); |
1131 if (!pImp->LoadFile(pszSrcFileName, dwAccess)) | 1132 if (!pImp->LoadFile(pszSrcFileName, dwAccess)) |
1132 return false; | 1133 return false; |
1133 | 1134 |
1134 m_pStreamImp = pImp.release(); | 1135 m_pStreamImp = pImp.release(); |
1135 m_eStreamType = FX_STREAMTYPE_File; | 1136 m_eStreamType = FX_STREAMTYPE_File; |
1136 m_dwAccess = dwAccess; | 1137 m_dwAccess = dwAccess; |
1137 m_iLength = m_pStreamImp->GetLength(); | 1138 m_iLength = m_pStreamImp->GetLength(); |
1138 return true; | 1139 return true; |
1139 } | 1140 } |
1140 | 1141 |
1141 bool CFX_Stream::LoadFileRead(IFX_SeekableReadStream* pFileRead, | 1142 bool CFGAS_Stream::LoadFileRead(IFX_SeekableReadStream* pFileRead, |
1142 uint32_t dwAccess) { | 1143 uint32_t dwAccess) { |
1143 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) | 1144 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) |
1144 return false; | 1145 return false; |
1145 | 1146 |
1146 if (!pFileRead) | 1147 if (!pFileRead) |
1147 return false; | 1148 return false; |
1148 | 1149 |
1149 std::unique_ptr<CFX_FileReadStreamImp> pImp(new CFX_FileReadStreamImp()); | 1150 std::unique_ptr<CFX_FileReadStreamImp> pImp(new CFX_FileReadStreamImp()); |
1150 if (!pImp->LoadFileRead(pFileRead, dwAccess)) | 1151 if (!pImp->LoadFileRead(pFileRead, dwAccess)) |
1151 return false; | 1152 return false; |
1152 | 1153 |
1153 m_pStreamImp = pImp.release(); | 1154 m_pStreamImp = pImp.release(); |
1154 m_eStreamType = FX_STREAMTYPE_File; | 1155 m_eStreamType = FX_STREAMTYPE_File; |
1155 m_dwAccess = dwAccess; | 1156 m_dwAccess = dwAccess; |
1156 m_iLength = m_pStreamImp->GetLength(); | 1157 m_iLength = m_pStreamImp->GetLength(); |
1157 return true; | 1158 return true; |
1158 } | 1159 } |
1159 | 1160 |
1160 bool CFX_Stream::LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, | 1161 bool CFGAS_Stream::LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, |
1161 uint32_t dwAccess) { | 1162 uint32_t dwAccess) { |
1162 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) | 1163 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) |
1163 return false; | 1164 return false; |
1164 | 1165 |
1165 if (!pFileWrite) | 1166 if (!pFileWrite) |
1166 return false; | 1167 return false; |
1167 | 1168 |
1168 std::unique_ptr<CFX_FileWriteStreamImp> pImp(new CFX_FileWriteStreamImp()); | 1169 std::unique_ptr<CFX_FileWriteStreamImp> pImp(new CFX_FileWriteStreamImp()); |
1169 if (!pImp->LoadFileWrite(pFileWrite, dwAccess)) | 1170 if (!pImp->LoadFileWrite(pFileWrite, dwAccess)) |
1170 return false; | 1171 return false; |
1171 | 1172 |
1172 m_pStreamImp = pImp.release(); | 1173 m_pStreamImp = pImp.release(); |
1173 m_eStreamType = FX_STREAMTYPE_File; | 1174 m_eStreamType = FX_STREAMTYPE_File; |
1174 m_dwAccess = dwAccess; | 1175 m_dwAccess = dwAccess; |
1175 m_iLength = m_pStreamImp->GetLength(); | 1176 m_iLength = m_pStreamImp->GetLength(); |
1176 return true; | 1177 return true; |
1177 } | 1178 } |
1178 | 1179 |
1179 bool CFX_Stream::LoadBuffer(uint8_t* pData, | 1180 bool CFGAS_Stream::LoadBuffer(uint8_t* pData, |
1180 int32_t iTotalSize, | 1181 int32_t iTotalSize, |
1181 uint32_t dwAccess) { | 1182 uint32_t dwAccess) { |
1182 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) | 1183 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) |
1183 return false; | 1184 return false; |
1184 | 1185 |
1185 if (!pData || iTotalSize < 1) | 1186 if (!pData || iTotalSize < 1) |
1186 return false; | 1187 return false; |
1187 | 1188 |
1188 std::unique_ptr<CFX_BufferStreamImp> pImp(new CFX_BufferStreamImp()); | 1189 std::unique_ptr<CFX_BufferStreamImp> pImp(new CFX_BufferStreamImp()); |
1189 if (!pImp->LoadBuffer(pData, iTotalSize, dwAccess)) | 1190 if (!pImp->LoadBuffer(pData, iTotalSize, dwAccess)) |
1190 return false; | 1191 return false; |
1191 | 1192 |
1192 m_pStreamImp = pImp.release(); | 1193 m_pStreamImp = pImp.release(); |
1193 m_eStreamType = FX_STREAMTYPE_Buffer; | 1194 m_eStreamType = FX_STREAMTYPE_Buffer; |
1194 m_dwAccess = dwAccess; | 1195 m_dwAccess = dwAccess; |
1195 m_iLength = m_pStreamImp->GetLength(); | 1196 m_iLength = m_pStreamImp->GetLength(); |
1196 return true; | 1197 return true; |
1197 } | 1198 } |
1198 | 1199 |
1199 bool CFX_Stream::LoadBufferRead(IFX_BufferedReadStream* pBufferRead, | 1200 bool CFGAS_Stream::LoadBufferRead(IFX_BufferedReadStream* pBufferRead, |
1200 int32_t iFileSize, | 1201 int32_t iFileSize, |
1201 uint32_t dwAccess, | 1202 uint32_t dwAccess, |
1202 bool bReleaseBufferRead) { | 1203 bool bReleaseBufferRead) { |
1203 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) | 1204 if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp) |
1204 return false; | 1205 return false; |
1205 | 1206 |
1206 if (!pBufferRead) | 1207 if (!pBufferRead) |
1207 return false; | 1208 return false; |
1208 | 1209 |
1209 std::unique_ptr<CFX_BufferReadStreamImp> pImp(new CFX_BufferReadStreamImp); | 1210 std::unique_ptr<CFX_BufferReadStreamImp> pImp(new CFX_BufferReadStreamImp); |
1210 if (!pImp->LoadBufferRead(pBufferRead, iFileSize, dwAccess, | 1211 if (!pImp->LoadBufferRead(pBufferRead, iFileSize, dwAccess, |
1211 bReleaseBufferRead)) | 1212 bReleaseBufferRead)) |
1212 return false; | 1213 return false; |
1213 | 1214 |
1214 m_pStreamImp = pImp.release(); | 1215 m_pStreamImp = pImp.release(); |
1215 m_eStreamType = FX_STREAMTYPE_BufferRead; | 1216 m_eStreamType = FX_STREAMTYPE_BufferRead; |
1216 m_dwAccess = dwAccess; | 1217 m_dwAccess = dwAccess; |
1217 m_iLength = m_pStreamImp->GetLength(); | 1218 m_iLength = m_pStreamImp->GetLength(); |
1218 return true; | 1219 return true; |
1219 } | 1220 } |
1220 | 1221 |
1221 void CFX_Stream::Release() { | 1222 void CFGAS_Stream::Release() { |
1222 if (--m_iRefCount < 1) { | 1223 if (--m_iRefCount < 1) { |
1223 delete this; | 1224 delete this; |
1224 } | 1225 } |
1225 } | 1226 } |
1226 IFX_Stream* CFX_Stream::Retain() { | 1227 IFGAS_Stream* CFGAS_Stream::Retain() { |
1227 m_iRefCount++; | 1228 m_iRefCount++; |
1228 return this; | 1229 return this; |
1229 } | 1230 } |
1230 | 1231 |
1231 uint32_t CFX_Stream::GetAccessModes() const { | 1232 uint32_t CFGAS_Stream::GetAccessModes() const { |
1232 return m_dwAccess; | 1233 return m_dwAccess; |
1233 } | 1234 } |
1234 | 1235 |
1235 int32_t CFX_Stream::GetLength() const { | 1236 int32_t CFGAS_Stream::GetLength() const { |
1236 if (!m_pStreamImp) { | 1237 if (!m_pStreamImp) { |
1237 return -1; | 1238 return -1; |
1238 } | 1239 } |
1239 if (m_eStreamType == FX_STREAMTYPE_File || | 1240 if (m_eStreamType == FX_STREAMTYPE_File || |
1240 m_eStreamType == FX_STREAMTYPE_Buffer) { | 1241 m_eStreamType == FX_STREAMTYPE_Buffer) { |
1241 return m_pStreamImp->GetLength(); | 1242 return m_pStreamImp->GetLength(); |
1242 } | 1243 } |
1243 return m_iLength; | 1244 return m_iLength; |
1244 } | 1245 } |
1245 int32_t CFX_Stream::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { | 1246 int32_t CFGAS_Stream::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { |
1246 if (!m_pStreamImp) { | 1247 if (!m_pStreamImp) { |
1247 return -1; | 1248 return -1; |
1248 } | 1249 } |
1249 if (m_eStreamType == FX_STREAMTYPE_File || | 1250 if (m_eStreamType == FX_STREAMTYPE_File || |
1250 m_eStreamType == FX_STREAMTYPE_Buffer) { | 1251 m_eStreamType == FX_STREAMTYPE_Buffer) { |
1251 return m_iPosition = m_pStreamImp->Seek(eSeek, iOffset); | 1252 return m_iPosition = m_pStreamImp->Seek(eSeek, iOffset); |
1252 } | 1253 } |
1253 int32_t iEnd = m_iStart + m_iLength; | 1254 int32_t iEnd = m_iStart + m_iLength; |
1254 int32_t iPosition = m_iStart + iOffset; | 1255 int32_t iPosition = m_iStart + iOffset; |
1255 if (eSeek == FX_STREAMSEEK_Begin) { | 1256 if (eSeek == FX_STREAMSEEK_Begin) { |
1256 m_iPosition = iPosition; | 1257 m_iPosition = iPosition; |
1257 } else if (eSeek == FX_STREAMSEEK_Current) { | 1258 } else if (eSeek == FX_STREAMSEEK_Current) { |
1258 m_iPosition += iOffset; | 1259 m_iPosition += iOffset; |
1259 } else if (eSeek == FX_STREAMSEEK_End) { | 1260 } else if (eSeek == FX_STREAMSEEK_End) { |
1260 m_iPosition = iEnd + iOffset; | 1261 m_iPosition = iEnd + iOffset; |
1261 } | 1262 } |
1262 if (m_iPosition > iEnd) { | 1263 if (m_iPosition > iEnd) { |
1263 m_iPosition = iEnd; | 1264 m_iPosition = iEnd; |
1264 } | 1265 } |
1265 if (m_iPosition < m_iStart) { | 1266 if (m_iPosition < m_iStart) { |
1266 m_iPosition = m_iStart; | 1267 m_iPosition = m_iStart; |
1267 } | 1268 } |
1268 return m_iPosition - m_iStart; | 1269 return m_iPosition - m_iStart; |
1269 } | 1270 } |
1270 int32_t CFX_Stream::GetPosition() { | 1271 int32_t CFGAS_Stream::GetPosition() { |
1271 if (!m_pStreamImp) { | 1272 if (!m_pStreamImp) { |
1272 return -1; | 1273 return -1; |
1273 } | 1274 } |
1274 if (m_eStreamType == FX_STREAMTYPE_File || | 1275 if (m_eStreamType == FX_STREAMTYPE_File || |
1275 m_eStreamType == FX_STREAMTYPE_Buffer) { | 1276 m_eStreamType == FX_STREAMTYPE_Buffer) { |
1276 return m_iPosition = m_pStreamImp->GetPosition(); | 1277 return m_iPosition = m_pStreamImp->GetPosition(); |
1277 } | 1278 } |
1278 return m_iPosition - m_iStart; | 1279 return m_iPosition - m_iStart; |
1279 } | 1280 } |
1280 bool CFX_Stream::IsEOF() const { | 1281 bool CFGAS_Stream::IsEOF() const { |
1281 if (!m_pStreamImp) { | 1282 if (!m_pStreamImp) { |
1282 return true; | 1283 return true; |
1283 } | 1284 } |
1284 if (m_eStreamType == FX_STREAMTYPE_File || | 1285 if (m_eStreamType == FX_STREAMTYPE_File || |
1285 m_eStreamType == FX_STREAMTYPE_Buffer) { | 1286 m_eStreamType == FX_STREAMTYPE_Buffer) { |
1286 return m_pStreamImp->IsEOF(); | 1287 return m_pStreamImp->IsEOF(); |
1287 } | 1288 } |
1288 return m_iPosition >= m_iStart + m_iLength; | 1289 return m_iPosition >= m_iStart + m_iLength; |
1289 } | 1290 } |
1290 int32_t CFX_Stream::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { | 1291 int32_t CFGAS_Stream::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { |
1291 ASSERT(pBuffer && iBufferSize > 0); | 1292 ASSERT(pBuffer && iBufferSize > 0); |
1292 if (!m_pStreamImp) { | 1293 if (!m_pStreamImp) { |
1293 return -1; | 1294 return -1; |
1294 } | 1295 } |
1295 int32_t iLen = std::min(m_iStart + m_iLength - m_iPosition, iBufferSize); | 1296 int32_t iLen = std::min(m_iStart + m_iLength - m_iPosition, iBufferSize); |
1296 if (iLen <= 0) { | 1297 if (iLen <= 0) { |
1297 return 0; | 1298 return 0; |
1298 } | 1299 } |
1299 if (m_pStreamImp->GetPosition() != m_iPosition) { | 1300 if (m_pStreamImp->GetPosition() != m_iPosition) { |
1300 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); | 1301 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); |
1301 } | 1302 } |
1302 iLen = m_pStreamImp->ReadData(pBuffer, iLen); | 1303 iLen = m_pStreamImp->ReadData(pBuffer, iLen); |
1303 m_iPosition = m_pStreamImp->GetPosition(); | 1304 m_iPosition = m_pStreamImp->GetPosition(); |
1304 return iLen; | 1305 return iLen; |
1305 } | 1306 } |
1306 int32_t CFX_Stream::ReadString(FX_WCHAR* pStr, int32_t iMaxLength, bool& bEOS) { | 1307 int32_t CFGAS_Stream::ReadString(FX_WCHAR* pStr, |
1308 int32_t iMaxLength, | |
1309 bool& bEOS) { | |
1307 ASSERT(pStr && iMaxLength > 0); | 1310 ASSERT(pStr && iMaxLength > 0); |
1308 if (!m_pStreamImp) { | 1311 if (!m_pStreamImp) { |
1309 return -1; | 1312 return -1; |
1310 } | 1313 } |
1311 int32_t iEnd = m_iStart + m_iLength; | 1314 int32_t iEnd = m_iStart + m_iLength; |
1312 int32_t iLen = iEnd - m_iPosition; | 1315 int32_t iLen = iEnd - m_iPosition; |
1313 iLen = std::min(iEnd / 2, iMaxLength); | 1316 iLen = std::min(iEnd / 2, iMaxLength); |
1314 if (iLen <= 0) { | 1317 if (iLen <= 0) { |
1315 return 0; | 1318 return 0; |
1316 } | 1319 } |
1317 if (m_pStreamImp->GetPosition() != m_iPosition) { | 1320 if (m_pStreamImp->GetPosition() != m_iPosition) { |
1318 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); | 1321 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); |
1319 } | 1322 } |
1320 iLen = m_pStreamImp->ReadString(pStr, iLen, bEOS); | 1323 iLen = m_pStreamImp->ReadString(pStr, iLen, bEOS); |
1321 m_iPosition = m_pStreamImp->GetPosition(); | 1324 m_iPosition = m_pStreamImp->GetPosition(); |
1322 if (iLen > 0 && m_iPosition >= iEnd) { | 1325 if (iLen > 0 && m_iPosition >= iEnd) { |
1323 bEOS = true; | 1326 bEOS = true; |
1324 } | 1327 } |
1325 return iLen; | 1328 return iLen; |
1326 } | 1329 } |
1327 | 1330 |
1328 int32_t CFX_Stream::WriteData(const uint8_t* pBuffer, int32_t iBufferSize) { | 1331 int32_t CFGAS_Stream::WriteData(const uint8_t* pBuffer, int32_t iBufferSize) { |
1329 ASSERT(pBuffer && iBufferSize > 0); | 1332 ASSERT(pBuffer && iBufferSize > 0); |
1330 if (!m_pStreamImp) { | 1333 if (!m_pStreamImp) { |
1331 return -1; | 1334 return -1; |
1332 } | 1335 } |
1333 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { | 1336 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { |
1334 return -1; | 1337 return -1; |
1335 } | 1338 } |
1336 int32_t iLen = iBufferSize; | 1339 int32_t iLen = iBufferSize; |
1337 if (m_eStreamType == FX_STREAMTYPE_Stream) { | 1340 if (m_eStreamType == FX_STREAMTYPE_Stream) { |
1338 iLen = std::min(m_iStart + m_iTotalSize - m_iPosition, iBufferSize); | 1341 iLen = std::min(m_iStart + m_iTotalSize - m_iPosition, iBufferSize); |
1339 if (iLen <= 0) { | 1342 if (iLen <= 0) { |
1340 return 0; | 1343 return 0; |
1341 } | 1344 } |
1342 } | 1345 } |
1343 int32_t iEnd = m_iStart + m_iLength; | 1346 int32_t iEnd = m_iStart + m_iLength; |
1344 if (m_pStreamImp->GetPosition() != m_iPosition) { | 1347 if (m_pStreamImp->GetPosition() != m_iPosition) { |
1345 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); | 1348 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); |
1346 } | 1349 } |
1347 iLen = m_pStreamImp->WriteData(pBuffer, iLen); | 1350 iLen = m_pStreamImp->WriteData(pBuffer, iLen); |
1348 m_iPosition = m_pStreamImp->GetPosition(); | 1351 m_iPosition = m_pStreamImp->GetPosition(); |
1349 if (m_iPosition > iEnd) { | 1352 if (m_iPosition > iEnd) { |
1350 m_iLength = m_iPosition - m_iStart; | 1353 m_iLength = m_iPosition - m_iStart; |
1351 } | 1354 } |
1352 return iLen; | 1355 return iLen; |
1353 } | 1356 } |
1354 int32_t CFX_Stream::WriteString(const FX_WCHAR* pStr, int32_t iLength) { | 1357 int32_t CFGAS_Stream::WriteString(const FX_WCHAR* pStr, int32_t iLength) { |
1355 ASSERT(pStr && iLength > 0); | 1358 ASSERT(pStr && iLength > 0); |
1356 if (!m_pStreamImp) { | 1359 if (!m_pStreamImp) { |
1357 return -1; | 1360 return -1; |
1358 } | 1361 } |
1359 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { | 1362 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { |
1360 return -1; | 1363 return -1; |
1361 } | 1364 } |
1362 int32_t iLen = iLength; | 1365 int32_t iLen = iLength; |
1363 if (m_eStreamType == FX_STREAMTYPE_Stream) { | 1366 if (m_eStreamType == FX_STREAMTYPE_Stream) { |
1364 iLen = std::min((m_iStart + m_iTotalSize - m_iPosition) / 2, iLength); | 1367 iLen = std::min((m_iStart + m_iTotalSize - m_iPosition) / 2, iLength); |
1365 if (iLen <= 0) { | 1368 if (iLen <= 0) { |
1366 return 0; | 1369 return 0; |
1367 } | 1370 } |
1368 } | 1371 } |
1369 int32_t iEnd = m_iStart + m_iLength; | 1372 int32_t iEnd = m_iStart + m_iLength; |
1370 if (m_pStreamImp->GetPosition() != m_iPosition) { | 1373 if (m_pStreamImp->GetPosition() != m_iPosition) { |
1371 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); | 1374 m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); |
1372 } | 1375 } |
1373 iLen = m_pStreamImp->WriteString(pStr, iLen); | 1376 iLen = m_pStreamImp->WriteString(pStr, iLen); |
1374 m_iPosition = m_pStreamImp->GetPosition(); | 1377 m_iPosition = m_pStreamImp->GetPosition(); |
1375 if (m_iPosition > iEnd) { | 1378 if (m_iPosition > iEnd) { |
1376 m_iLength = m_iPosition - m_iStart; | 1379 m_iLength = m_iPosition - m_iStart; |
1377 } | 1380 } |
1378 return iLen; | 1381 return iLen; |
1379 } | 1382 } |
1380 void CFX_Stream::Flush() { | 1383 void CFGAS_Stream::Flush() { |
1381 if (!m_pStreamImp) { | 1384 if (!m_pStreamImp) { |
1382 return; | 1385 return; |
1383 } | 1386 } |
1384 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { | 1387 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { |
1385 return; | 1388 return; |
1386 } | 1389 } |
1387 m_pStreamImp->Flush(); | 1390 m_pStreamImp->Flush(); |
1388 } | 1391 } |
1389 bool CFX_Stream::SetLength(int32_t iLength) { | 1392 bool CFGAS_Stream::SetLength(int32_t iLength) { |
1390 if (!m_pStreamImp) { | 1393 if (!m_pStreamImp) { |
1391 return false; | 1394 return false; |
1392 } | 1395 } |
1393 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { | 1396 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { |
1394 return false; | 1397 return false; |
1395 } | 1398 } |
1396 return m_pStreamImp->SetLength(iLength); | 1399 return m_pStreamImp->SetLength(iLength); |
1397 } | 1400 } |
1398 int32_t CFX_Stream::GetBOM(uint8_t bom[4]) const { | 1401 int32_t CFGAS_Stream::GetBOM(uint8_t bom[4]) const { |
1399 if (!m_pStreamImp) { | 1402 if (!m_pStreamImp) { |
1400 return -1; | 1403 return -1; |
1401 } | 1404 } |
1402 return 0; | 1405 return 0; |
1403 } | 1406 } |
1404 uint16_t CFX_Stream::GetCodePage() const { | 1407 uint16_t CFGAS_Stream::GetCodePage() const { |
1405 #if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ | 1408 #if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ |
1406 return FX_CODEPAGE_UTF16LE; | 1409 return FX_CODEPAGE_UTF16LE; |
1407 #else | 1410 #else |
1408 return FX_CODEPAGE_UTF16BE; | 1411 return FX_CODEPAGE_UTF16BE; |
1409 #endif | 1412 #endif |
1410 } | 1413 } |
1411 uint16_t CFX_Stream::SetCodePage(uint16_t wCodePage) { | 1414 uint16_t CFGAS_Stream::SetCodePage(uint16_t wCodePage) { |
1412 #if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ | 1415 #if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ |
1413 return FX_CODEPAGE_UTF16LE; | 1416 return FX_CODEPAGE_UTF16LE; |
1414 #else | 1417 #else |
1415 return FX_CODEPAGE_UTF16BE; | 1418 return FX_CODEPAGE_UTF16BE; |
1416 #endif | 1419 #endif |
1417 } | 1420 } |
1418 IFX_Stream* CFX_Stream::CreateSharedStream(uint32_t dwAccess, | 1421 IFGAS_Stream* CFGAS_Stream::CreateSharedStream(uint32_t dwAccess, |
1419 int32_t iOffset, | 1422 int32_t iOffset, |
1420 int32_t iLength) { | 1423 int32_t iLength) { |
1421 ASSERT(iLength > 0); | 1424 ASSERT(iLength > 0); |
1422 if (!m_pStreamImp) { | 1425 if (!m_pStreamImp) { |
1423 return nullptr; | 1426 return nullptr; |
1424 } | 1427 } |
1425 if ((m_dwAccess & FX_STREAMACCESS_Text) != 0 && | 1428 if ((m_dwAccess & FX_STREAMACCESS_Text) != 0 && |
1426 (dwAccess & FX_STREAMACCESS_Text) == 0) { | 1429 (dwAccess & FX_STREAMACCESS_Text) == 0) { |
1427 return nullptr; | 1430 return nullptr; |
1428 } | 1431 } |
1429 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0 && | 1432 if ((m_dwAccess & FX_STREAMACCESS_Write) == 0 && |
1430 (dwAccess & FX_STREAMACCESS_Write) != 0) { | 1433 (dwAccess & FX_STREAMACCESS_Write) != 0) { |
1431 return nullptr; | 1434 return nullptr; |
1432 } | 1435 } |
1433 int32_t iStart = m_iStart + iOffset; | 1436 int32_t iStart = m_iStart + iOffset; |
1434 int32_t iTotal = m_iStart + m_iLength; | 1437 int32_t iTotal = m_iStart + m_iLength; |
1435 if (iStart < m_iStart || iStart >= iTotal) { | 1438 if (iStart < m_iStart || iStart >= iTotal) { |
1436 return nullptr; | 1439 return nullptr; |
1437 } | 1440 } |
1438 int32_t iEnd = iStart + iLength; | 1441 int32_t iEnd = iStart + iLength; |
1439 if (iEnd < iStart || iEnd > iTotal) { | 1442 if (iEnd < iStart || iEnd > iTotal) { |
1440 return nullptr; | 1443 return nullptr; |
1441 } | 1444 } |
1442 CFX_Stream* pShared = new CFX_Stream; | 1445 CFGAS_Stream* pShared = new CFGAS_Stream; |
1443 pShared->m_eStreamType = FX_STREAMTYPE_Stream; | 1446 pShared->m_eStreamType = FX_STREAMTYPE_Stream; |
1444 pShared->m_pStreamImp = m_pStreamImp; | 1447 pShared->m_pStreamImp = m_pStreamImp; |
1445 pShared->m_dwAccess = dwAccess; | 1448 pShared->m_dwAccess = dwAccess; |
1446 pShared->m_iTotalSize = iLength; | 1449 pShared->m_iTotalSize = iLength; |
1447 pShared->m_iPosition = iStart; | 1450 pShared->m_iPosition = iStart; |
1448 pShared->m_iStart = iStart; | 1451 pShared->m_iStart = iStart; |
1449 pShared->m_iLength = (dwAccess & FX_STREAMACCESS_Write) != 0 ? 0 : iLength; | 1452 pShared->m_iLength = (dwAccess & FX_STREAMACCESS_Write) != 0 ? 0 : iLength; |
1450 if (dwAccess & FX_STREAMACCESS_Text) { | 1453 if (dwAccess & FX_STREAMACCESS_Text) { |
1451 return IFX_Stream::CreateTextStream(pShared, true); | 1454 return IFGAS_Stream::CreateTextStream(pShared, true); |
npm
2016/12/02 16:23:22
{}
Tom Sepez
2016/12/02 18:02:08
Done.
| |
1452 } | 1455 } |
1453 return pShared; | 1456 return pShared; |
1454 } | 1457 } |
1455 | 1458 |
1456 IFX_SeekableReadStream* IFX_Stream::MakeSeekableReadStream() { | 1459 IFX_SeekableReadStream* IFGAS_Stream::MakeSeekableReadStream() { |
1457 return new CFGAS_FileRead(this, false); | 1460 return new CFGAS_FileRead(this, false); |
1458 } | 1461 } |
1459 | 1462 |
1460 CFGAS_FileRead::CFGAS_FileRead(IFX_Stream* pStream, bool bReleaseStream) | 1463 CFGAS_FileRead::CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream) |
1461 : m_bReleaseStream(bReleaseStream), m_pStream(pStream) { | 1464 : m_bReleaseStream(bReleaseStream), m_pStream(pStream) { |
1462 ASSERT(m_pStream); | 1465 ASSERT(m_pStream); |
1463 } | 1466 } |
1464 CFGAS_FileRead::~CFGAS_FileRead() { | 1467 CFGAS_FileRead::~CFGAS_FileRead() { |
1465 if (m_bReleaseStream) { | 1468 if (m_bReleaseStream) { |
1466 m_pStream->Release(); | 1469 m_pStream->Release(); |
1467 } | 1470 } |
1468 } | 1471 } |
1469 FX_FILESIZE CFGAS_FileRead::GetSize() { | 1472 FX_FILESIZE CFGAS_FileRead::GetSize() { |
1470 return (FX_FILESIZE)m_pStream->GetLength(); | 1473 return (FX_FILESIZE)m_pStream->GetLength(); |
1471 } | 1474 } |
1472 | 1475 |
1473 bool CFGAS_FileRead::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) { | 1476 bool CFGAS_FileRead::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) { |
1474 m_pStream->Seek(FX_STREAMSEEK_Begin, (int32_t)offset); | 1477 m_pStream->Seek(FX_STREAMSEEK_Begin, (int32_t)offset); |
1475 int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size); | 1478 int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size); |
1476 return iLen == (int32_t)size; | 1479 return iLen == (int32_t)size; |
1477 } | 1480 } |
1478 | 1481 |
1479 void CFGAS_FileRead::Release() { | 1482 void CFGAS_FileRead::Release() { |
1480 delete this; | 1483 delete this; |
1481 } | 1484 } |
OLD | NEW |