file.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. * Copyright 2010-2023 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bx/blob/master/LICENSE
  4. */
  5. #ifndef BX_FILE_H_HEADER_GUARD
  6. #define BX_FILE_H_HEADER_GUARD
  7. #include "filepath.h"
  8. #include "readerwriter.h"
  9. namespace bx
  10. {
  11. /// Returns standard input reader.
  12. ReaderI* getStdIn();
  13. /// Returns standard output writer.
  14. WriterI* getStdOut();
  15. /// Returns standard error writer.
  16. WriterI* getStdErr();
  17. /// Returns null output writer.
  18. WriterI* getNullOut();
  19. /// File reader.
  20. class FileReader : public FileReaderI
  21. {
  22. public:
  23. ///
  24. FileReader();
  25. ///
  26. virtual ~FileReader();
  27. ///
  28. virtual bool open(const FilePath& _filePath, Error* _err) override;
  29. ///
  30. virtual void close() override;
  31. ///
  32. virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) override;
  33. ///
  34. virtual int32_t read(void* _data, int32_t _size, Error* _err) override;
  35. private:
  36. BX_ALIGN_DECL(16, uint8_t) m_internal[64];
  37. };
  38. /// File writer.
  39. class FileWriter : public FileWriterI
  40. {
  41. public:
  42. ///
  43. FileWriter();
  44. ///
  45. virtual ~FileWriter();
  46. ///
  47. virtual bool open(const FilePath& _filePath, bool _append, Error* _err) override;
  48. ///
  49. virtual void close() override;
  50. ///
  51. virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) override;
  52. ///
  53. virtual int32_t write(const void* _data, int32_t _size, Error* _err) override;
  54. private:
  55. BX_ALIGN_DECL(16, uint8_t) m_internal[64];
  56. };
  57. /// File type.
  58. struct FileType
  59. {
  60. /// File types:
  61. enum Enum
  62. {
  63. File, //!< File.
  64. Dir, //!< Directory.
  65. Count
  66. };
  67. };
  68. /// File info.
  69. struct FileInfo
  70. {
  71. FilePath filePath; //!< File path.
  72. uint64_t size; //!< File size.
  73. FileType::Enum type; //!< File type.
  74. };
  75. /// Directory reader.
  76. class DirectoryReader : public ReaderOpenI, public CloserI, public ReaderI
  77. {
  78. public:
  79. ///
  80. DirectoryReader();
  81. ///
  82. virtual ~DirectoryReader();
  83. ///
  84. virtual bool open(const FilePath& _filePath, Error* _err) override;
  85. ///
  86. virtual void close() override;
  87. ///
  88. virtual int32_t read(void* _data, int32_t _size, Error* _err) override;
  89. private:
  90. BX_ALIGN_DECL(16, uint8_t) m_internal[sizeof(FilePath)+sizeof(FileInfo)+16];
  91. };
  92. /// FIle stat.
  93. bool stat(FileInfo& _outFileInfo, const FilePath& _filePath);
  94. /// Creates a directory named `_filePath`.
  95. ///
  96. bool make(const FilePath& _filePath, Error* _err = bx::ErrorIgnore{});
  97. /// Creates a directory named `_filePath` along with all necessary parents.
  98. ///
  99. bool makeAll(const FilePath& _filePath, Error* _err = bx::ErrorIgnore{});
  100. /// Removes file or directory.
  101. ///
  102. bool remove(const FilePath& _filePath, Error* _err = bx::ErrorIgnore{});
  103. /// Removes file or directory recursively.
  104. ///
  105. bool removeAll(const FilePath& _filePath, Error* _err = bx::ErrorIgnore{});
  106. } // namespace bx
  107. #endif // BX_FILE_H_HEADER_GUARD