blob: 1ef286fdd4c0da17729ea5040487e55938f0a6d6 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/* SPDX-License-Identifier: BSL-1.0 OR BSD-3-Clause */
#ifndef MPT_IO_BASE_HPP
#define MPT_IO_BASE_HPP
#include "mpt/base/integer.hpp"
#include "mpt/base/namespace.hpp"
#include <cstddef>
namespace mpt {
inline namespace MPT_INLINE_NS {
namespace IO {
using Offset = int64;
inline constexpr std::size_t BUFFERSIZE_MINUSCULE = 1 * 256; // on stack usage, tuned for single word/line buffers
inline constexpr std::size_t BUFFERSIZE_TINY = 1 * 1024; // on stack usage
inline constexpr std::size_t BUFFERSIZE_SMALL = 4 * 1024; // on heap
inline constexpr std::size_t BUFFERSIZE_NORMAL = 64 * 1024; // FILE I/O
inline constexpr std::size_t BUFFERSIZE_LARGE = 1024 * 1024;
template <typename Tfile, typename Enable = void>
struct FileOperations {
};
template <typename Tfile>
inline FileOperations<Tfile> FileOps(Tfile & f) {
;
return FileOperations<Tfile>{f};
}
template <typename Tfile>
inline bool IsValid(Tfile & f) {
return FileOps(f).IsValid();
}
template <typename Tfile>
inline bool IsReadSeekable(Tfile & f) {
return FileOps(f).IsReadSeekable();
}
template <typename Tfile>
inline bool IsWriteSeekable(Tfile & f) {
return FileOps(f).IsWriteSeekable();
}
template <typename Tfile>
inline IO::Offset TellRead(Tfile & f) {
return FileOps(f).TellRead();
}
template <typename Tfile>
inline IO::Offset TellWrite(Tfile & f) {
return FileOps(f).TellWrite();
}
template <typename Tfile>
inline bool SeekBegin(Tfile & f) {
return FileOps(f).SeekBegin();
}
template <typename Tfile>
inline bool SeekEnd(Tfile & f) {
return FileOps(f).SeekEnd();
}
template <typename Tfile>
inline bool SeekAbsolute(Tfile & f, IO::Offset pos) {
return FileOps(f).SeekAbsolute(pos);
}
template <typename Tfile>
inline bool SeekRelative(Tfile & f, IO::Offset off) {
return FileOps(f).SeekRelative(off);
}
template <typename Tfile>
inline mpt::byte_span ReadRawImpl(Tfile & f, mpt::byte_span data) {
return FileOps(f).ReadRawImpl(data);
}
template <typename Tfile>
inline bool WriteRawImpl(Tfile & f, mpt::const_byte_span data) {
return FileOps(f).WriteRawImpl(data);
}
template <typename Tfile>
inline bool IsEof(Tfile & f) {
return FileOps(f).IsEof();
}
template <typename Tfile>
inline bool Flush(Tfile & f) {
return FileOps(f).Flush();
}
} // namespace IO
} // namespace MPT_INLINE_NS
} // namespace mpt
#endif // MPT_IO_BASE_HPP
|