diff --git a/src/ruc/file.cpp b/src/ruc/file.cpp index ce52859..e2b2d32 100644 --- a/src/ruc/file.cpp +++ b/src/ruc/file.cpp @@ -9,24 +9,25 @@ #include // ifstream, ios, ofstream #include // make_unique #include +#include #include "ruc/file.h" #include "ruc/meta/assert.h" namespace ruc { -File::File(const std::string& path) +File::File(std::string_view path) : m_path(path) { // Create input stream object and open file - std::ifstream file(path, std::ios::in); + std::ifstream file(path.data(), std::ios::in); VERIFY(file.is_open(), "failed to open file: '{}'", path); // Get length of the file file.seekg(0, std::ios::end); int32_t size = file.tellg(); file.seekg(0, std::ios::beg); - VERIFY(size != -1, "failed to read file length: '{}', path"); + VERIFY(size != -1, "failed to read file length: '{}'", path); // Allocate memory filled with zeros auto buffer = std::make_unique(size); @@ -44,10 +45,10 @@ File::~File() // ----------------------------------------- -File File::create(const std::string& path) +File File::create(std::string_view path) { if (!std::filesystem::exists(path)) { - std::ofstream { path }; + std::ofstream { path.data() }; } return File(path); @@ -60,14 +61,14 @@ void File::clear() m_data.clear(); } -File& File::append(const std::string& data) +File& File::append(std::string_view data) { m_data.append(data); return *this; } -File& File::replace(size_t index, size_t length, const std::string& data) +File& File::replace(size_t index, size_t length, std::string_view data) { m_data.replace(index, length, data); @@ -77,7 +78,7 @@ File& File::replace(size_t index, size_t length, const std::string& data) File& File::flush() { // Create output stream object and open file - std::ofstream file(m_path, std::ios::out | std::ios::trunc); + std::ofstream file(m_path.data(), std::ios::out | std::ios::trunc); VERIFY(file.is_open(), "failed to open file: '{}'", m_path); // Write data to disk diff --git a/src/ruc/file.h b/src/ruc/file.h index 6b2e256..022ab74 100644 --- a/src/ruc/file.h +++ b/src/ruc/file.h @@ -7,27 +7,28 @@ #pragma once #include +#include namespace ruc { class File { public: - File(const std::string& path); + File(std::string_view path); virtual ~File(); - static File create(const std::string& path); + static File create(std::string_view path); void clear(); - File& append(const std::string& data); - File& replace(size_t index, size_t length, const std::string& data); + File& append(std::string_view data); + File& replace(size_t index, size_t length, std::string_view 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; } + std::string_view path() const { return m_path; } private: - std::string m_path; + std::string_view m_path; std::string m_data; };