From 418b45350721a070d43bfa698f7702f531d58d2e Mon Sep 17 00:00:00 2001 From: Riyyi Date: Sat, 25 Sep 2021 16:55:37 +0200 Subject: [PATCH] Util: Add file class --- src/util/file.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++ src/util/file.h | 35 ++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/util/file.cpp create mode 100644 src/util/file.h diff --git a/src/util/file.cpp b/src/util/file.cpp new file mode 100644 index 0000000..eca16b5 --- /dev/null +++ b/src/util/file.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2021 Riyyi + * + * SPDX-License-Identifier: MIT + */ + +#include // assert +#include // int32_t +#include // ifstream, ios, ofstream +#include // make_unique +#include + +#include "util/file.h" + +namespace Util { + +File::File(const std::string& path) + : m_path(path) +{ + // Create input stream object and open file + std::ifstream file(path, std::ios::in); + assert(file.is_open()); + + // Get length of the file + file.seekg(0, std::ios::end); + int32_t size = file.tellg(); + file.seekg(0, std::ios::beg); + assert(size != -1); + + // Allocate memory filled with zeros + auto buffer = std::make_unique(size); + + // Fill buffer with file contents + file.read(buffer.get(), size); + file.close(); + + m_data = std::string(buffer.get(), size); +} + +File::~File() +{ +} + +// ----------------------------------------- + +void File::clear() +{ + m_data.clear(); +} + +File& File::append(std::string data) +{ + m_data.append(data); + + return *this; +} + +File& File::flush() +{ + // Create output stream object and open file + std::ofstream file(m_path, std::ios::out | std::ios::trunc); + assert(file.is_open()); + + // Write data to disk + file.write(m_data.c_str(), m_data.size()); + + return *this; +} + +} // namespace Util diff --git a/src/util/file.h b/src/util/file.h new file mode 100644 index 0000000..2672294 --- /dev/null +++ b/src/util/file.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2021 Riyyi + * + * SPDX-License-Identifier: MIT + */ + +#ifndef FILE_H +#define FILE_H + +#include + +namespace Util { + +class File { +public: + File(const std::string& path); + virtual ~File(); + + void clear(); + File& append(std::string data); + File& flush(); + + const char* c_str() const { return m_data.c_str(); } + const std::string& data() const { return m_data; } + const std::string& path() const { return m_path; } + +private: + std::string m_path; + std::string m_data; +}; + +} // namespace Util + + +#endif // FILE_H