DefaultIOStream.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /** @file Default File I/O implementation for #Importer */
  2. #include "DefaultIOStream.h"
  3. #include "aiAssert.h"
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. using namespace Assimp;
  7. // ---------------------------------------------------------------------------
  8. // ---------------------------------------------------------------------------
  9. DefaultIOStream::~DefaultIOStream()
  10. {
  11. if (this->mFile)
  12. {
  13. fclose(this->mFile);
  14. }
  15. }
  16. // ---------------------------------------------------------------------------
  17. // ---------------------------------------------------------------------------
  18. size_t DefaultIOStream::Read(void* pvBuffer,
  19. size_t pSize,
  20. size_t pCount)
  21. {
  22. if (!this->mFile)
  23. return 0;
  24. return fread(pvBuffer, pSize, pCount, this->mFile);
  25. }
  26. // ---------------------------------------------------------------------------
  27. // ---------------------------------------------------------------------------
  28. size_t DefaultIOStream::Write(const void* pvBuffer,
  29. size_t pSize,
  30. size_t pCount)
  31. {
  32. if (!this->mFile)return 0;
  33. fseek(mFile, 0, SEEK_SET);
  34. return fwrite(pvBuffer, pSize, pCount, this->mFile);
  35. }
  36. // ---------------------------------------------------------------------------
  37. // ---------------------------------------------------------------------------
  38. aiReturn DefaultIOStream::Seek(size_t pOffset,
  39. aiOrigin pOrigin)
  40. {
  41. if (!this->mFile)return AI_FAILURE;
  42. return (0 == fseek(this->mFile, pOffset,
  43. (aiOrigin_CUR == pOrigin ? SEEK_CUR :
  44. (aiOrigin_END == pOrigin ? SEEK_END : SEEK_SET)))
  45. ? AI_SUCCESS : AI_FAILURE);
  46. }
  47. // ---------------------------------------------------------------------------
  48. // ---------------------------------------------------------------------------
  49. size_t DefaultIOStream::Tell() const
  50. {
  51. if (!this->mFile)return 0;
  52. return ftell(this->mFile);
  53. }
  54. // ---------------------------------------------------------------------------
  55. // ---------------------------------------------------------------------------
  56. size_t DefaultIOStream::FileSize() const
  57. {
  58. ai_assert (!mFilename.empty());
  59. if (NULL == mFile)
  60. return 0;
  61. #if defined _WIN32 && !defined __GNUC__
  62. struct __stat64 fileStat;
  63. int err = _stat64( mFilename.c_str(), &fileStat );
  64. if (0 != err)
  65. return 0;
  66. return (size_t) (fileStat.st_size);
  67. #else
  68. struct stat fileStat;
  69. int err = stat(mFilename.c_str(), &fileStat );
  70. if (0 != err)
  71. return 0;
  72. return (size_t) (fileStat.st_size);
  73. #endif
  74. }
  75. // ---------------------------------------------------------------------------