30 #include <unordered_map> 31 #include <unordered_set> 50 class TensorMap :
public std::unordered_map<std::string, core::Tensor> {
54 :
std::unordered_map<
std::string,
core::Tensor>(),
55 primary_key_(primary_key) {
56 AssertPrimaryKeyInMapOrEmpty();
57 AssertNoReservedKeys();
67 template <
class InputIt>
68 TensorMap(
const std::string& primary_key, InputIt first, InputIt last)
69 :
std::unordered_map<
std::string,
core::Tensor>(first, last),
70 primary_key_(primary_key) {
71 AssertPrimaryKeyInMapOrEmpty();
72 AssertNoReservedKeys();
76 const std::unordered_map<std::string, core::Tensor>& tensor_map)
77 :
TensorMap(primary_key, tensor_map.begin(), tensor_map.end()) {
78 AssertPrimaryKeyInMapOrEmpty();
79 AssertNoReservedKeys();
83 std::initializer_list<value_type> init)
84 :
std::unordered_map<
std::string,
core::Tensor>(init),
85 primary_key_(primary_key) {
86 AssertPrimaryKeyInMapOrEmpty();
87 AssertNoReservedKeys();
92 :
std::unordered_map<
std::string,
core::Tensor>(other),
93 primary_key_(other.primary_key_) {
94 AssertPrimaryKeyInMapOrEmpty();
95 AssertNoReservedKeys();
100 :
std::unordered_map<
std::string,
core::Tensor>(other),
101 primary_key_(other.primary_key_) {
102 AssertPrimaryKeyInMapOrEmpty();
103 AssertNoReservedKeys();
112 if (key == primary_key_) {
118 return this->erase(key);
121 std::pair<iterator, bool>
insert(
const value_type& value) {
125 return std::unordered_map<std::string, core::Tensor>::insert(value);
129 std::pair<iterator, bool>
insert(P&& value) {
133 return std::unordered_map<std::string, core::Tensor>::insert(
134 std::forward<P>(value));
137 iterator
insert(const_iterator hint,
const value_type& value) {
141 return std::unordered_map<std::string, core::Tensor>::insert(hint,
146 iterator
insert(const_iterator hint, P&& value) {
150 return std::unordered_map<std::string, core::Tensor>::insert(
151 hint, std::forward<P>(value));
154 template <
class InputIt>
155 void insert(InputIt first, InputIt last) {
156 for (
auto it = first; it != last; ++it) {
161 std::unordered_map<std::string, core::Tensor>::insert(first, last);
164 void insert(std::initializer_list<value_type> ilist) {
165 for (
auto it = ilist.begin(); it != ilist.end(); ++it) {
170 std::unordered_map<std::string, core::Tensor>::insert(ilist);
182 std::unordered_set<std::string> keys;
183 for (
const auto& item : *
this) {
184 keys.insert(item.first);
217 void AssertPrimaryKeyInMapOrEmpty()
const;
221 void AssertNoReservedKeys()
const;
224 int64_t GetPrimarySize()
const {
return at(primary_key_).GetLength(); }
228 return at(primary_key_).GetDevice();
232 std::string primary_key_;
std::pair< iterator, bool > insert(const value_type &value)
Definition: TensorMap.h:121
std::pair< iterator, bool > insert(P &&value)
Definition: TensorMap.h:129
TensorMap Contiguous() const
Definition: TensorMap.cpp:94
TensorMap(const std::string &primary_key, std::initializer_list< value_type > init)
Definition: TensorMap.h:82
TensorMap()
Definition: TensorMap.h:63
iterator insert(const_iterator hint, P &&value)
Definition: TensorMap.h:146
static std::unordered_set< std::string > GetReservedKeys()
Get reserved keys for the map. A map cannot contain any of these keys.
Definition: TensorMap.cpp:103
TensorMap(const std::string &primary_key, InputIt first, InputIt last)
Definition: TensorMap.h:68
TensorMap(const std::string &primary_key)
Create empty TensorMap and set primary key.
Definition: TensorMap.h:53
bool IsContiguous() const
Definition: TensorMap.cpp:85
iterator insert(const_iterator hint, const value_type &value)
Definition: TensorMap.h:137
#define LogWarning(...)
Definition: Logging.h:79
void insert(InputIt first, InputIt last)
Definition: TensorMap.h:155
std::unordered_set< std::string > GetKeySet() const
Returns a set with all keys.
Definition: TensorMap.h:181
TensorMap & operator=(const TensorMap &)=default
bool Contains(const std::string &key) const
Definition: TensorMap.h:206
std::string ToString() const
Print the TensorMap to string.
Definition: TensorMap.cpp:155
void insert(std::initializer_list< value_type > ilist)
Definition: TensorMap.h:164
Definition: PinholeCameraIntrinsic.cpp:35
TensorMap(const std::string &primary_key, const std::unordered_map< std::string, core::Tensor > &tensor_map)
Definition: TensorMap.h:75
TensorMap(const TensorMap &other)
Copy constructor performs a "shallow" copy of the Tensors.
Definition: TensorMap.h:91
std::string GetPrimaryKey() const
Returns the primary key of the TensorMap.
Definition: TensorMap.h:178
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample playback_handle k4a_logging_message_cb_t void min_level device_handle k4a_imu_sample_t timeout_in_ms capture_handle capture_handle capture_handle image_handle temperature_c k4a_image_t image_handle uint8_t image_handle image_handle image_handle image_handle image_handle timestamp_usec white_balance image_handle k4a_device_configuration_t config device_handle char size_t serial_number_size bool int32_t int32_t int32_t int32_t k4a_color_control_mode_t default_mode value const const k4a_calibration_t calibration char size_t
Definition: K4aPlugin.cpp:734
void AssertSizeSynchronized() const
Assert IsSizeSynchronized().
Definition: TensorMap.cpp:68
bool IsSizeSynchronized() const
Returns true if all tensors in the map have the same size.
Definition: TensorMap.cpp:41
std::size_t Erase(const std::string key)
Erase elements for the TensorMap by key value, if the key exists. If the key does not exists...
Definition: TensorMap.h:111
TensorMap(TensorMap &&other)
Move constructor performs a "shallow" copy of the Tensors.
Definition: TensorMap.h:99
#define LogError(...)
Definition: Logging.h:67
Definition: TensorMap.h:50