NVIDIA DeepStream SDK API Reference

9.1 Release
9.1/sources/includes/ds3d/common/hpp/datamap.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef _DS3D_COMMON_HPP_DATAMAP_HPP
19 #define _DS3D_COMMON_HPP_DATAMAP_HPP
20 
21 #include <ds3d/common/func_utils.h>
22 
23 #include <ds3d/common/hpp/obj.hpp>
24 
25 namespace ds3d {
26 
27 class GuardDataMap : public GuardDataT<abiDataMap> {
28  using _Base = GuardDataT<abiDataMap>;
29 
30 public:
31  using KeyName = std::string;
32  GuardDataMap() = default;
33 
34  template <typename... Args /*, _EnableIfConstructible<_Base, Args&&...> = true*/>
35  GuardDataMap(Args&&... args) : _Base(std::forward<Args>(args)...)
36  {
37  }
38 
39  ~GuardDataMap() = default;
40 
41  bool hasData(const KeyName& name)
42  {
43  DS_ASSERT(ptr());
44  return ptr()->has_i(name.c_str());
45  }
46 
47  template <class T, _EnableIfValidIdType<T> = true>
48  inline ErrCode setData(const KeyName& name, const T& value); // copy T
49 
50  template <class T>
51  inline ErrCode setGuardData(const KeyName& name, const GuardDataT<T>& value);
52 
53  template <class T>
54  inline ErrCode setRefData(const KeyName& name, const abiRefT<T>& value);
55 
56  template <class T>
57  inline ErrCode setPtrData(const KeyName& name, ShrdPtr<T> value);
58 
59  template <class T>
60  inline ErrCode setPtrData(const KeyName& name, UniqPtr<T> value)
61  {
62  return this->setPtrData(ShrdPtr<T>(std::move(value)));
63  }
64 
65  template <class T>
66  inline ErrCode getPtrData(const KeyName& name, ShrdPtr<T>& value);
67 
68  template <class T>
69  inline ErrCode getRefData(const KeyName& name, abiRefT<T>*& value);
70 
71  template <class T>
72  inline ErrCode getGuardData(const KeyName& name, GuardDataT<T>& value);
73 
74  template <class T, _EnableIfValidIdType<T> = true>
75  inline ErrCode getData(const KeyName& name, T& value);
76 
77  inline ErrCode removeData(const KeyName& name)
78  {
79  DS_ASSERT(ptr());
80  return ptr()->removeBuf_i(name.c_str());
81  }
82  inline ErrCode clear()
83  {
84  DS_ASSERT(ptr());
85  return ptr()->clear_i();
86  }
87  inline ErrCode copy(
88  GuardDataMap input, DataMapPolicy policy = DataMapPolicy::kCopyPolicyNone, char* policyData = nullptr)
89  {
90  DS_ASSERT(ptr());
91  DS_ASSERT(input.ptr());
92  return ptr()->copy_i(input.ptr(), policy, policyData);
93  }
94  inline ErrCode copy(
96  char* policyData = nullptr)
97  {
98  DS_ASSERT(ptr());
99  DS_ASSERT(input.ptr());
100  return ptr()->copy_i(input.ptr(), key.empty() ? nullptr : key.c_str(), policy, policyData);
101  }
102 
103  inline int32_t getSize()
104  {
105  DS_ASSERT(ptr());
106  return ptr()->getSize_i();
107  }
108 
109  void printDebug() const
110  {
111  DS_ASSERT(ptr());
112  ptr()->printDebug_i();
113  }
114 };
115 
116 template <class T>
117 ErrCode
118 GuardDataMap::setGuardData(const GuardDataMap::KeyName& name, const GuardDataT<T>& value)
119 {
120  if (!value.abiRef()) {
121  return ErrCode::kNullPtr;
122  }
123  return this->setRefData(name, *value.abiRef());
124 }
125 
126 template <class T>
127 ErrCode
128 GuardDataMap::setRefData(const GuardDataMap::KeyName& name, const abiRefT<T>& value)
129 {
130  using t = std::remove_const_t<T>;
131  TIdType tyid = TpId<t>::__typeid();
132  abiRefAny* u = new abiRefCast<T, void>(value);
133  DS_ASSERT(u && u->data());
134  DS_ASSERT(ptr());
135  ErrCode code = ptr()->setBuf_i(name.c_str(), tyid, u);
136  if (!isGood(code)) {
137  u->destroy();
138  }
139  return code;
140 }
141 
142 template <class T, _EnableIfValidIdType<T>>
143 ErrCode
144 GuardDataMap::setData(const GuardDataMap::KeyName& name, const T& value)
145 {
146  using t = std::remove_const_t<std::remove_reference_t<T>>;
147  // TIdType tyid = TpId<t>::__typeid();
148  ShrdPtr<t> data(new t(value));
149  return this->setPtrData(name, std::move(data));
150 }
151 
152 template <class T>
153 ErrCode
154 GuardDataMap::setPtrData(const GuardDataMap::KeyName& name, ShrdPtr<T> value)
155 {
156  using t = std::remove_const_t<T>;
157  TIdType tyid = TpId<t>::__typeid();
158  abiRefAny* u = PtrToAbiRef<T, void>(std::move(value));
159  DS_ASSERT(u && u->data());
160  DS_ASSERT(ptr());
161  ErrCode code = ptr()->setBuf_i(name.c_str(), tyid, u);
162  if (!isGood(code)) {
163  u->destroy();
164  }
165  return code;
166 }
167 
168 template <class T>
169 ErrCode
170 GuardDataMap::getGuardData(const GuardDataMap::KeyName& name, GuardDataT<T>& guardData)
171 {
172  abiRefT<T>* refData = nullptr;
173  ErrCode code = getRefData(name, refData);
174  guardData.reset(refData);
175  return code;
176 }
177 
178 template <class T>
179 ErrCode
180 GuardDataMap::getRefData(const GuardDataMap::KeyName& name, abiRefT<T>*& value)
181 {
182  using t = std::remove_const_t<T>;
183  TIdType tyid = TpId<t>::__typeid();
184  const abiRefAny* ud = nullptr;
185  DS_ASSERT(ptr());
186  ErrCode code = ptr()->getBuf_i(name.c_str(), tyid, ud);
187  if (!isGood(code)) {
188  return code;
189  }
190  abiRefT<T>* u = new abiRefCast<void, T>(const_cast<abiRefAny*>(ud), false);
191  DS_ASSERT(u && u->data());
192  value = u;
193  DS_ASSERT(value);
194  return code;
195 }
196 
197 template <class T>
198 ErrCode
199 GuardDataMap::getPtrData(const GuardDataMap::KeyName& name, ShrdPtr<T>& value)
200 {
201  using t = std::remove_const_t<T>;
202  TIdType tyid = TpId<t>::__typeid();
203  const abiRefAny* ud = nullptr;
204  DS_ASSERT(ptr());
205  ErrCode code = ptr()->getBuf_i(name.c_str(), tyid, ud);
206  if (!isGood(code)) {
207  return code;
208  }
209  DS_ASSERT(ud && ud->data());
210  value = AbiRefToPtr<void, T>(*ud);
211  DS_ASSERT(value);
212  return code;
213 }
214 
215 template <class T, _EnableIfValidIdType<T>>
216 ErrCode
217 GuardDataMap::getData(const GuardDataMap::KeyName& name, T& value)
218 {
219  using t = std::remove_const_t<T>;
220  TIdType tyid = TpId<t>::__typeid();
221  const abiRefAny* ud = nullptr;
222  DS_ASSERT(ptr());
223  ErrCode code = ptr()->getBuf_i(name.c_str(), tyid, ud);
224  if (!isGood(code)) {
225  return code;
226  }
227  DS_ASSERT(ud && ud->data());
228  value = *(static_cast<T*>(ud->data()));
229  return code;
230 }
231 
232 } // namespace ds3d
233 
234 #endif // _DS3D_COMMON_HPP_DATAMAP_HPP
ds3d::isGood
bool isGood(ErrCode c)
Definition: sources/includes/ds3d/common/func_utils.h:32
ds3d::GuardDataMap::setGuardData
ErrCode setGuardData(const KeyName &name, const GuardDataT< T > &value)
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:118
ds3d::UniqPtr
std::unique_ptr< T, std::function< void(T *)> > UniqPtr
Definition: sources/includes/ds3d/common/hpp/obj.hpp:35
ds3d::TpId::__typeid
static constexpr TIdType __typeid()
Definition: sources/includes/ds3d/common/type_trait.h:32
ds3d::GuardDataMap::getSize
int32_t getSize()
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:103
ds3d::GuardDataMap::clear
ErrCode clear()
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:82
ds3d::GuardDataMap::GuardDataMap
GuardDataMap()=default
ds3d::GuardDataMap::KeyName
std::string KeyName
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:31
ds3d::abiDataMap::clear_i
virtual ErrCode clear_i()=0
ds3d::ErrCode::kNullPtr
@ kNullPtr
ds3d::abiDataMap::printDebug_i
virtual void printDebug_i() const =0
ds3d::GuardDataMap::getPtrData
ErrCode getPtrData(const KeyName &name, ShrdPtr< T > &value)
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:199
ds3d::GuardDataMap::setPtrData
ErrCode setPtrData(const KeyName &name, ShrdPtr< T > value)
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:154
ds3d::GuardDataMap::printDebug
void printDebug() const
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:109
ds3d::abiDataMap::getSize_i
virtual int32_t getSize_i()=0
ds3d::abiDataMap::copy_i
virtual ErrCode copy_i(abiDataMap *input, DataMapPolicy policy, char *policyData)=0
ds3d::abiRefT
Definition: sources/includes/ds3d/common/abi_obj.h:43
ds3d::GuardDataMap::removeData
ErrCode removeData(const KeyName &name)
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:77
ds3d::abiDataMap::has_i
virtual bool has_i(const char *key) const =0
DS_ASSERT
#define DS_ASSERT(...)
Definition: sources/includes/ds3d/common/defines.h:36
ds3d::ErrCode
ErrCode
Definition: sources/includes/ds3d/common/common.h:47
ds3d::DataMapPolicy
DataMapPolicy
Definition: sources/includes/ds3d/common/abi_obj.h:33
ds3d::GuardDataMap::setRefData
ErrCode setRefData(const KeyName &name, const abiRefT< T > &value)
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:128
ds3d::abiDataMap::removeBuf_i
virtual ErrCode removeBuf_i(const char *key)=0
ds3d::GuardDataT< abiDataMap >
ds3d::GuardDataMap::getRefData
ErrCode getRefData(const KeyName &name, abiRefT< T > *&value)
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:180
ds3d::GuardDataMap::hasData
bool hasData(const KeyName &name)
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:41
ds3d::abiDataMap::setBuf_i
virtual ErrCode setBuf_i(const char *key, TIdType tid, abiRefAny *data)=0
ds3d::abiRefAny
abiRefT< void > abiRefAny
Definition: sources/includes/ds3d/common/abi_obj.h:48
ds3d::GuardDataMap::getGuardData
ErrCode getGuardData(const KeyName &name, GuardDataT< T > &value)
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:170
ds3d::GuardDataMap::getData
ErrCode getData(const KeyName &name, T &value)
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:217
ds3d::GuardDataMap::setData
ErrCode setData(const KeyName &name, const T &value)
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:144
ds3d::GuardDataT< abiDataMap >::ptr
abiDataMap * ptr() const
Definition: sources/includes/ds3d/common/hpp/obj.hpp:365
ds3d::GuardDataMap::copy
ErrCode copy(GuardDataMap input, DataMapPolicy policy=DataMapPolicy::kCopyPolicyNone, char *policyData=nullptr)
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:87
ds3d::ShrdPtr
std::shared_ptr< T > ShrdPtr
Definition: sources/includes/ds3d/common/hpp/obj.hpp:33
ds3d::abiDataMap::getBuf_i
virtual ErrCode getBuf_i(const char *key, TIdType tid, const abiRefAny *&data) const =0
ds3d::GuardDataMap::GuardDataMap
GuardDataMap(Args &&... args)
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:35
ds3d::GuardDataMap
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:27
ds3d::GuardDataMap::copy
ErrCode copy(GuardDataMap input, const KeyName key, DataMapPolicy policy=DataMapPolicy::kCopyPolicyNone, char *policyData=nullptr)
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:94
ds3d
Definition: sources/includes/ds3d/common/abi_dataprocess.h:25
ds3d::GuardDataMap::setPtrData
ErrCode setPtrData(const KeyName &name, UniqPtr< T > value)
Definition: 9.1/sources/includes/ds3d/common/hpp/datamap.hpp:60
ds3d::DataMapPolicy::kCopyPolicyNone
@ kCopyPolicyNone
ds3d::TIdType
uint64_t TIdType
Definition: sources/includes/ds3d/common/common.h:73
ds3d::GuardDataMap::~GuardDataMap
~GuardDataMap()=default