CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
dynamic_weak_ptr.h
1
2#ifndef _aspose_system_dynamic_weak_ptr_h_
3#define _aspose_system_dynamic_weak_ptr_h_
4
5#include "system/smart_ptr.h"
6#include "detail.h"
7
8namespace System
9{
10
11namespace Details
12{
15 template <unsigned int ...leafs> struct WeakLeafMaker;
16
20 template <unsigned int leaf, unsigned int ...leafs>
21 struct WeakLeafMaker<leaf, leafs...>
22 {
24 static constexpr bool HasLeafs = true;
26 static void Apply(System::Object *ptr);
27 };
28
30 template <>
31 struct WeakLeafMaker<>
32 {
34 static constexpr bool HasLeafs = false;
36 static void Apply(System::Object*)
37 {}
38 };
39} //Details
46template <typename T, SmartPtrMode trunkMode, unsigned int ...weakLeafs>
47class DynamicWeakPtr : public SmartPtr<T>
48{
49public:
53 typedef DynamicWeakPtr<T, trunkMode, weakLeafs...> DynamicWeakPtr_;
55 using typename SmartPtr_::Pointee_;
57 DynamicWeakPtr(std::nullptr_t = nullptr)
58 : SmartPtr_(nullptr, trunkMode)
59 {}
63 : SmartPtr_(object, trunkMode)
64 {
65 Apply();
66 }
70 : SmartPtr_(ptr, trunkMode)
71 {
72 Apply();
73 }
77 template<class Q>
79 : SmartPtr_(x, trunkMode)
80 {
81 Apply();
82 }
86 : SmartPtr_(ptr, trunkMode)
87 {
88 Apply();
89 }
93 : SmartPtr_(x, trunkMode)
94 {
95 Apply();
96 }
99 bool operator == (std::nullptr_t) const
100 {
101 return SmartPtr_::operator == (nullptr);
102 }
107 {
109 Apply();
110 return *this;
111 }
116 {
118 Apply();
119 return *this;
120 }
125 template <typename Q>
127 {
129 Apply();
130 return *this;
131 }
136 {
138 Apply();
139 return *this;
140 }
144 {
145 return SmartPtr_::operator = (nullptr);
146 }
149 {
150 public:
154 : m_ptr(&ptr)
155 {}
158 Reference(Reference &&reference) noexcept
159 : m_ptr(reference.m_ptr)
160 {
161 reference.m_ptr = nullptr;
162 }
165 {
166 if (m_ptr)
167 m_ptr->Apply();
168 }
171 operator DynamicWeakPtr_& () const
172 {
173 return *m_ptr;
174 }
175
176 private:
178 DynamicWeakPtr_ *m_ptr;
179 };
180
181private:
183 void Apply()
184 {
185 if (!System::Details::WeakLeafMaker<weakLeafs...>::HasLeafs)
186 return;
187 if (Object *const object = SmartPtr_::GetObjectOrNull())
188 System::Details::WeakLeafMaker<weakLeafs...>::Apply(object);
189 }
190};
197template <typename T, SmartPtrMode trunkMode, unsigned int ...weakLeafs>
198typename DynamicWeakPtr<T, trunkMode, weakLeafs...>::Reference Ref(DynamicWeakPtr<T, trunkMode, weakLeafs...> &ptr)
199{
201}
206template <typename T>
207decltype(Ref(std::declval<T&>())) Ref(const std::reference_wrapper<T> &wrapper)
208{
209 return Ref(wrapper.get());
210}
211
212} // namespace System
213
214#endif // _aspose_system_dynamic_weak_ptr_h_
Reference class which ensures that DynamicWeakPtr::Apply is called. Used if DynamicWeakPtr is passed ...
Definition: dynamic_weak_ptr.h:149
Reference(DynamicWeakPtr_ &ptr)
Creates smart pointer reference.
Definition: dynamic_weak_ptr.h:153
~Reference()
Destroys reference. Ensures Apply() call on referenced smart pointer.
Definition: dynamic_weak_ptr.h:164
Reference(Reference &&reference) noexcept
Move-constructs smart pointer reference.
Definition: dynamic_weak_ptr.h:158
Smart pointer class which tracks pointer modes of template arguments of stored object and updates the...
Definition: dynamic_weak_ptr.h:48
DynamicWeakPtr(const DynamicWeakPtr_ &ptr)
Copy-constructs smart pointer.
Definition: dynamic_weak_ptr.h:85
DynamicWeakPtr(const SmartPtr_ &ptr)
Copy-constructs smart pointer.
Definition: dynamic_weak_ptr.h:69
DynamicWeakPtr_ & operator=(SmartPtr_ &&x)
Move-assigns smart pointer.
Definition: dynamic_weak_ptr.h:106
DynamicWeakPtr(Pointee_ *object)
Creates smart pointer pointing to given object.
Definition: dynamic_weak_ptr.h:62
SmartPtr< T > SmartPtr_
SmartPtr baseclass alias.
Definition: dynamic_weak_ptr.h:51
DynamicWeakPtr(std::nullptr_t=nullptr)
Creates null smart pointer.
Definition: dynamic_weak_ptr.h:57
bool operator==(std::nullptr_t) const
Checks if smart pointer is null.
Definition: dynamic_weak_ptr.h:99
DynamicWeakPtr(SmartPtr_ &&x)
Move-constructs smart pointer.
Definition: dynamic_weak_ptr.h:92
DynamicWeakPtr< T, trunkMode, weakLeafs... > DynamicWeakPtr_
Self type alias.
Definition: dynamic_weak_ptr.h:53
DynamicWeakPtr(const SmartPtr< Q > &x)
Copy-constructs smart pointer.
Definition: dynamic_weak_ptr.h:78
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:62
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
bool operator==(std::nullptr_t) const
Checks if pointer points to nullptr.
Definition: smart_ptr.h:512
Object * GetObjectOrNull() const
Gets pointed object (if any) or nullptr. Same as get().
Definition: smart_ptr.h:783
SmartPtr_ & operator=(SmartPtr_ &&x) noexcept
Move-assigns SmartPtr object. x becomes unusable.
Definition: smart_ptr.h:381
T Pointee_
Pointed type.
Definition: smart_ptr.h:183
Definition: db_command.h:9
SmartPtrMode
SmartPtr pointer type: weak or shared. Defines whether pointer is being counted when it is being deci...
Definition: smart_ptr.h:68
decltype(Ref(std::declval< T & >())) Ref(const std::reference_wrapper< T > &wrapper)
Wrapper to make sure Ref(std::ref(DynamicWeakPtr)) works.
Definition: dynamic_weak_ptr.h:207