2
0

CLodStream.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "StdInc.h"
  2. #include "CLodStream.h"
  3. /*
  4. #include "CLodArchiveLoader.h"
  5. #include "CFileInputStream.h"
  6. #include "CMemoryStream.h"
  7. CLodStream::CLodStream()
  8. {
  9. }
  10. CLodStream::CLodStream(const CLodArchiveLoader * loader, const std::string & resourceName)
  11. {
  12. open(loader, resourceName);
  13. }
  14. void CLodStream::open(const CLodArchiveLoader * loader, const std::string & resourceName)
  15. {
  16. assert(!fileStream);
  17. const ArchiveEntry * archiveEntry = loader->getArchiveEntry(resourceName);
  18. if(archiveEntry == nullptr)
  19. {
  20. throw std::runtime_error("Archive entry " + resourceName + " wasn't found in the archive " + loader->getOrigin());
  21. }
  22. size = archiveEntry->size;
  23. offset = archiveEntry->offset;
  24. // Open the archive and set the read pointer to the correct position
  25. fileStream.reset(new CFileInputStream(loader->getOrigin()));
  26. fileStream->seek(archiveEntry->offset);
  27. // Decompress file
  28. if(archiveEntry->size != 0)
  29. {
  30. // replace original buffer with decompressed one
  31. fileStream.reset(CLodArchiveLoader::decompress(*this, archiveEntry->realSize));
  32. assert(fileStream->getSize() == archiveEntry->realSize);
  33. //in memory stream we no longer need offset
  34. offset = 0;
  35. }
  36. size = archiveEntry->realSize;
  37. }
  38. si64 CLodStream::read(ui8 * data, si64 size)
  39. {
  40. return fileStream->read(data, size);
  41. }
  42. si64 CLodStream::seek(si64 position)
  43. {
  44. return fileStream->seek(offset + position);
  45. }
  46. si64 CLodStream::tell()
  47. {
  48. return fileStream->tell() - offset;
  49. }
  50. si64 CLodStream::skip(si64 delta)
  51. {
  52. return fileStream->skip(delta);
  53. }
  54. si64 CLodStream::getSize()
  55. {
  56. return size;
  57. }
  58. void CLodStream::close()
  59. {
  60. fileStream->close();
  61. }
  62. */