1
#ifndef UNITYSCOPE_SMARTPTR_HELPER_H
2
#define UNITYSCOPE_SMARTPTR_HELPER_H
8
namespace gounityscopes {
11
template<typename T> inline void init_const_ptr(SharedPtrData data, std::shared_ptr<T const> v) {
12
typedef std::shared_ptr<T const> Ptr;
13
static_assert(sizeof(SharedPtrData) >= sizeof(Ptr),
14
"std::shared_ptr is larger than expected");
15
Ptr *ptr = new(reinterpret_cast<void*>(data)) Ptr();
19
template<typename T> inline void init_ptr(SharedPtrData data, std::shared_ptr<T> v) {
20
typedef std::shared_ptr<T> Ptr;
21
static_assert(sizeof(SharedPtrData) >= sizeof(Ptr),
22
"std::shared_ptr is larger than expected");
23
Ptr *ptr = new(reinterpret_cast<void*>(data)) Ptr();
27
template<typename T> inline std::shared_ptr<T> get_ptr(SharedPtrData data) {
28
typedef std::shared_ptr<T> Ptr;
29
Ptr *ptr = reinterpret_cast<Ptr*>(data);
33
template<typename T> inline void destroy_ptr(SharedPtrData data) {
34
typedef std::shared_ptr<T> Ptr;
35
if (!(data[0] == 0 && data[1] == 0)) {
36
Ptr *ptr = reinterpret_cast<Ptr*>(data);
39
data[0] = data[1] = 0;
42
template<typename T> inline void copy_ptr(SharedPtrData dest_data, SharedPtrData src_data) {
43
typedef std::shared_ptr<T> Ptr;
44
Ptr *dest = reinterpret_cast<Ptr*>(dest_data);
45
Ptr *src = reinterpret_cast<Ptr*>(src_data);