1
0
Fork 0
Univerxel/src/core/data/file.hpp

41 lines
1.1 KiB
C++

#pragma once
#include <fstream>
#include "../data/mem.hpp"
#include "../utils/logger.hpp"
namespace data {
class file_content: public std::vector<char> {
public:
// Read first
file_content(const std::vector<std::string>& paths, data::out_view prefix = data::out_view(nullptr, 0)):
std::vector<char>(), prefix_size(prefix.size())
{
std::ifstream is = [&]() {
for(auto& path: paths) {
std::ifstream is(path, std::ios::in | std::ios::binary | std::ios::ate);
if(is.good()) {
return is;
}
is.close();
}
FATAL("File not found " << paths.back());
}();
const auto end = is.tellg();
is.seekg(0, std::ios::beg);
resize(end - is.tellg() + prefix_size);
memcpy(data(), prefix.ptr, prefix_size);
is.read(data() + prefix_size, size());
is.close();
}
size_t prefix_size;
/// Data after prefix
data::out_view content() const {
return data::out_view((const uint8_t*)data() + prefix_size, size() - prefix_size);
}
};
}