From 4279dc28279d930e1c9eebfb4541126eb563934e Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 28 Apr 2022 23:20:22 -0400 Subject: [PATCH] Add memory buffer read/write functions --- include/memorybuffer.h | 6 +++--- src/memorybuffer.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 src/memorybuffer.cpp diff --git a/include/memorybuffer.h b/include/memorybuffer.h index 7232020..d2f1c87 100644 --- a/include/memorybuffer.h +++ b/include/memorybuffer.h @@ -5,6 +5,7 @@ #include #include #include +#include enum class Seek { Current, @@ -41,8 +42,6 @@ struct MemoryBuffer { position = end; } - - size_t size() const { return data.size(); } @@ -142,4 +141,5 @@ private: size_t position = 0; }; -void write_buffer_to_file(const MemoryBuffer& buffer, std::string_view path); \ No newline at end of file +void write_buffer_to_file(const MemoryBuffer& buffer, std::string_view path); +MemoryBuffer read_file_to_buffer(std::string_view path); \ No newline at end of file diff --git a/src/memorybuffer.cpp b/src/memorybuffer.cpp new file mode 100644 index 0000000..b5be709 --- /dev/null +++ b/src/memorybuffer.cpp @@ -0,0 +1,29 @@ +#include "memorybuffer.h" + +void write_buffer_to_file(const MemoryBuffer& buffer, std::string_view path) { + FILE* file = fopen(path.data(), "wb"); + if(file == nullptr) + throw std::runtime_error("Failed to open file for writing."); + + fwrite(buffer.data.data(), buffer.data.size(), 1, file); + + fclose(file); +} + +MemoryBuffer read_file_to_buffer(std::string_view path) { + FILE* file = fopen(path.data(), "rb"); + if(file == nullptr) + throw std::runtime_error("Failed to open file for reading."); + + fseek(file, 0, SEEK_END); + size_t size = ftell(file); + fseek(file, 0, SEEK_SET); + + MemoryBuffer buffer; + buffer.data.resize(size); + fread(buffer.data.data(), size, 1, file); + + fclose(file); + + return buffer; +} \ No newline at end of file