Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
BinaryFileAdjacency.hpp
Go to the documentation of this file.
1#pragma once
2#include <fstream>
3#include <string_view>
4#include <filesystem>
5#include <vector>
6#include <cstdint>
9#include "BinaryAdjacency.hpp"
10
11namespace fishnet::graph{
12
13template<typename BaseContainer> requires AdjacencyContainer<BaseContainer,typename BaseContainer::node_type>
14class BinaryFileAdjacency : public BinaryAdjacency<BaseContainer>{
15private:
16 using N = typename BaseContainer::node_type;
18 std::filesystem::path filePath;
21
22 void read() {
23 std::ifstream file(filePath, std::ios::binary);
24 if(not file.is_open() || std::filesystem::is_empty(filePath)){
25 return;
26 }
27
28 // Read the binary data
29 std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
30 file.close();
31 // Load the data into the graph
32 this->load(data);
33 }
34
35 void write() const noexcept {
36 std::ofstream file(filePath, std::ios::binary);
37 if(not file.is_open()){
38 return;
39 }
40 auto data = this->get();
41 file.write(reinterpret_cast<const char*>(data.data()), data.size());
42 file.close();
43 }
44
45public:
46
47 BinaryFileAdjacency(BaseContainer && baseContainer, const std::filesystem::path & filePath,
48 util::UnaryFunction<N, std::vector<uint8_t>> auto&& toBinary,
49 util::UnaryFunction<std::vector<uint8_t>, N> auto&& fromBinary)
50 : BinaryAdjacency<BaseContainer>(std::move(baseContainer),std::forward<decltype(toBinary)>(toBinary),std::forward<decltype(fromBinary)>(fromBinary)),
51 filePath(fishnet::util::PathHelper::absoluteCanonical(filePath))
52 {
53 if(not this->filePath.has_extension() or this->filePath.extension() != ".bin"){
54 throw std::invalid_argument("File path must have .bin extension");
55 }
56 read();
57 }
58
60 write();
61 }
62};
63}
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
STL namespace.