5#include "../StringView.h"
7#include <glm/ext/quaternion_float.hpp>
8#include <glm/ext/matrix_float4x4.hpp>
9#include <glm/ext/vector_float3.hpp>
10#include <glm/ext/vector_float4.hpp>
36 MemoryBuffer(
size_t size, MemBlockType type) : type(type) { resize(size,
false,
false); }
38 MemoryBuffer(
size_t size,
bool onlyReserve =
false, MemBlockType type = MemBlockType::Block)
45 resize(size,
false,
false);
50 : allocator(allocator), type(type)
54 : allocator(allocator), type(type)
56 resize(size,
false,
false);
63 buffer = other.buffer;
64 currentSize = other.currentSize;
65 storageSize = other.storageSize;
66 currentPos = other.currentPos;
67 allocator = other.allocator;
70 other.buffer =
nullptr;
71 other.currentSize = 0;
72 other.storageSize = 0;
74 other.type = MemBlockType::Block;
81 buffer = other.buffer;
82 currentSize = other.currentSize;
83 storageSize = other.storageSize;
84 currentPos = other.currentPos;
85 allocator = other.allocator;
88 other.buffer =
nullptr;
89 other.currentSize = 0;
90 other.storageSize = 0;
92 other.type = MemBlockType::Block;
104 void changeType(MemBlockType newType);
106 void reset(
size_t size,
Allocator * allocator);
108 bool resize(
size_t size,
bool keep =
true,
bool forceRealloc =
false);
109 bool reserve(
size_t size);
113 void clear() { resize(0,
false,
true); }
115 void *
data() {
return buffer; }
116 const void *
data()
const {
return buffer; }
118 void *
dataFromPos() {
return static_cast<uint8_t*
>(buffer) + currentPos; }
119 const void *
dataFromPos()
const {
return static_cast<const uint8_t*
>(buffer) + currentPos; }
121 size_t size()
const {
return currentSize; }
122 bool empty()
const {
return currentSize == 0; }
127 if (storageSize < (currentSize + bytes)) {
128 if (!reserve(std::max<size_t>(128, ((storageSize + bytes) * 3) / 2))) {
132 void* rv =
static_cast<uint8_t*
>(buffer) + currentSize;
133 currentSize += bytes;
141 size_t read(
void* buffer,
size_t noofbytes);
142 uint8_t
read8() {
return readImpl<uint8_t>(); }
143 uint16_t
read16() {
return readImpl<uint16_t>(); }
144 uint32_t
read32() {
return readImpl<uint32_t>(); }
145 uint64_t
read64() {
return readImpl<uint64_t>(); }
148 glm::vec2 readFloat2();
149 glm::vec3 readFloat3();
150 glm::vec4 readFloat4();
151 glm::quat readQuaternion();
152 glm::mat4 readMatrix();
153 std::string readString();
155 bool write(
const void* buffer,
size_t noofbytes);
156 bool write8(uint8_t value) {
return write(&value,
sizeof(value)); }
157 bool write16(uint16_t value) {
return write(&value,
sizeof(value)); }
158 bool write32(uint32_t value) {
return write(&value,
sizeof(value)); }
159 bool write64(uint64_t value) {
return write(&value,
sizeof(value)); }
160 bool writeFloat(
float value) {
return write(&value,
sizeof(value)); }
161 bool writeDouble(
double value) {
return write(&value,
sizeof(value)); }
162 bool writeFloat2(
const glm::vec2& value);
163 bool writeFloat3(
const glm::vec3& value);
164 bool writeFloat4(
const glm::vec4& value);
165 bool writeQuaternion(
const glm::quat& value);
166 bool writeMatrix(
const glm::mat4& value);
169 void seek(int64_t offset, Anchor from);
171 size_t pos()
const {
return currentPos; }
177 void * buffer =
nullptr;
178 size_t currentSize = 0;
179 size_t storageSize = 0;
180 size_t currentPos = 0;
182 MemBlockType type = MemBlockType::Block;
189 read(&value,
sizeof(value));
#define COGSFOUNDATION_API
Definition: FoundationBase.h:31
Base allocator implementation.
Definition: Allocator.h:30
Definition: MemoryBuffer.h:23
void clear()
Definition: MemoryBuffer.h:113
uint16_t read16()
Definition: MemoryBuffer.h:143
const Allocator * getAllocator() const
Definition: MemoryBuffer.h:139
Anchor
Definition: MemoryBuffer.h:26
~MemoryBuffer()
Definition: MemoryBuffer.h:99
T readImpl()
Definition: MemoryBuffer.h:186
bool write32(uint32_t value)
Definition: MemoryBuffer.h:158
bool empty() const
Definition: MemoryBuffer.h:122
bool writeFloat(float value)
Definition: MemoryBuffer.h:160
double readDouble()
Definition: MemoryBuffer.h:147
bool write8(uint8_t value)
Definition: MemoryBuffer.h:156
MemoryBuffer(const MemoryBuffer &)=delete
size_t unreadSize() const
Definition: MemoryBuffer.h:172
MemoryBuffer(Allocator *allocator, MemBlockType type=MemBlockType::Block)
Definition: MemoryBuffer.h:49
MemoryBuffer & operator=(const MemoryBuffer &)=delete
MemoryBuffer(MemoryBuffer &&other) noexcept
Definition: MemoryBuffer.h:61
void copy(const MemoryBuffer &other)
Definition: MemoryBuffer.cpp:123
size_t size() const
Definition: MemoryBuffer.h:121
MemoryBuffer & operator=(MemoryBuffer &&other) noexcept
Definition: MemoryBuffer.h:77
void * dataFromPos()
Definition: MemoryBuffer.h:118
bool writeDouble(double value)
Definition: MemoryBuffer.h:161
void * grow(size_t bytes)
Definition: MemoryBuffer.h:126
bool resize(size_t size, bool keep=true, bool forceRealloc=false)
Definition: MemoryBuffer.cpp:74
MemoryBuffer(size_t size, MemBlockType type)
Definition: MemoryBuffer.h:36
size_t pos() const
Definition: MemoryBuffer.h:171
MemoryBuffer(size_t size, bool onlyReserve=false, MemBlockType type=MemBlockType::Block)
Definition: MemoryBuffer.h:38
uint32_t read32()
Definition: MemoryBuffer.h:144
MemoryBuffer(size_t size, Allocator *allocator, MemBlockType type=MemBlockType::Block)
Definition: MemoryBuffer.h:53
bool reserve(size_t size)
Definition: MemoryBuffer.cpp:104
const void * dataFromPos() const
Definition: MemoryBuffer.h:119
bool write16(uint16_t value)
Definition: MemoryBuffer.h:157
MemoryBuffer(MemBlockType type)
Definition: MemoryBuffer.h:34
const void * data() const
Definition: MemoryBuffer.h:116
float readFloat()
Definition: MemoryBuffer.h:146
bool write64(uint64_t value)
Definition: MemoryBuffer.h:159
uint64_t read64()
Definition: MemoryBuffer.h:145
void * data()
Definition: MemoryBuffer.h:115
uint8_t read8()
Definition: MemoryBuffer.h:142
Definition: MemoryBuffer.h:196
TypedBuffer(Memory::Allocator *allocator, MemBlockType type=MemBlockType::Block)
Definition: MemoryBuffer.h:202
TypedBuffer(TypedBuffer &&other) noexcept=default
const T * begin() const
Definition: MemoryBuffer.h:250
bool empty() const
Definition: MemoryBuffer.h:257
TypedBuffer(size_t size, Memory::Allocator *allocator, MemBlockType type=MemBlockType::Block)
Definition: MemoryBuffer.h:204
TypedBuffer & operator=(const TypedBuffer &)=delete
void copy(const TypedBuffer &other)
Definition: MemoryBuffer.h:239
T * end()
Definition: MemoryBuffer.h:252
size_t byteSize() const
Definition: MemoryBuffer.h:259
T & grow()
Definition: MemoryBuffer.h:263
const T * end() const
Definition: MemoryBuffer.h:253
bool reserve(size_t size)
Definition: MemoryBuffer.h:214
TypedBuffer(MemBlockType type)
Definition: MemoryBuffer.h:201
TypedBuffer()
Definition: MemoryBuffer.h:200
MemoryBuffer buffer
Definition: MemoryBuffer.h:266
TypedBuffer & operator=(TypedBuffer &&) noexcept=default
T value_type
Definition: MemoryBuffer.h:198
const T & operator[](size_t i) const
Definition: MemoryBuffer.h:225
TypedBuffer(size_t size, MemBlockType type=MemBlockType::Block)
Definition: MemoryBuffer.h:203
void swap(TypedBuffer &other)
Definition: MemoryBuffer.h:234
TypedBuffer(const TypedBuffer &)=delete
T * begin()
Definition: MemoryBuffer.h:249
T & operator[](size_t i)
Definition: MemoryBuffer.h:216
const T * data() const
Definition: MemoryBuffer.h:247
bool resize(size_t size, bool keep=true, bool forceRealloc=false)
Definition: MemoryBuffer.h:212
void clear()
Definition: MemoryBuffer.h:244
size_t size() const
Definition: MemoryBuffer.h:255
T * data()
Definition: MemoryBuffer.h:246
Provides a weakly referenced view over the contents of a string.
Definition: StringView.h:24
COGSFOUNDATION_API std::string MemToHexString(const void *memory, size_t size)
Convert a memory buffer to a nicely formatted string of hex digits for debug purposes.
Definition: MemoryBuffer.cpp:11
Main Cogs namespace.
Definition: MortonCode.h:5