18 #ifndef _DECAF_LANG_ARRAYPOINTER_H_ 19 #define _DECAF_LANG_ARRAYPOINTER_H_ 50 template<
typename T >
57 ArrayData(
const ArrayData&);
66 ArrayData() : value(
NULL),
length(0), refs(1) {}
67 ArrayData(T* value,
int length) : value(value),
length(length), refs(1) {
68 if( value !=
NULL && length <= 0 ) {
70 __FILE__, __LINE__,
"Non-NULL array pointer cannot have a size <= zero" );
73 if( value ==
NULL && length > 0 ) {
75 __FILE__, __LINE__,
"NULL array pointer cannot have a size > zero" );
87 typedef void (*deletionFuncPtr)(ArrayData* p);
94 deletionFuncPtr onDelete;
126 T* value =
new T[size];
127 this->array =
new ArrayData(value, size);
129 }
catch (std::exception& ex) {
132 throw std::bad_alloc();
153 T* value =
new T[size];
155 this->array =
new ArrayData(value, size);
156 }
catch (std::exception& ex) {
159 throw std::bad_alloc();
172 explicit ArrayPointer(
const PointerType value,
int size) : array(
NULL), onDelete(onDeleteFunc) {
175 this->array =
new ArrayData(value, size);
176 }
catch (std::exception& ex) {
179 throw std::bad_alloc();
188 this->array->refs.incrementAndGet();
192 if (this->array->release() ==
true) {
193 onDelete(this->array);
208 void reset(T* value,
int size = 0) {
224 T* temp = this->array->value;
225 this->array->value =
NULL;
226 this->array->length = 0;
227 this->array->refs.set(1);
239 PointerType
get()
const {
240 return this->array->value;
250 return this->array->length;
258 std::swap(this->array, value.array);
269 if (this->array->length == 0) {
283 if (
this == (
void*) &right) {
291 template<
typename T1>
293 if (
this == (
void*) &right) {
311 if (this->array->value ==
NULL) {
313 __FILE__, __LINE__,
"ArrayPointer operator& - Pointee is NULL." );
316 if (index < 0 || this->array->length <= index) {
318 __FILE__, __LINE__,
"Array Index %d is out of bounds for this array.", this->array->length );
321 return this->array->value[index];
324 if( this->array->value ==
NULL ) {
326 __FILE__, __LINE__,
"ArrayPointer operator& - Pointee is NULL." );
329 if( index < 0 || this->array->length <= index ) {
331 __FILE__, __LINE__,
"Array Index %d is out of bounds for this array.", this->array->length );
334 return this->array->value[index];
338 return this->array->value ==
NULL;
342 return left.
get() == right;
346 return left == right.
get();
350 return left.
get() != right;
354 return left != right.
get();
357 template<
typename T1>
359 return this->array->value == right.
get();
362 template<
typename T1>
364 return this->array->value != right.
get();
370 static void onDeleteFunc(ArrayData* value) {
371 delete [] value->value;
378 template<
typename T,
typename U>
380 return left.
get() == right;
384 template<
typename T,
typename U>
386 return right.
get() == left;
390 template<
typename T,
typename U>
392 return !(left.
get() == right);
396 template<
typename T,
typename U>
398 return right.
get() != left;
410 template<
typename T >
419 return left.
get() < right.
get();
424 return left.
get() < right.
get() ? -1 : right.
get() < left.
get() ? 1 : 0;
438 template<
typename T >
439 struct less<
decaf::lang::ArrayPointer<T> > {
447 return less<T*>()(left.
get(), right.
get());
friend bool operator==(const T *left, const ArrayPointer &right)
Definition: ArrayPointer.h:345
ArrayPointer & operator=(const ArrayPointer &right)
Assigns the value of right to this Pointer and increments the reference Count.
Definition: ArrayPointer.h:282
ArrayPointer(int size, const T &fillWith)
Create a new ArrayPointer instance and allocates an internal array that is sized using the passed in ...
Definition: ArrayPointer.h:146
virtual ~ArrayPointerComparator()
Definition: ArrayPointer.h:414
A comparison function, which imposes a total ordering on some collection of objects.
Definition: Comparator.h:40
virtual int compare(const ArrayPointer< T > &left, const ArrayPointer< T > &right) const
Definition: ArrayPointer.h:423
bool operator==(const ArrayPointer< T1 > &right) const
Definition: ArrayPointer.h:358
bool operator!() const
Definition: ArrayPointer.h:337
int decrementAndGet()
Atomically decrements by one the current value.
#define NULL
Definition: Config.h:33
Definition: ArrayPointer.h:432
ArrayPointer(const ArrayPointer &value)
Copy constructor.
Definition: ArrayPointer.h:187
static void arraycopy(const char *src, std::size_t srcPos, char *dest, std::size_t destPos, std::size_t length)
Copies the number of elements specified by length from the source array starting at the given source ...
friend bool operator!=(const T *left, const ArrayPointer &right)
Definition: ArrayPointer.h:353
static void fill(E *array, int size, const E &value)
Fills an array with the specified element.
Definition: Arrays.h:57
const T & ConstReferenceType
Definition: ArrayPointer.h:100
ArrayPointer()
Default Constructor.
Definition: ArrayPointer.h:110
Definition: IndexOutOfBoundsException.h:31
ArrayPointer(const PointerType value, int size)
Explicit Constructor, creates an ArrayPointer that contains value with a single reference.
Definition: ArrayPointer.h:172
int length() const
Returns the current size of the contained array or zero if the array is NULL.
Definition: ArrayPointer.h:249
An int value that may be updated atomically.
Definition: AtomicInteger.h:37
PointerType get() const
Gets the real array pointer that is contained within this Pointer.
Definition: ArrayPointer.h:239
decaf::lang::ArrayPointer< T > first_argument_type
Definition: ArrayPointer.h:441
ArrayPointer & operator=(const ArrayPointer< T1 > &right)
Definition: ArrayPointer.h:292
void reset(T *value, int size=0)
Resets the ArrayPointer to hold the new value.
Definition: ArrayPointer.h:208
Decaf's implementation of a Smart Pointer that is a template on a Type and is Thread Safe if the defa...
Definition: ArrayPointer.h:51
Definition: IllegalArgumentException.h:31
bool operator()(const decaf::lang::ArrayPointer< T > &left, const decaf::lang::ArrayPointer< T > &right) const
Definition: ArrayPointer.h:445
ReferenceType operator[](int index)
Dereference Operator, returns a reference to the Contained value.
Definition: ArrayPointer.h:310
ConstReferenceType operator[](int index) const
Definition: ArrayPointer.h:323
friend bool operator==(const ArrayPointer &left, const T *right)
Definition: ArrayPointer.h:341
ArrayPointer(int size)
Create a new ArrayPointer instance and allocates an internal array that is sized using the passed in ...
Definition: ArrayPointer.h:119
Definition: NullPointerException.h:32
ArrayPointer clone() const
Creates a new ArrayPointer instance that is a clone of the value contained in this ArrayPointer...
Definition: ArrayPointer.h:267
This implementation of Comparator is designed to allows objects in a Collection to be sorted or teste...
Definition: ArrayPointer.h:411
void swap(ArrayPointer &value)
Exception Safe Swap Function.
Definition: ArrayPointer.h:257
T * PointerType
Definition: ArrayPointer.h:98
T & ReferenceType
Definition: ArrayPointer.h:99
bool result_type
Definition: ArrayPointer.h:443
friend bool operator!=(const ArrayPointer &left, const T *right)
Definition: ArrayPointer.h:349
bool operator!=(const ArrayPointer< T1 > &right) const
Definition: ArrayPointer.h:363
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements...
Definition: AprPool.h:25
decaf::lang::ArrayPointer< T > second_argument_type
Definition: ArrayPointer.h:442
T * release()
Releases the Pointer held and resets the internal pointer value to Null.
Definition: ArrayPointer.h:223
virtual ~ArrayPointer()
Definition: ArrayPointer.h:191