18#ifndef _DECAF_LANG_POINTER_H_
19#define _DECAF_LANG_POINTER_H_
52 template<
typename T,
typename REFCOUNTER = decaf::util::concurrent::atomic::AtomicRefCounter>
56 typedef void (*deletionFuncPtr)(T* p);
63 deletionFuncPtr onDelete;
79 Pointer() : REFCOUNTER(), value(
NULL), onDelete(onDeleteFunc) {}
88 explicit Pointer(
const PointerType value) : REFCOUNTER(), value(value), onDelete(onDeleteFunc) {}
97 Pointer(
const Pointer& value) : REFCOUNTER(value), value(value.value), onDelete(onDeleteFunc) {}
106 template<
typename T1,
typename R1>
117 template<
typename T1,
typename R1>
119 REFCOUNTER(value), value(static_cast<T*> (value.
get())), onDelete(onDeleteFunc) {}
132 template<
typename T1,
typename R1>
134 REFCOUNTER(value), value(dynamic_cast<T*> (value.
get())), onDelete(onDeleteFunc) {
136 if (this->value ==
NULL) {
139 REFCOUNTER::release();
141 __FILE__, __LINE__,
"Failed to cast source pointer of type %s to this type: %s.",
142 typeid(T1).name(),
typeid(T).name());
147 if (REFCOUNTER::release() ==
true) {
148 onDelete(this->value);
175 T* temp = this->value;
199 std::swap(this->value, value.value);
200 REFCOUNTER::swap(value);
208 if (
this == (
void*) &right) {
216 template<
typename T1,
typename R1>
218 if (
this == (
void*) &right) {
235 if (this->value ==
NULL) {
237 __FILE__, __LINE__,
"Pointer operator& - Pointee is NULL.");
240 return *(this->value);
243 if (this->value ==
NULL) {
245 __FILE__, __LINE__,
"Pointer operator& - Pointee is NULL.");
248 return *(this->value);
259 if (this->value ==
NULL) {
261 __FILE__, __LINE__,
"Pointer operator-> - Pointee is NULL.");
266 if (this->value ==
NULL) {
268 __FILE__, __LINE__,
"Pointer operator-> - Pointee is NULL.");
274 return this->value ==
NULL;
278 return left.
get() == right;
282 return left == right.
get();
286 return left.
get() != right;
290 return left != right.
get();
293 template<
typename T1,
typename R1>
295 return this->value == right.
get();
298 template<
typename T1,
typename R1>
300 return !(this->value == right.
get());
303 template<
typename T1>
308 template<
typename T1>
316 static void onDeleteFunc(T* value) {
323 template<
typename T,
typename R,
typename U>
325 return left.
get() == right;
329 template<
typename T,
typename R,
typename U>
331 return right.
get() == left;
335 template<
typename T,
typename R,
typename U>
337 return !(left.
get() == right);
341 template<
typename T,
typename R,
typename U>
343 return right.
get() != left;
347 template<
typename T,
typename R>
349 out << pointer.
get();
365 template<
typename T,
typename R = decaf::util::concurrent::atomic::AtomicRefCounter>
374 return *left < *right;
379 return *left < *right ? -1 : *right < *left ? 1 : 0;
394 struct less<
decaf::lang::Pointer<T> > {
401 return less<T*> ()(left.
get(), right.
get());
Pointer()
Default Constructor.
Definition Pointer.h:79
This implementation of Comparator is designed to allows objects in a Collection to be sorted or teste...
Definition Pointer.h:366
virtual int compare(const Pointer< T, R > &left, const Pointer< T, R > &right) const
Definition Pointer.h:378
virtual ~PointerComparator()
Definition Pointer.h:369
virtual bool operator()(const Pointer< T, R > &left, const Pointer< T, R > &right) const
Definition Pointer.h:373
Decaf's implementation of a Smart Pointer that is a template on a Type and is Thread Safe if the defa...
Definition Pointer.h:53
Pointer(const Pointer &value)
Copy constructor.
Definition Pointer.h:97
T * release()
Releases the Pointer held and resets the internal pointer value to Null.
Definition Pointer.h:174
T * PointerType
Definition Pointer.h:67
friend bool operator!=(const T *left, const Pointer &right)
Definition Pointer.h:289
Pointer< T1, CounterType > staticCast() const
Definition Pointer.h:309
PointerType operator->()
Indirection Operator, returns a pointer to the Contained value.
Definition Pointer.h:258
T & ReferenceType
Definition Pointer.h:68
PointerType get() const
Gets the real pointer that is contained within this Pointer.
Definition Pointer.h:188
bool operator==(const Pointer< T1, R1 > &right) const
Definition Pointer.h:294
bool operator!=(const Pointer< T1, R1 > &right) const
Definition Pointer.h:299
bool operator!() const
Definition Pointer.h:273
ReferenceType operator*()
Dereference Operator, returns a reference to the Contained value.
Definition Pointer.h:234
REFCOUNTER CounterType
Definition Pointer.h:69
Pointer(const PointerType value)
Explicit Constructor, creates a Pointer that contains value with a single reference.
Definition Pointer.h:88
Pointer & operator=(const Pointer &right)
Assigns the value of right to this Pointer and increments the reference Count.
Definition Pointer.h:207
friend bool operator==(const T *left, const Pointer &right)
Definition Pointer.h:281
Pointer(const Pointer< T1, R1 > &value, const STATIC_CAST_TOKEN &)
Static Cast constructor.
Definition Pointer.h:118
Pointer(const Pointer< T1, R1 > &value, const DYNAMIC_CAST_TOKEN &)
Dynamic Cast constructor.
Definition Pointer.h:133
ReferenceType operator*() const
Definition Pointer.h:242
friend bool operator==(const Pointer &left, const T *right)
Definition Pointer.h:277
Pointer< T1, CounterType > dynamicCast() const
Definition Pointer.h:304
Pointer()
Default Constructor.
Definition Pointer.h:79
friend bool operator!=(const Pointer &left, const T *right)
Definition Pointer.h:285
PointerType operator->() const
Definition Pointer.h:265
void reset(T *value=NULL)
Resets the Pointer to hold the new value.
Definition Pointer.h:161
Pointer & operator=(const Pointer< T1, R1 > &right)
Definition Pointer.h:217
virtual ~Pointer()
Definition Pointer.h:146
Pointer(const Pointer< T1, R1 > &value)
Copy constructor.
Definition Pointer.h:107
void swap(Pointer &value)
Exception Safe Swap Function.
Definition Pointer.h:198
Definition ClassCastException.h:31
Definition NullPointerException.h:32
A comparison function, which imposes a total ordering on some collection of objects.
Definition Comparator.h:40
#define NULL
Definition Config.h:33
Definition ThreadingTypes.h:31
std::ostream & operator<<(std::ostream &out, const Pointer< T, R > &pointer)
Definition Pointer.h:348
bool operator==(const ArrayPointer< T > &left, const U *right)
Definition ArrayPointer.h:379
bool operator!=(const ArrayPointer< T > &left, const U *right)
Definition ArrayPointer.h:391
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.
Definition AprPool.h:25
Definition ArrayPointer.h:432
bool result_type
Definition Pointer.h:398
decaf::lang::Pointer< T > first_argument_type
Definition Pointer.h:396
decaf::lang::Pointer< T > second_argument_type
Definition Pointer.h:397
bool operator()(const decaf::lang::Pointer< T > &left, const decaf::lang::Pointer< T > &right) const
Definition Pointer.h:400