FlatCityBuf C++ reader 0.8.0
Native C++17 reader for FlatCityBuf, the cloud-optimized CityJSON format
Loading...
Searching...
No Matches
fcb::BufferedRangeReader Class Reference

Caching decorator: over-fetches to min_req_size and serves subsequent reads inside the cached window without touching the inner reader. More...

#include <fcb/range_reader.hpp>

Inheritance diagram for fcb::BufferedRangeReader:
fcb::RangeReader

Public Member Functions

 BufferedRangeReader (std::shared_ptr< RangeReader > inner, std::uint64_t min_req_size)
 
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.
 
void read_batch (std::vector< RangeRequest > &requests) override
 Fill every request, preserving order.
 
- Public Member Functions inherited from fcb::RangeReader
virtual ~RangeReader ()=default
 

Detailed Description

Caching decorator: over-fetches to min_req_size and serves subsequent reads inside the cached window without touching the inner reader.

This is what makes HTTP traversal cheap while leaving file traversal unchanged.

OWNERSHIP: this is a PER-QUERY object. Each query (read_header, select_all, select_bbox, select_attr) constructs its own with the min_req_size appropriate to its phase, and discards it when done. Never wrap once and mutate the window size later – that makes concurrent iterators silently alter each other's buffering policy and invites a decorator wrapping a decorator. Hence there is no set_min_req_size.

Definition at line 95 of file range_reader.hpp.

Constructor & Destructor Documentation

◆ BufferedRangeReader()

fcb::BufferedRangeReader::BufferedRangeReader ( std::shared_ptr< RangeReader inner,
std::uint64_t  min_req_size 
)

Definition at line 48 of file range_reader.cpp.

Member Function Documentation

◆ read()

std::vector< std::uint8_t > fcb::BufferedRangeReader::read ( std::uint64_t  offset,
std::uint64_t  length 
)
overridevirtual

Read length bytes at offset, subject to the contract above.

Implements fcb::RangeReader.

Definition at line 82 of file range_reader.cpp.

References offset.

◆ read_batch()

void fcb::BufferedRangeReader::read_batch ( std::vector< RangeRequest > &  requests)
overridevirtual

Fill every request, preserving order.

Transports that can pipeline or multiplex should override this; the default is a sequential loop.

Reimplemented from fcb::RangeReader.

Definition at line 98 of file range_reader.cpp.

References index, fcb::RangeRequest::offset, and offset.

◆ total_size()

std::uint64_t fcb::BufferedRangeReader::total_size ( )
overridevirtual

Total byte length of the resource.

This is a REQUIRED bounds/security contract, not a convenience: every computed section offset and range request is validated against it, so a corrupt header cannot make the core read or allocate out of bounds. (It is NOT needed to size the last feature – every feature carries its own 4-byte size prefix.)

Implements fcb::RangeReader.

Definition at line 52 of file range_reader.cpp.


The documentation for this class was generated from the following files: