From 44d085f265583f0e3cbef294bbe2c8e300aaa452 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Wed, 3 Apr 2024 17:47:07 +0300 Subject: [w6] Added exercise descriptions and solutions to 1-9 --- week06/Exercise08.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 week06/Exercise08.cpp (limited to 'week06/Exercise08.cpp') diff --git a/week06/Exercise08.cpp b/week06/Exercise08.cpp new file mode 100644 index 0000000..bcd4339 --- /dev/null +++ b/week06/Exercise08.cpp @@ -0,0 +1,53 @@ +#include + +struct FileBuffer { +private: + char* data; + size_t size; + + void free() { + delete[] data; + } + void copyFrom(const FileBuffer& other) { + this->size = other.size; + this->data = new char[size]; + for (int i = 0; i < size; i++) { + this->data[i] = other.data[i]; + } + } + +public: + FileBuffer(const char* fileName) { + std::ifstream file(fileName); + if (!file.is_open()) { + throw "Couldn't open file!"; + } + + file.seekg(0, std::ios::end); + size = file.tellg(); + data = new char[size]; + + file.seekg(0, std::ios::beg); + file.read(data, size); + + file.close(); + } + + FileBuffer() { + data = nullptr; + size = 0; + } + ~FileBuffer() { + free(); + } + FileBuffer(const FileBuffer& other) { + copyFrom(other); + } + FileBuffer& operator=(const FileBuffer& other) { + if (this != &other) { + free(); + copyFrom(other); + } + return *this; + } +}; -- cgit v1.2.3