FlatCityBuf C++ reader 0.8.0
Native C++17 reader for FlatCityBuf, the cloud-optimized CityJSON format
Loading...
Searching...
No Matches
header.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <fcb/error.hpp>
4#include <fcb/layout.hpp>
6
7#include <array>
8#include <cstdint>
9#include <memory>
10#include <optional>
11#include <string>
12#include <vector>
13
14// The generated FlatBuffers types live in the GLOBAL namespace (every
15// `namespace FlatCityBuf;` in src/fbs/*.fbs is commented out). Forward
16// declare rather than including the generated headers, so consumers of
17// this public header never inherit them.
18struct Header;
19
20namespace fcb {
21
22namespace detail {
23struct HeaderAccess;
24}
25
27struct ColumnInfo {
28 std::uint16_t index;
29 std::string name;
30 std::uint8_t type; // ::ColumnType, as its underlying ubyte
32};
33
36 std::uint16_t column_index;
37 std::uint32_t length; // whole blob, INCLUDING its payload section
38 std::uint16_t branching_factor;
39 std::uint32_t num_unique_items; // unique KEYS, not features
40 std::uint64_t begin; // absolute byte offset in the file
41};
42
44struct FileInfo {
45 std::uint64_t features_count = 0;
46 std::uint16_t index_node_size = 0;
47 std::vector<ColumnInfo> columns;
50 std::vector<ColumnInfo> semantic_columns;
51
52 bool has_extent = false;
53 std::array<double, 6> geographical_extent{}; // minx,miny,minz,maxx,maxy,maxz
54
55 bool has_transform = false;
56 std::array<double, 3> scale{};
57 std::array<double, 3> translate{};
58
63 std::string crs;
65 std::string cityjson_version;
66
75 std::optional<std::string> identifier;
76 std::optional<std::string> title;
77 std::optional<std::string> reference_date;
78
86 std::optional<std::string> poc_contact_name;
87 std::optional<std::string> poc_contact_type;
88 std::optional<std::string> poc_role;
89 std::optional<std::string> poc_phone;
90 std::optional<std::string> poc_email;
91 std::optional<std::string> poc_website;
101};
102
109 public:
110 HeaderView() = default;
111
112 const FileInfo& info() const { return info_; }
113 const FileLayout& layout() const { return layout_; }
114 const std::vector<AttrIndexInfo>& attr_indices() const { return attr_indices_; }
115
116 private:
117 friend struct detail::HeaderAccess;
118 friend HeaderView read_header(std::shared_ptr<RangeReader> reader);
119
120 const ::Header* raw() const;
121
122 std::shared_ptr<const std::vector<std::uint8_t>> buffer_;
123 FileInfo info_;
124 FileLayout layout_{};
125 std::vector<AttrIndexInfo> attr_indices_;
126};
127
133HeaderView read_header(std::shared_ptr<RangeReader> reader);
134
135} // namespace fcb
A parsed header that OWNS its backing bytes.
Definition header.hpp:108
friend HeaderView read_header(std::shared_ptr< RangeReader > reader)
Read and validate the file preamble and header.
Definition header.cpp:199
const std::vector< AttrIndexInfo > & attr_indices() const
Definition header.hpp:114
HeaderView()=default
const FileLayout & layout() const
Definition header.hpp:113
const FileInfo & info() const
Definition header.hpp:112
HeaderView read_header(std::shared_ptr< RangeReader > reader)
Read and validate the file preamble and header.
Definition header.cpp:199
RangeReader & reader
Definition stree.cpp:162
Where one column's B+tree index lives, and how it is shaped.
Definition header.hpp:35
std::uint16_t column_index
Definition header.hpp:36
std::uint32_t num_unique_items
Definition header.hpp:39
std::uint64_t begin
Definition header.hpp:40
std::uint16_t branching_factor
Definition header.hpp:38
std::uint32_t length
Definition header.hpp:37
One attribute column's schema, copied out of the header.
Definition header.hpp:27
std::uint16_t index
Definition header.hpp:28
std::uint8_t type
Definition header.hpp:30
std::string name
Definition header.hpp:29
Everything a caller normally wants from the header, as owned values.
Definition header.hpp:44
std::optional< std::string > identifier
Schema-optional strings, held as std::optional because the Rust oracle distinguishes ABSENT from PRES...
Definition header.hpp:75
std::uint16_t index_node_size
Definition header.hpp:46
std::optional< std::string > poc_contact_name
Point of contact, all optional (header.fbs:151-161).
Definition header.hpp:86
std::optional< std::string > poc_phone
Definition header.hpp:89
std::string poc_address_thoroughfare_name
Definition header.hpp:97
std::optional< std::string > poc_contact_type
Definition header.hpp:87
std::string poc_address_thoroughfare_number
Address sub-object: each member is emitted iff NON-EMPTY, independently of the others,...
Definition header.hpp:96
std::optional< std::string > poc_website
Definition header.hpp:91
std::string poc_address_country
Definition header.hpp:100
std::uint64_t features_count
Definition header.hpp:45
std::vector< ColumnInfo > columns
Definition header.hpp:47
bool has_transform
Definition header.hpp:55
std::array< double, 3 > scale
Definition header.hpp:56
std::string crs
Derived from Header.reference_system, so it has no absent-vs-empty distinction of its own to preserve...
Definition header.hpp:63
std::optional< std::string > poc_role
Definition header.hpp:88
std::optional< std::string > poc_email
Definition header.hpp:90
std::array< double, 3 > translate
Definition header.hpp:57
bool has_extent
Definition header.hpp:52
std::string poc_address_locality
Definition header.hpp:98
std::array< double, 6 > geographical_extent
Definition header.hpp:53
std::string cityjson_version
(required) in header.fbs, so never absent in a valid file.
Definition header.hpp:65
std::string poc_address_postcode
Definition header.hpp:99
std::vector< ColumnInfo > semantic_columns
Schema for SemanticObject.attributes, which is separate from the feature attribute schema (Header....
Definition header.hpp:50
std::optional< std::string > title
Definition header.hpp:76
std::optional< std::string > reference_date
Definition header.hpp:77
Byte offsets of each section.
Definition layout.hpp:32
Internal gateway to HeaderView's generated FlatBuffers pointer.