FlatCityBuf C++ reader 0.8.0
Native C++17 reader for FlatCityBuf, the cloud-optimized CityJSON format
Loading...
Searching...
No Matches
range_reader.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <fcb/error.hpp>
4
5#include <cstdint>
6#include <fstream>
7#include <memory>
8#include <string>
9#include <vector>
10
11namespace fcb {
12
15 std::uint64_t offset;
16 std::uint64_t length;
17 std::vector<std::uint8_t> data;
18};
19
51 public:
52 virtual ~RangeReader() = default;
53
61 virtual std::uint64_t total_size() = 0;
62
64 virtual std::vector<std::uint8_t> read(std::uint64_t offset, std::uint64_t length) = 0;
65
68 virtual void read_batch(std::vector<RangeRequest>& requests);
69};
70
73 public:
74 explicit FileRangeReader(const std::string& path);
75
76 std::uint64_t total_size() override;
77 std::vector<std::uint8_t> read(std::uint64_t offset, std::uint64_t length) override;
78
79 private:
80 std::string path_;
81 std::ifstream stream_;
82 std::uint64_t size_;
83};
84
96 public:
97 BufferedRangeReader(std::shared_ptr<RangeReader> inner, std::uint64_t min_req_size);
98
99 std::uint64_t total_size() override;
100 std::vector<std::uint8_t> read(std::uint64_t offset, std::uint64_t length) override;
101 void read_batch(std::vector<RangeRequest>& requests) override;
102
103 private:
106 bool covers(std::uint64_t offset, std::uint64_t length) const;
108 std::uint64_t clamped_fetch(std::uint64_t offset, std::uint64_t length);
109 std::vector<std::uint8_t> slice_from_buffer(std::uint64_t offset, std::uint64_t length) const;
110
111 std::shared_ptr<RangeReader> inner_;
112 std::uint64_t min_req_size_;
113 std::uint64_t buf_offset_ = 0;
114 std::vector<std::uint8_t> buf_;
115};
116
117} // namespace fcb
Caching decorator: over-fetches to min_req_size and serves subsequent reads inside the cached window ...
void read_batch(std::vector< RangeRequest > &requests) override
Fill every request, preserving order.
std::vector< std::uint8_t > read(std::uint64_t offset, std::uint64_t length) override
Read length bytes at offset, subject to the contract above.
std::uint64_t total_size() override
Total byte length of the resource.
Local-file adapter.
std::uint64_t total_size() override
Total byte length of the resource.
std::vector< std::uint8_t > read(std::uint64_t offset, std::uint64_t length) override
Read length bytes at offset, subject to the contract above.
Synchronous byte-range source.
virtual std::uint64_t total_size()=0
Total byte length of the resource.
virtual ~RangeReader()=default
virtual void read_batch(std::vector< RangeRequest > &requests)
Fill every request, preserving order.
virtual std::vector< std::uint8_t > read(std::uint64_t offset, std::uint64_t length)=0
Read length bytes at offset, subject to the contract above.
std::uint64_t offset
Definition stree.cpp:57
One range in a batched read. data is filled in place by read_batch().
std::uint64_t offset
std::vector< std::uint8_t > data
std::uint64_t length