13template<
typename BaseContainer>
requires AdjacencyContainer<BaseContainer,typename BaseContainer::node_type>
16 using N =
typename BaseContainer::node_type;
18 std::filesystem::path filePath;
23 std::ifstream file(filePath, std::ios::binary);
24 if(not file.is_open() || std::filesystem::is_empty(filePath)){
29 std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
35 void write()
const noexcept {
36 std::ofstream file(filePath, std::ios::binary);
37 if(not file.is_open()){
40 auto data = this->
get();
41 file.write(
reinterpret_cast<const char*
>(data.data()), data.size());
50 :
BinaryAdjacency<BaseContainer>(
std::move(baseContainer),
std::forward<decltype(toBinary)>(toBinary),
std::forward<decltype(fromBinary)>(fromBinary)),
51 filePath(
fishnet::util::PathHelper::absoluteCanonical(filePath))
53 if(not this->filePath.has_extension() or this->filePath.extension() !=
".bin"){
54 throw std::invalid_argument(
"File path must have .bin extension");
Definition BinaryAdjacency.hpp:12
void load(const std::vector< uint8_t > &data)
Definition BinaryAdjacency.hpp:79
std::vector< uint8_t > get() const noexcept
Definition BinaryAdjacency.hpp:25
Definition BinaryFileAdjacency.hpp:14
~BinaryFileAdjacency()
Definition BinaryFileAdjacency.hpp:59
BinaryFileAdjacency(BaseContainer &&baseContainer, const std::filesystem::path &filePath, util::UnaryFunction< N, std::vector< uint8_t > > auto &&toBinary, util::UnaryFunction< std::vector< uint8_t >, N > auto &&fromBinary)
Definition BinaryFileAdjacency.hpp:47
Definition FunctionalConcepts.hpp:9
Definition AdjacencyContainer.hpp:4
std::function< R(const T &)> UnaryFunction_t
Definition FunctionalConcepts.hpp:12
Definition BFSClustering.hpp:5