diff --git a/lib/glacier/buffer/byte_buffer.h b/lib/glacier/buffer/byte_buffer.h new file mode 100644 index 0000000..f627339 --- /dev/null +++ b/lib/glacier/buffer/byte_buffer.h @@ -0,0 +1,42 @@ +#pragma once + +#include + +#include "glacier/string/string.h" + +namespace glcr { + +class ByteBuffer { + public: + ByteBuffer(uint64_t size) : buffer_(new uint8_t[size]) {} + ByteBuffer(const ByteBuffer&) = delete; + ByteBuffer(ByteBuffer&&) = delete; + + ~ByteBuffer() { delete[] buffer_; } + + template + void WriteAt(uint64_t offset, const T& object) { + // FIXME: Add bounds check here. + *reinterpret_cast(buffer_ + offset) = object; + } + + void WriteStringAt(uint64_t offset, const String& string) { + for (uint64_t i = 0; i < string.length(); i++) { + buffer_[offset + i] = string[i]; + } + } + + template + const T& At(uint64_t offset) const { + return *reinterpret_cast(buffer_ + offset); + } + + String StringAt(uint64_t offset, uint64_t length) const { + return String(reinterpret_cast(buffer_ + offset), length); + } + + // private: + uint8_t* buffer_; +}; + +} // namespace glcr diff --git a/lib/glacier/buffer/cap_buffer.h b/lib/glacier/buffer/cap_buffer.h new file mode 100644 index 0000000..10dca51 --- /dev/null +++ b/lib/glacier/buffer/cap_buffer.h @@ -0,0 +1,24 @@ +#pragma once + +#include + +namespace glcr { + +// TODO: Hold cap type instead of uint64_t +class CapBuffer { + public: + CapBuffer(uint64_t size) : buffer_(new uint64_t[size]) {} + CapBuffer(const CapBuffer&) = delete; + CapBuffer(CapBuffer&&) = delete; + + ~CapBuffer() { delete[] buffer_; } + + uint64_t At(uint64_t offset) const { return buffer_[offset]; } + + void WriteAt(uint64_t offset, uint64_t cap) { buffer_[offset] = cap; } + + private: + uint64_t* buffer_; +}; + +} // namespace glcr diff --git a/lib/mammoth/src/new.cpp b/lib/mammoth/src/new.cpp index fa06e2e..e63f9a4 100644 --- a/lib/mammoth/src/new.cpp +++ b/lib/mammoth/src/new.cpp @@ -5,4 +5,5 @@ [[nodiscard]] void* operator new[](uint64_t size) { return malloc(size); } void operator delete(void*, uint64_t) {} +void operator delete[](void*) {} void operator delete[](void*, uint64_t) {}