ActiveLib
Loading...
Searching...
No Matches
BufferOut.h
1
6#ifndef ACTIVE_UTILITY_BUFFER_OUT
7#define ACTIVE_UTILITY_BUFFER_OUT
8
9#include "Active/File/Interface/IOBase.h"
10#include "Active/Utility/Memory.h"
11#include "Active/Utility/String.h"
12#include "Active/Utility/DataFormat.h"
13
14namespace active::file {
15
16 class File;
17
18}
19
20namespace active::utility {
21
22 //Class to buffer data to a specified destination
23 class BufferOut: public file::IOBase {
24 public:
25 using enum utility::TextEncoding;
26
30 BufferOut();
37 BufferOut(file::File& destFile, Memory::sizeOption bufferSize = std::nullopt, DataFormat format = DataFormat{});
44 BufferOut(Memory& memory, Memory::sizeOption bufferSize = std::nullopt, DataFormat format = DataFormat{});
51 BufferOut(Memory&& memory, Memory::sizeOption bufferSize = std::nullopt, DataFormat format = DataFormat{});
58 BufferOut(String& destString, Memory::sizeOption bufferSize = std::nullopt, DataFormat format = DataFormat{});
63 BufferOut(BufferOut&& source) noexcept;
64 //No copy constructor
65 BufferOut(const BufferOut& source) = delete;
69 virtual ~BufferOut();
70
71 //MARK: - Operators
72
78 BufferOut& operator= (BufferOut&& source) noexcept;
79 //No assignment
80 BufferOut& operator= (const BufferOut&) = delete;
85 operator bool () const { return !fail(); }
91 const BufferOut& operator<<(char val) const { return write(val); }
97 const BufferOut& operator<<(const String& str) const { return write(str); }
103 const BufferOut& operator<<(int16_t val) const { return write(String{val}); }
109 const BufferOut& operator<<(int32_t val) const { return write(String{val}); }
115 const BufferOut& operator<<(uint32_t val) const { return write(String{val}); }
121 const BufferOut& operator<<(int64_t val) const { return write(String{val}); }
122#ifndef WINDOWS
128 const BufferOut& operator<<(uint64_t val) const { return write(String{val}); }
129#endif
135 const BufferOut& operator<<(double val) const { return write(String{val}); }
136
137 // MARK: - Functions (const)
138
153 DataFormat format() const { return m_format; }
158 TextEncoding getEncoding() const { return m_format.encoding; }
164 const BufferOut& write(const String& toWrite) const { return write(toWrite, m_format); }
171 const BufferOut& write(const String& toWrite, DataFormat format) const;
178 const BufferOut& write(const char* toWrite, Memory::size_type length) const;
184 const BufferOut& write(unsigned char toWrite) const;
190 template<class T>
191 const BufferOut& writeBinary(const T& obj) const {
192 return write(reinterpret_cast<const char*>(&obj), sizeof(obj));
193 }
198 const BufferOut& flush() const { return flushBuffer(); }
199
200 // MARK: - Functions (mutating)
201
206 void setDestination(file::File* destFile);
211 void setDestination(Memory* memory);
216 void setDestination(String* destString);
221 void setEncoding(TextEncoding encoding) { m_format.encoding = encoding; }
222
223 protected:
228 virtual bool isMyBuffer() const { return m_buffer.owned(); }
233 const Memory& getBuffer() const { return m_buffer; }
239 void setBuffer(void* buffer, Memory::size_type size) const { m_buffer = Memory{buffer, size}; }
244 virtual bool confirmBuffer() const;
245
246 private:
247 static constexpr Memory::size_type defaultBufferSize = 0xF000;
248
255 const BufferOut& performWrite(const char* toWrite, Memory::size_type length) const;
260 const BufferOut& flushBuffer() const;
267 void initialise(Memory* memory = nullptr, file::File* fileDest = nullptr, utility::String* stringDest = nullptr);
268
270 file::File* m_file;
272 Memory* m_memory;
274 String* m_str;
276 Memory::Unique m_cache;
278 mutable Memory m_buffer;
280 DataFormat m_format;
282 mutable Memory::size_type m_bufferPos;
284 Memory::size_type m_bufferSizeTip = defaultBufferSize;
285 };
286
287}
288
289#endif //ACTIVE_UTILITY_BUFFER_OUT
Class to represent a file.
Definition File.h:21
Definition IOBase.h:13
virtual bool fail() const noexcept
Definition IOBase.h:66
Definition BufferOut.h:23
virtual ~BufferOut()
Definition BufferOut.cpp:103
BufferOut()
Definition BufferOut.cpp:23
const BufferOut & operator<<(double val) const
Definition BufferOut.h:135
virtual bool confirmBuffer() const
Definition BufferOut.cpp:345
virtual bool isMyBuffer() const
Definition BufferOut.h:228
const BufferOut & operator<<(int32_t val) const
Definition BufferOut.h:109
const BufferOut & operator<<(const String &str) const
Definition BufferOut.h:97
Memory::sizeOption getPosition() const
Definition BufferOut.cpp:144
TextEncoding getEncoding() const
Definition BufferOut.h:158
void setEncoding(TextEncoding encoding)
Definition BufferOut.h:221
const BufferOut & writeBinary(const T &obj) const
Definition BufferOut.h:191
void setBuffer(void *buffer, Memory::size_type size) const
Definition BufferOut.h:239
void setDestination(file::File *destFile)
Definition BufferOut.cpp:261
BufferOut & operator=(BufferOut &&source) noexcept
Definition BufferOut.cpp:116
const BufferOut & operator<<(uint32_t val) const
Definition BufferOut.h:115
DataFormat format() const
Definition BufferOut.h:153
const BufferOut & operator<<(char val) const
Definition BufferOut.h:91
const Memory & getBuffer() const
Definition BufferOut.h:233
const BufferOut & operator<<(int64_t val) const
Definition BufferOut.h:121
const BufferOut & operator<<(uint64_t val) const
Definition BufferOut.h:128
const BufferOut & flush() const
Definition BufferOut.h:198
const BufferOut & write(const String &toWrite) const
Definition BufferOut.h:164
const BufferOut & operator<<(int16_t val) const
Definition BufferOut.h:103
Memory::sizeOption maxSize() const
Definition BufferOut.cpp:134
Class representing (and optionally allocating) memory with a specified location and size.
Definition Memory.h:18
std::unique_ptr< Memory > Unique
Unique pointer.
Definition Memory.h:32
std::optional< size_type > sizeOption
Optional memory size/position.
Definition Memory.h:28
bool owned() const
Definition Memory.h:207
std::size_t size_type
Memory size/position type.
Definition Memory.h:26
A Unicode-aware string class.
Definition String.h:51
Definition Directory.h:12
Definition Base64Transport.h:11
Definition DataFormat.h:20
TextEncoding encoding
The text encoding.
Definition DataFormat.h:61