You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.2 KiB
70 lines
1.2 KiB
/* |
|
* Copyright (C) 2021 Riyyi |
|
* |
|
* SPDX-License-Identifier: MIT |
|
*/ |
|
|
|
#include <cassert> // assert |
|
#include <cstdint> // int32_t |
|
#include <fstream> // ifstream, ios, ofstream |
|
#include <memory> // make_unique |
|
#include <string> |
|
|
|
#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<char[]>(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
|
|
|