11#include "enrollment/Export.h"
28 class BinaryFileAccess
38 virtual std::vector<uint8_t>
ReadAll(
const std::string& path) = 0;
46 virtual void WriteAll(
const std::string& path,
const std::vector<uint8_t>& content) = 0;
48 BinaryFileAccess() =
default;
49 virtual ~BinaryFileAccess() =
default;
50 BinaryFileAccess(
const BinaryFileAccess&) =
delete;
51 BinaryFileAccess(BinaryFileAccess&&) =
delete;
52 BinaryFileAccess& operator=(
const BinaryFileAccess&) =
delete;
53 BinaryFileAccess& operator=(BinaryFileAccess&&) =
delete;
60 class FilesystemAccess :
public BinaryFileAccess
63 static std::shared_ptr<FilesystemAccess> Create()
65 return std::shared_ptr<FilesystemAccess>(
new FilesystemAccess());
74 std::vector<uint8_t>
ReadAll(
const std::string& path)
final
78 std::ifstream file(path, std::ios::binary | std::ios::in);
79 file.exceptions(~std::ifstream::goodbit);
80 return { (std::istreambuf_iterator<char>(file)), (std::istreambuf_iterator<char>()) };
84 std::string errorMessage = path +
": " + std::error_code(errno, std::generic_category()).message();
96 void WriteAll(
const std::string& path,
const std::vector<uint8_t>& content)
final
100 std::ofstream file(path, std::ios::out | std::ios::binary);
101 file.exceptions(~std::ofstream::goodbit);
102 const std::ostream_iterator<uint8_t> outputIterator(file);
103 std::copy(content.begin(), content.end(), outputIterator);
107 std::string errorMessage = path +
": " + std::error_code(errno, std::generic_category()).message();
128 class GlobalFileAccess
135 static std::shared_ptr<BinaryFileAccess>
Get()
137 return GlobalFileAccess::Instance().GetInternal();
145 static void Set(
const std::shared_ptr<BinaryFileAccess>& fileAccess)
147 if (fileAccess ==
nullptr)
152 GlobalFileAccess::Instance().SetInternal(fileAccess);
163 std::shared_ptr<BinaryFileAccess> fa;
166 std::shared_ptr<BinaryFileAccess> GetInternal()
168 const std::scoped_lock lock(faMux);
172 static GlobalFileAccess& Instance()
174 static GlobalFileAccess e(FilesystemAccess::Create());
178 void SetInternal(
const std::shared_ptr<BinaryFileAccess>& fileAccess)
180 if (fileAccess !=
nullptr)
182 UpdateFileAccess(fileAccess);
186 UpdateFileAccess(FilesystemAccess::Create());
190 explicit GlobalFileAccess(std::shared_ptr<BinaryFileAccess> e)
195 void UpdateFileAccess(std::shared_ptr<BinaryFileAccess> fileAccess)
197 const std::scoped_lock lock(faMux);
198 fa = std::move(fileAccess);
202 class BinaryFile final
212 static std::vector<uint8_t> ReadAll(
const std::string& path)
224 static void WriteAll(
const std::string& path,
const std::vector<uint8_t>& content)
229 BinaryFile() =
default;
230 BinaryFile(
const BinaryFile&) =
delete;
231 BinaryFile(BinaryFile&&) =
delete;
232 BinaryFile& operator=(
const BinaryFile&) =
delete;
233 BinaryFile& operator=(BinaryFile&&) =
delete;
234 virtual ~BinaryFile() =
default;
virtual std::vector< uint8_t > ReadAll(const std::string &path)=0
Reads whole file as binary to memory.
virtual void WriteAll(const std::string &path, const std::vector< uint8_t > &content)=0
Writes whole given memory to file as binary.
Exception for file processing.
Definition FileException.h:22
Standard filesystem implementation.
Definition BinaryFile.h:60
void WriteAll(const std::string &path, const std::vector< uint8_t > &content) final
Writes whole given memory to file as binary.
Definition BinaryFile.h:95
std::vector< uint8_t > ReadAll(const std::string &path) final
Reads whole file as binary to memory.
Definition BinaryFile.h:73
Holds instance of BinaryFileAccess.
Definition BinaryFile.h:128
static void Set(const std::shared_ptr< BinaryFileAccess > &fileAccess)
Sets new global BinaryFileAccess.
Definition BinaryFile.h:144
static std::shared_ptr< BinaryFileAccess > Get()
Provides current BinaryFileAccess.
Definition BinaryFile.h:134
Null argument is not allowed.
Definition EnrollmentException.h:156