11#include <unordered_map>
12#include <unordered_set>
31class TensorMap :
public std::unordered_map<std::string, core::Tensor> {
35 :
std::unordered_map<
std::string, core::Tensor>(),
36 primary_key_(primary_key) {
37 AssertPrimaryKeyInMapOrEmpty();
38 AssertNoReservedKeys();
45 utility::LogError(
"Please construct TensorMap with a primary key.");
48 template <
class InputIt>
49 TensorMap(
const std::string& primary_key, InputIt first, InputIt last)
50 :
std::unordered_map<
std::string, core::Tensor>(first, last),
51 primary_key_(primary_key) {
52 AssertPrimaryKeyInMapOrEmpty();
53 AssertNoReservedKeys();
57 const std::unordered_map<std::string, core::Tensor>& tensor_map)
58 :
TensorMap(primary_key, tensor_map.begin(), tensor_map.end()) {
59 AssertPrimaryKeyInMapOrEmpty();
60 AssertNoReservedKeys();
64 std::initializer_list<value_type> init)
65 :
std::unordered_map<
std::string, core::Tensor>(init),
66 primary_key_(primary_key) {
67 AssertPrimaryKeyInMapOrEmpty();
68 AssertNoReservedKeys();
73 :
std::unordered_map<
std::string, core::Tensor>(other),
74 primary_key_(other.primary_key_) {
75 AssertPrimaryKeyInMapOrEmpty();
76 AssertNoReservedKeys();
81 :
std::unordered_map<
std::string, core::Tensor>(other),
82 primary_key_(other.primary_key_) {
83 AssertPrimaryKeyInMapOrEmpty();
84 AssertNoReservedKeys();
92 std::size_t
Erase(
const std::string key) {
93 if (key == primary_key_) {
94 utility::LogError(
"Primary key \"{}\" cannot be deleted.",
97 utility::LogWarning(
"Key \"{}\" is not present.", key);
99 return this->erase(key);
102 std::pair<iterator, bool>
insert(
const value_type& value) {
104 utility::LogError(
"Key \"{}\" is reserved.", value.first);
106 return std::unordered_map<std::string, core::Tensor>::insert(value);
110 std::pair<iterator, bool>
insert(P&& value) {
112 utility::LogError(
"Key \"{}\" is reserved.", value.first);
114 return std::unordered_map<std::string, core::Tensor>::insert(
115 std::forward<P>(value));
118 iterator
insert(const_iterator hint,
const value_type& value) {
120 utility::LogError(
"Key \"{}\" is reserved.", value.first);
122 return std::unordered_map<std::string, core::Tensor>::insert(hint,
127 iterator
insert(const_iterator hint, P&& value) {
129 utility::LogError(
"Key \"{}\" is reserved.", value.first);
131 return std::unordered_map<std::string, core::Tensor>::insert(
132 hint, std::forward<P>(value));
135 template <
class InputIt>
136 void insert(InputIt first, InputIt last) {
137 for (
auto it = first; it != last; ++it) {
139 utility::LogError(
"Key \"{}\" is reserved.", it->first);
142 std::unordered_map<std::string, core::Tensor>::insert(first, last);
145 void insert(std::initializer_list<value_type> ilist) {
146 for (
auto it = ilist.begin(); it != ilist.end(); ++it) {
148 utility::LogError(
"Key \"{}\" is reserved.", it->first);
151 std::unordered_map<std::string, core::Tensor>::insert(ilist);
163 std::unordered_set<std::string> keys;
164 for (
const auto& item : *
this) {
165 keys.insert(item.first);
198 void AssertPrimaryKeyInMapOrEmpty()
const;
202 void AssertNoReservedKeys()
const;
205 int64_t GetPrimarySize()
const {
return at(primary_key_).GetLength(); }
209 return at(primary_key_).GetDevice();
213 std::string primary_key_;
double t
Definition SurfaceReconstructionPoisson.cpp:172
Definition TensorMap.h:31
TensorMap()
Definition TensorMap.h:44
TensorMap Contiguous() const
Definition TensorMap.cpp:75
TensorMap(TensorMap &&other)
Move constructor performs a "shallow" copy of the Tensors.
Definition TensorMap.h:80
void AssertSizeSynchronized() const
Assert IsSizeSynchronized().
Definition TensorMap.cpp:49
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:92
TensorMap(const std::string &primary_key)
Create empty TensorMap and set primary key.
Definition TensorMap.h:34
void insert(InputIt first, InputIt last)
Definition TensorMap.h:136
std::string ToString() const
Print the TensorMap to string.
Definition TensorMap.cpp:136
TensorMap(const std::string &primary_key, std::initializer_list< value_type > init)
Definition TensorMap.h:63
void insert(std::initializer_list< value_type > ilist)
Definition TensorMap.h:145
TensorMap(const std::string &primary_key, InputIt first, InputIt last)
Definition TensorMap.h:49
TensorMap(const std::string &primary_key, const std::unordered_map< std::string, core::Tensor > &tensor_map)
Definition TensorMap.h:56
static std::unordered_set< std::string > GetReservedKeys()
Get reserved keys for the map. A map cannot contain any of these keys.
Definition TensorMap.cpp:84
bool Contains(const std::string &key) const
Definition TensorMap.h:187
bool IsContiguous() const
Definition TensorMap.cpp:66
iterator insert(const_iterator hint, const value_type &value)
Definition TensorMap.h:118
bool IsSizeSynchronized() const
Returns true if all tensors in the map have the same size.
Definition TensorMap.cpp:22
std::unordered_set< std::string > GetKeySet() const
Returns a set with all keys.
Definition TensorMap.h:162
TensorMap & operator=(TensorMap &&)=default
std::string GetPrimaryKey() const
Returns the primary key of the TensorMap.
Definition TensorMap.h:159
iterator insert(const_iterator hint, P &&value)
Definition TensorMap.h:127
TensorMap(const TensorMap &other)
Copy constructor performs a "shallow" copy of the Tensors.
Definition TensorMap.h:72
std::pair< iterator, bool > insert(P &&value)
Definition TensorMap.h:110
TensorMap & operator=(const TensorMap &)=default
std::pair< iterator, bool > insert(const value_type &value)
Definition TensorMap.h:102
Definition PinholeCameraIntrinsic.cpp:16