18 #ifndef _DS3D_COMMON_HPP_DATAMAP_HPP
19 #define _DS3D_COMMON_HPP_DATAMAP_HPP
21 #include <ds3d/common/func_utils.h>
23 #include <ds3d/common/hpp/obj.hpp>
27 class GuardDataMap :
public GuardDataT<abiDataMap> {
28 using _Base = GuardDataT<abiDataMap>;
34 template <
typename... Args >
47 template <
class T, _EnableIfVal
idIdType<T> = true>
74 template <
class T, _EnableIfVal
idIdType<T> = true>
92 return ptr()->
copy_i(input.ptr(), policy, policyData);
96 char* policyData =
nullptr)
100 return ptr()->
copy_i(input.ptr(), key.empty() ?
nullptr : key.c_str(), policy, policyData);
120 if (!value.abiRef()) {
123 return this->
setRefData(name, *value.abiRef());
130 using t = std::remove_const_t<T>;
132 abiRefAny* u =
new abiRefCast<T, void>(value);
142 template <
class T, _EnableIfVal
idIdType<T>>
146 using t = std::remove_const_t<std::remove_reference_t<T>>;
148 ShrdPtr<t> data(
new t(value));
149 return this->
setPtrData(name, std::move(data));
156 using t = std::remove_const_t<T>;
158 abiRefAny* u = PtrToAbiRef<T, void>(std::move(value));
172 abiRefT<T>* refData =
nullptr;
174 guardData.reset(refData);
182 using t = std::remove_const_t<T>;
190 abiRefT<T>* u =
new abiRefCast<void, T>(
const_cast<abiRefAny*
>(ud),
false);
201 using t = std::remove_const_t<T>;
210 value = AbiRefToPtr<void, T>(*ud);
215 template <
class T, _EnableIfVal
idIdType<T>>
219 using t = std::remove_const_t<T>;
228 value = *(
static_cast<T*
>(ud->data()));
234 #endif // _DS3D_COMMON_HPP_DATAMAP_HPP