Oxygen Engine
Modern C++ 3D Engine using OpenGL
Loading...
Searching...
No Matches
file.h
1#ifndef OE_IO_FILE_H
2#define OE_IO_FILE_H
3
4#include <cstdint>
5#include <string>
6
7struct PHYSFS_File;
8
9namespace oe::io
10{
11 enum FileMode
12 {
13 READ = 1,
14 WRITE = 2,
15 APPEND = 4
16 };
17
18 class File
19 {
20 public:
25 File(const std::string& filename, const FileMode& mode);
26 ~File();
27
28 size_t read(void* buffer, const size_t& len);
29 size_t write(const void* buffer, const size_t& len);
30 bool eof();
31 bool seek(const size_t& pos);
32 size_t tell();
33 size_t size();
34 bool flush();
35
39 void align(size_t alignment);
40
41 std::string readStringToNull(const size_t& maxLength = 32767);
42
43 template <typename T> T readValue(bool little_endian = true);
44 template <typename T> bool writeValue(const T value, bool little_endian = true);
45
46 private:
47 PHYSFS_File* _handle;
48 };
49
50 template<> bool File::readValue<>(bool little_endian);
51 template<> uint8_t File::readValue<>(bool little_endian);
52 template<> int8_t File::readValue<>(bool little_endian);
53 template<> uint16_t File::readValue<>(bool little_endian);
54 template<> int16_t File::readValue<>(bool little_endian);
55 template<> uint32_t File::readValue<>(bool little_endian);
56 template<> int32_t File::readValue<>(bool little_endian);
57 template<> uint64_t File::readValue<>(bool little_endian);
58 template<> int64_t File::readValue<>(bool little_endian);
59
60 template<> float File::readValue<>(bool little_endian);
61 template<> double File::readValue<>(bool little_endian);
62
63 template<> bool File::writeValue<>(const bool value, bool little_endian);
64 template<> bool File::writeValue<>(const uint8_t value, bool little_endian);
65 template<> bool File::writeValue<>(const int8_t value, bool little_endian);
66 template<> bool File::writeValue<>(const uint16_t value, bool little_endian);
67 template<> bool File::writeValue<>(const int16_t value, bool little_endian);
68 template<> bool File::writeValue<>(const uint32_t value, bool little_endian);
69 template<> bool File::writeValue<>(const int32_t value, bool little_endian);
70 template<> bool File::writeValue<>(const uint64_t value, bool little_endian);
71 template<> bool File::writeValue<>(const int64_t value, bool little_endian);
72}
73
74#endif
File(const std::string &filename, const FileMode &mode)
void align(size_t alignment)
Input/Output abstractions (Filesystem, Network, ...).
Definition file.h:10