Nebula
Toggle main menu visibility
Loading...
Searching...
No Matches
weakptr.h
Go to the documentation of this file.
1
#pragma once
2
//------------------------------------------------------------------------------
14
#include "
core/ptr.h
"
15
16
//------------------------------------------------------------------------------
17
template
<
class
TYPE>
18
class
WeakPtr
19
{
20
public
:
22
WeakPtr
();
24
WeakPtr
(TYPE* p);
26
WeakPtr
(
const
Ptr<TYPE>
& p);
28
WeakPtr
(
const
WeakPtr<TYPE>
& p);
30
~WeakPtr
();
32
void
operator=
(
const
Ptr<TYPE>
& rhs);
34
void
operator=
(
const
WeakPtr<TYPE>
& rhs);
36
void
operator=
(TYPE* rhs);
38
TYPE*
operator->
()
const
;
40
TYPE&
operator*
()
const
;
42
operator
TYPE*()
const
;
44
bool
isvalid
()
const
;
46
TYPE*
get
()
const
;
48
TYPE*
get_unsafe
()
const
;
49
50
private
:
51
TYPE*
ptr
;
52
};
53
54
//------------------------------------------------------------------------------
57
template
<
class
TYPE>
58
WeakPtr<TYPE>::WeakPtr
() :
59
ptr
(0)
60
{
61
// empty
62
}
63
64
//------------------------------------------------------------------------------
67
template
<
class
TYPE>
68
WeakPtr<TYPE>::WeakPtr
(TYPE* p) :
69
ptr
(p)
70
{
71
// empty
72
}
73
74
//------------------------------------------------------------------------------
77
template
<
class
TYPE>
78
WeakPtr<TYPE>::WeakPtr
(
const
Ptr<TYPE>
& p) :
79
ptr
(p.
get_unsafe
())
80
{
81
// empty
82
}
83
84
//------------------------------------------------------------------------------
87
template
<
class
TYPE>
88
WeakPtr<TYPE>::WeakPtr
(
const
WeakPtr<TYPE>
& p) :
89
ptr
(p.
ptr
)
90
{
91
// empty
92
}
93
94
//------------------------------------------------------------------------------
97
template
<
class
TYPE>
98
WeakPtr<TYPE>::~WeakPtr
()
99
{
100
this->
ptr
= 0;
101
}
102
103
//------------------------------------------------------------------------------
106
template
<
class
TYPE>
107
void
108
WeakPtr<TYPE>::operator=
(
const
Ptr<TYPE>
& rhs)
109
{
110
this->
ptr
= rhs.
get_unsafe
();
111
}
112
113
//------------------------------------------------------------------------------
116
template
<
class
TYPE>
117
void
118
WeakPtr<TYPE>::operator=
(
const
WeakPtr<TYPE>
& rhs)
119
{
120
this->
ptr
= rhs.
ptr
;
121
}
122
123
//------------------------------------------------------------------------------
126
template
<
class
TYPE>
127
void
128
WeakPtr<TYPE>::operator=
(TYPE* rhs)
129
{
130
this->
ptr
= rhs;
131
}
132
133
//------------------------------------------------------------------------------
136
template
<
class
TYPE>
137
TYPE*
138
WeakPtr<TYPE>::operator->
()
const
139
{
140
n_assert2
(this->
ptr
,
"NULL pointer access in WeakPtr::operator->()!"
);
141
return
this->
ptr
;
142
}
143
144
//------------------------------------------------------------------------------
147
template
<
class
TYPE>
148
TYPE&
149
WeakPtr<TYPE>::operator*
()
const
150
{
151
n_assert2
(this->
ptr
,
"NULL pointer access in WeakPtr::operator*()!"
);
152
return
*this->
ptr
;
153
}
154
155
//------------------------------------------------------------------------------
158
template
<
class
TYPE>
159
WeakPtr<TYPE>::operator
TYPE*()
const
160
{
161
n_assert2
(this->
ptr
,
"NULL pointer access in WeakPtr::operator TYPE*()!"
);
162
return
this->
ptr
;
163
}
164
165
//------------------------------------------------------------------------------
168
template
<
class
TYPE>
169
bool
170
WeakPtr<TYPE>::isvalid
()
const
171
{
172
return
(0 != this->
ptr
);
173
}
174
175
//------------------------------------------------------------------------------
178
template
<
class
TYPE>
179
TYPE*
180
WeakPtr<TYPE>::get
()
const
181
{
182
n_assert2
(this->
ptr
,
"NULL pointer access in WeakPtr::get()!"
);
183
return
this->
ptr
;
184
}
185
186
//------------------------------------------------------------------------------
189
template
<
class
TYPE>
190
TYPE*
191
WeakPtr<TYPE>::get_unsafe
()
const
192
{
193
return
this->
ptr
;
194
}
195
//------------------------------------------------------------------------------
Ptr
Nebula's smart pointer class which manages the life time of RefCounted objects.
Definition
ptr.h:38
Ptr::get_unsafe
TYPE * get_unsafe() const
return direct pointer (returns null pointer)
Definition
ptr.h:456
WeakPtr::operator=
void operator=(const Ptr< TYPE > &rhs)
assignment operator from Ptr<>
Definition
weakptr.h:108
WeakPtr::isvalid
bool isvalid() const
check if pointer is valid
Definition
weakptr.h:170
WeakPtr::operator->
TYPE * operator->() const
safe -> operator
Definition
weakptr.h:138
WeakPtr::get
TYPE * get() const
return direct pointer (asserts if null pointer)
Definition
weakptr.h:180
WeakPtr::~WeakPtr
~WeakPtr()
destructor
Definition
weakptr.h:98
WeakPtr::operator*
TYPE & operator*() const
safe dereference operator
Definition
weakptr.h:149
WeakPtr::get_unsafe
TYPE * get_unsafe() const
return direct pointer (returns null pointer)
Definition
weakptr.h:191
WeakPtr::WeakPtr
WeakPtr()
constructor
Definition
weakptr.h:58
WeakPtr::ptr
TYPE * ptr
Definition
weakptr.h:51
n_assert2
#define n_assert2(exp, msg)
Definition
debug.h:51
ptr.h
code
foundation
core
weakptr.h
Generated on
for Nebula. Dark theme by
Tilen Majerle
. All rights reserved.