forked from Green-Sky/tomato
move file stack creation to separate file, removing some scope
This commit is contained in:
parent
31bb0d3e61
commit
268cbe137e
@ -13,6 +13,8 @@ add_library(fragment_store
|
||||
./fragment_store/meta_components.hpp
|
||||
./fragment_store/meta_components_id.inl
|
||||
./fragment_store/serializer.hpp
|
||||
./fragment_store/file2_stack.hpp
|
||||
./fragment_store/file2_stack.cpp
|
||||
./fragment_store/fragment_store.hpp
|
||||
./fragment_store/fragment_store.cpp
|
||||
|
||||
|
93
src/fragment_store/file2_stack.cpp
Normal file
93
src/fragment_store/file2_stack.cpp
Normal file
@ -0,0 +1,93 @@
|
||||
#include "./file2_stack.hpp"
|
||||
|
||||
#include <solanaceae/file/file2_std.hpp>
|
||||
#include "./file2_zstd.hpp"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
// add enc and comp file layers
|
||||
// assumes a file is already in the stack
|
||||
bool buildStackRead(std::stack<std::unique_ptr<File2I>>& file_stack, Encryption encryption, Compression compression) {
|
||||
assert(!file_stack.empty());
|
||||
|
||||
// TODO: decrypt here
|
||||
assert(encryption == Encryption::NONE);
|
||||
|
||||
// add layer based on enum
|
||||
if (compression == Compression::ZSTD) {
|
||||
file_stack.push(std::make_unique<File2ZSTDR>(*file_stack.top().get()));
|
||||
} else {
|
||||
// TODO: make error instead
|
||||
assert(compression == Compression::NONE);
|
||||
}
|
||||
|
||||
if (!file_stack.top()->isGood()) {
|
||||
std::cerr << "FS error: file failed to add " << (int)compression << " decompression layer\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// do i need this?
|
||||
std::stack<std::unique_ptr<File2I>> buildFileStackRead(std::string_view file_path, Encryption encryption, Compression compression) {
|
||||
std::stack<std::unique_ptr<File2I>> file_stack;
|
||||
file_stack.push(std::make_unique<File2RFile>(file_path));
|
||||
|
||||
if (!file_stack.top()->isGood()) {
|
||||
std::cerr << "FS error: opening file for reading '" << file_path << "'\n";
|
||||
return {};
|
||||
}
|
||||
|
||||
if (!buildStackRead(file_stack, encryption, compression)) {
|
||||
std::cerr << "FS error: file failed to add layers for '" << file_path << "'\n";
|
||||
return {};
|
||||
}
|
||||
|
||||
return file_stack;
|
||||
}
|
||||
|
||||
// add enc and comp file layers
|
||||
// assumes a file is already in the stack
|
||||
bool buildStackWrite(std::stack<std::unique_ptr<File2I>>& file_stack, Encryption encryption, Compression compression) {
|
||||
assert(!file_stack.empty());
|
||||
|
||||
// TODO: encrypt here
|
||||
assert(encryption == Encryption::NONE);
|
||||
|
||||
// add layer based on enum
|
||||
if (compression == Compression::ZSTD) {
|
||||
file_stack.push(std::make_unique<File2ZSTDW>(*file_stack.top().get()));
|
||||
} else {
|
||||
// TODO: make error instead
|
||||
assert(compression == Compression::NONE);
|
||||
}
|
||||
|
||||
if (!file_stack.top()->isGood()) {
|
||||
std::cerr << "FS error: file failed to add " << (int)compression << " compression layer\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// do i need this?
|
||||
std::stack<std::unique_ptr<File2I>> buildFileStackWrite(std::string_view file_path, Encryption encryption, Compression compression) {
|
||||
std::stack<std::unique_ptr<File2I>> file_stack;
|
||||
file_stack.push(std::make_unique<File2WFile>(file_path));
|
||||
|
||||
if (!file_stack.top()->isGood()) {
|
||||
std::cerr << "FS error: opening file for writing '" << file_path << "'\n";
|
||||
return {};
|
||||
}
|
||||
|
||||
if (!buildStackWrite(file_stack, encryption, compression)) {
|
||||
std::cerr << "FS error: file failed to add layers for '" << file_path << "'\n";
|
||||
return {};
|
||||
}
|
||||
|
||||
return file_stack;
|
||||
}
|
||||
|
23
src/fragment_store/file2_stack.hpp
Normal file
23
src/fragment_store/file2_stack.hpp
Normal file
@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include "./types.hpp"
|
||||
|
||||
#include <solanaceae/file/file2.hpp>
|
||||
|
||||
#include <stack>
|
||||
#include <memory>
|
||||
#include <string_view>
|
||||
|
||||
// add enc and comp file layers
|
||||
// assumes a file is already in the stack
|
||||
[[nodiscard]] bool buildStackRead(std::stack<std::unique_ptr<File2I>>& file_stack, Encryption encryption, Compression compression);
|
||||
|
||||
// do i need this?
|
||||
[[nodiscard]] std::stack<std::unique_ptr<File2I>> buildFileStackRead(std::string_view file_path, Encryption encryption, Compression compression);
|
||||
|
||||
// add enc and comp file layers
|
||||
// assumes a file is already in the stack
|
||||
[[nodiscard]] bool buildStackWrite(std::stack<std::unique_ptr<File2I>>& file_stack, Encryption encryption, Compression compression);
|
||||
|
||||
// do i need this?
|
||||
[[nodiscard]] std::stack<std::unique_ptr<File2I>> buildFileStackWrite(std::string_view file_path, Encryption encryption, Compression compression);
|
@ -10,7 +10,8 @@
|
||||
|
||||
#include <solanaceae/file/file2_std.hpp>
|
||||
#include <solanaceae/file/file2_mem.hpp>
|
||||
#include "./file2_zstd.hpp"
|
||||
|
||||
#include "./file2_stack.hpp"
|
||||
|
||||
#include <zstd.h>
|
||||
|
||||
@ -51,92 +52,6 @@ static ByteSpan spanFromRead(const std::variant<ByteSpan, std::vector<uint8_t>>&
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: these stacks are file specific
|
||||
|
||||
// add enc and comp file layers
|
||||
// assumes a file is already in the stack
|
||||
static bool buildStackRead(std::stack<std::unique_ptr<File2I>>& file_stack, Encryption encryption, Compression compression) {
|
||||
assert(!file_stack.empty());
|
||||
|
||||
// TODO: decrypt here
|
||||
assert(encryption == Encryption::NONE);
|
||||
|
||||
// add layer based on enum
|
||||
if (compression == Compression::ZSTD) {
|
||||
file_stack.push(std::make_unique<File2ZSTDR>(*file_stack.top().get()));
|
||||
} else {
|
||||
// TODO: make error instead
|
||||
assert(compression == Compression::NONE);
|
||||
}
|
||||
|
||||
if (!file_stack.top()->isGood()) {
|
||||
std::cerr << "FS error: file failed to add " << (int)compression << " decompression layer\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// do i need this?
|
||||
static std::stack<std::unique_ptr<File2I>> buildFileStackRead(std::string_view file_path, Encryption encryption, Compression compression) {
|
||||
std::stack<std::unique_ptr<File2I>> file_stack;
|
||||
file_stack.push(std::make_unique<File2RFile>(file_path));
|
||||
|
||||
if (!file_stack.top()->isGood()) {
|
||||
std::cerr << "FS error: opening file for reading '" << file_path << "'\n";
|
||||
return {};
|
||||
}
|
||||
|
||||
if (!buildStackRead(file_stack, encryption, compression)) {
|
||||
std::cerr << "FS error: file failed to add layers for '" << file_path << "'\n";
|
||||
return {};
|
||||
}
|
||||
|
||||
return file_stack;
|
||||
}
|
||||
|
||||
// add enc and comp file layers
|
||||
// assumes a file is already in the stack
|
||||
static bool buildStackWrite(std::stack<std::unique_ptr<File2I>>& file_stack, Encryption encryption, Compression compression) {
|
||||
assert(!file_stack.empty());
|
||||
|
||||
// TODO: encrypt here
|
||||
assert(encryption == Encryption::NONE);
|
||||
|
||||
// add layer based on enum
|
||||
if (compression == Compression::ZSTD) {
|
||||
file_stack.push(std::make_unique<File2ZSTDW>(*file_stack.top().get()));
|
||||
} else {
|
||||
// TODO: make error instead
|
||||
assert(compression == Compression::NONE);
|
||||
}
|
||||
|
||||
if (!file_stack.top()->isGood()) {
|
||||
std::cerr << "FS error: file failed to add " << (int)compression << " compression layer\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// do i need this?
|
||||
static std::stack<std::unique_ptr<File2I>> buildFileStackWrite(std::string_view file_path, Encryption encryption, Compression compression) {
|
||||
std::stack<std::unique_ptr<File2I>> file_stack;
|
||||
file_stack.push(std::make_unique<File2WFile>(file_path));
|
||||
|
||||
if (!file_stack.top()->isGood()) {
|
||||
std::cerr << "FS error: opening file for writing '" << file_path << "'\n";
|
||||
return {};
|
||||
}
|
||||
|
||||
if (!buildStackWrite(file_stack, encryption, compression)) {
|
||||
std::cerr << "FS error: file failed to add layers for '" << file_path << "'\n";
|
||||
return {};
|
||||
}
|
||||
|
||||
return file_stack;
|
||||
}
|
||||
|
||||
FragmentStore::FragmentStore(void) {
|
||||
registerSerializers();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user