FlatCityBuf C++ reader 0.8.0
Native C++17 reader for FlatCityBuf, the cloud-optimized CityJSON format
Loading...
Searching...
No Matches
key.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <fcb/error.hpp>
4#include <fcb/span.hpp>
5
6#include <cstdint>
7#include <string>
8#include <vector>
9
10namespace fcb {
11
14enum class KeyKind {
15 Int8,
16 UInt8,
17 Int16,
18 UInt16,
19 Int32,
20 UInt32,
21 Int64,
22 UInt64,
23 Float32,
24 Float64,
25 Bool,
30};
31
34
40class KeyValue {
41 public:
42 KeyValue() = default;
43
44 static KeyValue from_i8(std::int8_t v);
45 static KeyValue from_u8(std::uint8_t v);
46 static KeyValue from_i16(std::int16_t v);
47 static KeyValue from_u16(std::uint16_t v);
48 static KeyValue from_i32(std::int32_t v);
49 static KeyValue from_u32(std::uint32_t v);
50 static KeyValue from_i64(std::int64_t v);
51 static KeyValue from_u64(std::uint64_t v);
52 static KeyValue from_f32(float v);
53 static KeyValue from_f64(double v);
54 static KeyValue from_bool(bool v);
55 static KeyValue from_datetime(std::int64_t seconds, std::uint32_t nanos);
56 static KeyValue from_string(KeyKind kind, const std::string& v);
57
58 KeyKind kind() const { return kind_; }
59
62 const std::string& original_string() const { return str_; }
63
64 private:
65 friend std::vector<std::uint8_t> encode_key(const KeyValue&);
67 friend int compare_keys(const KeyValue&, const KeyValue&);
68
69 KeyKind kind_ = KeyKind::Int32;
70 std::int64_t i_ = 0; // signed integers, and DateTime seconds
71 std::uint64_t u_ = 0; // unsigned integers, bool, and DateTime nanos
72 double f_ = 0.0; // Float32/Float64
73 std::string str_; // fixed-string kinds, untruncated
74};
75
76std::vector<std::uint8_t> encode_key(const KeyValue& v);
78
81int compare_keys(const KeyValue& a, const KeyValue& b);
82
89KeyValue key_min(KeyKind kind);
90KeyValue key_max(KeyKind kind);
91
98KeyKind key_kind_for_column(std::uint8_t column_type);
99
100} // namespace fcb
A decoded index key.
Definition key.hpp:40
static KeyValue from_datetime(std::int64_t seconds, std::uint32_t nanos)
Definition key.cpp:129
static KeyValue from_i64(std::int64_t v)
Definition key.cpp:104
static KeyValue from_i8(std::int8_t v)
Definition key.cpp:98
static KeyValue from_u32(std::uint32_t v)
Definition key.cpp:103
static KeyValue from_i16(std::int16_t v)
Definition key.cpp:100
KeyValue()=default
friend KeyValue decode_key(KeyKind, bytes_view)
Definition key.cpp:219
static KeyValue from_f32(float v)
Definition key.cpp:108
const std::string & original_string() const
The original, untruncated string this key was built from.
Definition key.hpp:62
KeyKind kind() const
Definition key.hpp:58
static KeyValue from_i32(std::int32_t v)
Definition key.cpp:102
static KeyValue from_u16(std::uint16_t v)
Definition key.cpp:101
static KeyValue from_u8(std::uint8_t v)
Definition key.cpp:99
friend std::vector< std::uint8_t > encode_key(const KeyValue &)
Definition key.cpp:147
static KeyValue from_f64(double v)
Definition key.cpp:115
static KeyValue from_string(KeyKind kind, const std::string &v)
Definition key.cpp:137
static KeyValue from_u64(std::uint64_t v)
Definition key.cpp:105
static KeyValue from_bool(bool v)
Definition key.cpp:122
friend int compare_keys(const KeyValue &, const KeyValue &)
Three-way comparison.
Definition key.cpp:272
Minimal C++17 stand-in for std::span: a non-owning view over contiguous memory.
Definition span.hpp:13
span< const std::uint8_t > bytes_view
The workhorse alias: a read-only view over bytes.
Definition span.hpp:43
std::vector< std::uint8_t > encode_key(const KeyValue &v)
Definition key.cpp:147
KeyKind key_kind_for_column(std::uint8_t column_type)
Column type to key kind, following what the WRITER emits.
Definition key.cpp:387
KeyValue key_max(KeyKind kind)
Definition key.cpp:350
int compare_keys(const KeyValue &a, const KeyValue &b)
Three-way comparison.
Definition key.cpp:272
KeyKind
The concrete key types the B+tree index can hold.
Definition key.hpp:14
std::size_t key_serialized_size(KeyKind kind)
Serialized width in bytes. DateTime is 12: i64 seconds + u32 nanos.
Definition key.cpp:61
KeyValue decode_key(KeyKind kind, bytes_view b)
Definition key.cpp:219
KeyValue key_min(KeyKind kind)
Sentinels used to lower open-ended range queries.
Definition key.cpp:313
KeyKind kind
Definition stree.cpp:166
std::uint32_t nanos
Definition attribute.cpp:30
std::int64_t seconds
Definition attribute.cpp:29