12 #ifndef _DS3D_COMMON_HPP_DATAMAP_HPP
13 #define _DS3D_COMMON_HPP_DATAMAP_HPP
15 #include <ds3d/common/func_utils.h>
17 #include <ds3d/common/hpp/obj.hpp>
21 class GuardDataMap :
public GuardDataT<abiDataMap> {
22 using _Base = GuardDataT<abiDataMap>;
28 template <
typename... Args >
41 template <
class T, _EnableIfVal
idIdType<T> = true>
68 template <
class T, _EnableIfVal
idIdType<T> = true>
86 return ptr()->
copy_i(input.ptr(), policy, policyData);
90 char* policyData =
nullptr)
94 return ptr()->
copy_i(input.ptr(), key.empty() ?
nullptr : key.c_str(), policy, policyData);
114 if (!value.abiRef()) {
117 return this->
setRefData(name, *value.abiRef());
124 using t = std::remove_const_t<T>;
126 abiRefAny* u =
new abiRefCast<T, void>(value);
136 template <
class T, _EnableIfVal
idIdType<T>>
140 using t = std::remove_const_t<std::remove_reference_t<T>>;
142 ShrdPtr<t> data(
new t(value));
143 return this->
setPtrData(name, std::move(data));
150 using t = std::remove_const_t<T>;
152 abiRefAny* u = PtrToAbiRef<T, void>(std::move(value));
166 abiRefT<T>* refData =
nullptr;
168 guardData.reset(refData);
176 using t = std::remove_const_t<T>;
184 abiRefT<T>* u =
new abiRefCast<void, T>(
const_cast<abiRefAny*
>(ud),
false);
195 using t = std::remove_const_t<T>;
204 value = AbiRefToPtr<void, T>(*ud);
209 template <
class T, _EnableIfVal
idIdType<T>>
213 using t = std::remove_const_t<T>;
222 value = *(
static_cast<T*
>(ud->data()));
228 #endif // _DS3D_COMMON_HPP_DATAMAP_HPP