Rerun C++ SDK
Loading...
Searching...
No Matches
component_descriptor.hpp
1#pragma once
2
3#include <cstdint>
4#include <optional>
5#include <string_view>
6
7namespace rerun {
8 /// See `ComponentDescriptor::hashed`.
9 using ComponentDescriptorHash = uint64_t;
10
11 /// A `ComponentDescriptor` fully describes the semantics of a column of data.
12 ///
13 /// Every component is uniquely identified by its `ComponentDescriptor`.
15 /// Optional name of the `Archetype` associated with this data.
16 ///
17 /// `None` if the data wasn't logged through an archetype.
18 ///
19 /// Example: `rerun.archetypes.Points3D`.
20 std::optional<std::string_view> archetype_name;
21
22 /// Optional name of the field within `Archetype` associated with this data.
23 ///
24 /// `None` if the data wasn't logged through an archetype.
25 ///
26 /// Example: `positions`.
27 std::optional<std::string_view> archetype_field_name;
28
29 /// Semantic name associated with this data.
30 ///
31 /// This is fully implied by `archetype_name` and `archetype_field`, but
32 /// included for semantic convenience.
33 ///
34 /// Example: `rerun.components.Position3D`.
35 std::string_view component_name;
36
37 constexpr ComponentDescriptor(
38 std::optional<std::string_view> archetype_name_,
39 std::optional<std::string_view> archetype_field_name_, std::string_view component_name_
40 )
41 : archetype_name(archetype_name_),
42 archetype_field_name(archetype_field_name_),
43 component_name(component_name_) {}
44
45 constexpr ComponentDescriptor(
46 const char* archetype_name_, const char* archetype_field_name_,
47 const char* component_name_
48 )
49 : archetype_name(archetype_name_),
50 archetype_field_name(archetype_field_name_),
51 component_name(component_name_) {}
52
53 constexpr ComponentDescriptor(std::string_view component_name_)
54 : component_name(component_name_) {}
55
56 constexpr ComponentDescriptor(const char* component_name_)
57 : component_name(component_name_) {}
58
59 ComponentDescriptorHash hashed() const {
60 std::size_t archetype_name_h =
61 std::hash<std::optional<std::string_view>>{}(this->archetype_name);
62 std::size_t component_name_h = std::hash<std::string_view>{}(this->component_name);
63 std::size_t archetype_field_name_h =
64 std::hash<std::optional<std::string_view>>{}(this->archetype_field_name);
65 return archetype_name_h ^ component_name_h ^ archetype_field_name_h;
66 }
67
68 /// Unconditionally sets `archetype_name` to the given one.
69 ComponentDescriptor with_archetype_name(std::optional<std::string_view> archetype_name_
70 ) const {
71 ComponentDescriptor descriptor = *this;
72 descriptor.archetype_name = archetype_name_;
73 return descriptor;
74 }
75
76 /// Unconditionally sets `archetype_name` to the given one.
77 ComponentDescriptor with_archetype_name(const char* archetype_name_) const {
78 ComponentDescriptor descriptor = *this;
79 descriptor.archetype_name = archetype_name_;
80 return descriptor;
81 }
82
83 /// Unconditionally sets `archetype_field_name` to the given one.
85 std::optional<std::string_view> archetype_field_name_
86 ) const {
87 ComponentDescriptor descriptor = *this;
88 descriptor.archetype_field_name = archetype_field_name_;
89 return descriptor;
90 }
91
92 /// Unconditionally sets `archetype_field_name` to the given one.
93 ComponentDescriptor with_archetype_field_name(const char* archetype_field_name_) const {
94 ComponentDescriptor descriptor = *this;
95 descriptor.archetype_field_name = archetype_field_name_;
96 return descriptor;
97 }
98
99 /// Sets `archetype_name` to the given one iff it's not already set.
100 ComponentDescriptor or_with_archetype_name(std::optional<std::string_view> archetype_name_
101 ) const {
102 if (this->archetype_field_name.has_value()) {
103 return *this;
104 }
105 ComponentDescriptor descriptor = *this;
106 descriptor.archetype_name = archetype_name_;
107 return descriptor;
108 }
109
110 /// Sets `archetype_name` to the given one iff it's not already set.
111 ComponentDescriptor or_with_archetype_name(const char* archetype_name_) const {
112 if (this->archetype_field_name.has_value()) {
113 return *this;
114 }
115 ComponentDescriptor descriptor = *this;
116 descriptor.archetype_name = archetype_name_;
117 return descriptor;
118 }
119
120 /// Sets `archetype_field_name` to the given one iff it's not already set.
122 std::optional<std::string_view> archetype_field_name_
123 ) const {
124 if (this->archetype_field_name.has_value()) {
125 return *this;
126 }
127 ComponentDescriptor descriptor = *this;
128 descriptor.archetype_field_name = archetype_field_name_;
129 return descriptor;
130 }
131
132 /// Sets `archetype_field_name` to the given one iff it's not already set.
133 ComponentDescriptor or_with_archetype_field_name(const char* archetype_field_name_) const {
134 if (this->archetype_field_name.has_value()) {
135 return *this;
136 }
137 ComponentDescriptor descriptor = *this;
138 descriptor.archetype_field_name = archetype_field_name_;
139 return descriptor;
140 }
141 };
142} // namespace rerun
All Rerun C++ types and functions are in the rerun namespace or one of its nested namespaces.
Definition rerun.hpp:23
uint64_t ComponentDescriptorHash
See ComponentDescriptor::hashed.
Definition component_descriptor.hpp:9
A ComponentDescriptor fully describes the semantics of a column of data.
Definition component_descriptor.hpp:14
ComponentDescriptor with_archetype_field_name(const char *archetype_field_name_) const
Unconditionally sets archetype_field_name to the given one.
Definition component_descriptor.hpp:93
ComponentDescriptor or_with_archetype_field_name(std::optional< std::string_view > archetype_field_name_) const
Sets archetype_field_name to the given one iff it's not already set.
Definition component_descriptor.hpp:121
std::optional< std::string_view > archetype_field_name
Optional name of the field within Archetype associated with this data.
Definition component_descriptor.hpp:27
std::optional< std::string_view > archetype_name
Optional name of the Archetype associated with this data.
Definition component_descriptor.hpp:20
ComponentDescriptor with_archetype_field_name(std::optional< std::string_view > archetype_field_name_) const
Unconditionally sets archetype_field_name to the given one.
Definition component_descriptor.hpp:84
std::string_view component_name
Semantic name associated with this data.
Definition component_descriptor.hpp:35
ComponentDescriptor with_archetype_name(std::optional< std::string_view > archetype_name_) const
Unconditionally sets archetype_name to the given one.
Definition component_descriptor.hpp:69
ComponentDescriptor or_with_archetype_field_name(const char *archetype_field_name_) const
Sets archetype_field_name to the given one iff it's not already set.
Definition component_descriptor.hpp:133
ComponentDescriptor or_with_archetype_name(const char *archetype_name_) const
Sets archetype_name to the given one iff it's not already set.
Definition component_descriptor.hpp:111
ComponentDescriptor or_with_archetype_name(std::optional< std::string_view > archetype_name_) const
Sets archetype_name to the given one iff it's not already set.
Definition component_descriptor.hpp:100
ComponentDescriptor with_archetype_name(const char *archetype_name_) const
Unconditionally sets archetype_name to the given one.
Definition component_descriptor.hpp:77