Mana
OutputStream.h
Go to the documentation of this file.
1 
8 #pragma once
9 #include "Platform.h"
10 #include <memory>
11 
12 namespace mana
13 {
14  class OutputStream final : Noncopyable
15  {
16  public:
17  OutputStream();
18  OutputStream(const OutputStream& other) = delete;
19  OutputStream(OutputStream&& other) noexcept;
20  OutputStream& operator=(const OutputStream& other) = delete;
21  OutputStream& operator=(OutputStream&& other) noexcept;
22  ~OutputStream() = default;
23 
24  void Load(const std::string& filename);
25  void Save(const std::string& filename) const;
26 
27  [[nodiscard]] const void* GetBuffer() const;
28  [[nodiscard]] const void* IndexAt(const size_t index) const;
29  [[nodiscard]] size_t GetAllocatedSize() const;
30  [[nodiscard]] size_t GetUsedSize() const;
31 
32  template<typename T>
33  void Push(const T value);
34  void PushString(const char* text);
35  void PushData(const void* pointer, const size_t size);
36 
37  template<typename T>
38  [[nodiscard]] T Pop();
39  void PopString(char* pointer, const size_t size);
40  void PopData(void* pointer, const size_t size);
41 
42  template<typename T>
43  [[nodiscard]] T Get();
44  [[nodiscard]] size_t GetString(char* pointer, const size_t size) const;
45  [[nodiscard]] const char* GetStringPointer() const;
46  [[nodiscard]] size_t GetStringLength() const;
47  void GetData(void* pointer, const size_t size) const;
48 
49  void Rewind();
50  void Seek(const ssize_t offset);
51 
52  [[nodiscard]] std::shared_ptr<const void> MakeShared() const;
53 
54  private:
55  void ResizeBuffer(const size_t size);
56 
57  private:
58  std::unique_ptr<uint8_t, decltype(&std::free)> mBuffer;
59  size_t mAllocatedSize = 0;
60  size_t mUsedSize = 0;
61  size_t mPointer = 0;
62  };
63 }
64 
65 #include "OutputStream.inl"
Definition: OutputStream.h:15
T Pop()
Definition: OutputStream.inl:116
const char * GetStringPointer() const
Definition: OutputStream.inl:158
T Get()
Definition: OutputStream.inl:135
OutputStream(OutputStream &&other) noexcept
void Rewind()
Definition: OutputStream.inl:182
OutputStream()
Definition: OutputStream.inl:15
void GetData(void *pointer, const size_t size) const
Definition: OutputStream.inl:174
size_t GetStringLength() const
Definition: OutputStream.inl:166
void Seek(const ssize_t offset)
Definition: OutputStream.inl:187
OutputStream & operator=(OutputStream &&other) noexcept
const void * IndexAt(const size_t index) const
Definition: OutputStream.inl:73
OutputStream & operator=(const OutputStream &other)=delete
size_t GetUsedSize() const
Definition: OutputStream.inl:87
void PopString(char *pointer, const size_t size)
Definition: OutputStream.inl:123
~OutputStream()=default
void Save(const std::string &filename) const
Definition: OutputStream.inl:57
OutputStream(const OutputStream &other)=delete
void Load(const std::string &filename)
Definition: OutputStream.inl:36
std::shared_ptr< const void > MakeShared() const
Definition: OutputStream.inl:195
void Push(const T value)
Definition: OutputStream.inl:93
size_t GetAllocatedSize() const
Definition: OutputStream.inl:82
void PopData(void *pointer, const size_t size)
Definition: OutputStream.inl:128
void PushString(const char *text)
Definition: OutputStream.inl:98
void PushData(const void *pointer, const size_t size)
Definition: OutputStream.inl:107
const void * GetBuffer() const
Definition: OutputStream.inl:68
size_t GetString(char *pointer, const size_t size) const
Definition: OutputStream.inl:142
Definition: CodeBuffer.cpp:12
Definition: Noncopyable.h:18