18#ifndef _DECAF_LANG_ARRAYPOINTER_H_
19#define _DECAF_LANG_ARRAYPOINTER_H_
50 template<
typename T >
57 ArrayData(
const ArrayData&);
58 ArrayData& operator= (
const ArrayData&);
66 ArrayData() : value(
NULL),
length(0), refs(1) {}
70 __FILE__, __LINE__,
"Non-NULL array pointer cannot have a size <= zero" );
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();
175 this->array =
new ArrayData(value, size);
176 }
catch (std::exception& ex) {
179 throw std::bad_alloc();
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);
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());
int length() const
Returns the current size of the contained array or zero if the array is NULL.
Definition ArrayPointer.h:249
T * release()
Releases the Pointer held and resets the internal pointer value to Null.
Definition ArrayPointer.h:223
ArrayPointer()
Default Constructor.
Definition ArrayPointer.h:110
This implementation of Comparator is designed to allows objects in a Collection to be sorted or teste...
Definition ArrayPointer.h:411
virtual bool operator()(const ArrayPointer< T > &left, const ArrayPointer< T > &right) const
Definition ArrayPointer.h:418
virtual int compare(const ArrayPointer< T > &left, const ArrayPointer< T > &right) const
Definition ArrayPointer.h:423
virtual ~ArrayPointerComparator()
Definition ArrayPointer.h:414
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
PointerType get() const
Gets the real array pointer that is contained within this Pointer.
Definition ArrayPointer.h:239
void swap(ArrayPointer &value)
Exception Safe Swap Function.
Definition ArrayPointer.h:257
ArrayPointer(const PointerType value, int size)
Explicit Constructor, creates an ArrayPointer that contains value with a single reference.
Definition ArrayPointer.h:172
ArrayPointer(const ArrayPointer &value)
Copy constructor.
Definition ArrayPointer.h:187
ArrayPointer(int size)
Create a new ArrayPointer instance and allocates an internal array that is sized using the passed in ...
Definition ArrayPointer.h:119
void reset(T *value, int size=0)
Resets the ArrayPointer to hold the new value.
Definition ArrayPointer.h:208
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
friend bool operator!=(const T *left, const ArrayPointer &right)
Definition ArrayPointer.h:353
friend bool operator!=(const ArrayPointer &left, const T *right)
Definition ArrayPointer.h:349
virtual ~ArrayPointer()
Definition ArrayPointer.h:191
ArrayPointer clone() const
Creates a new ArrayPointer instance that is a clone of the value contained in this ArrayPointer.
Definition ArrayPointer.h:267
friend bool operator==(const ArrayPointer &left, const T *right)
Definition ArrayPointer.h:341
bool operator!() const
Definition ArrayPointer.h:337
friend bool operator==(const T *left, const ArrayPointer &right)
Definition ArrayPointer.h:345
T & ReferenceType
Definition ArrayPointer.h:99
bool operator==(const ArrayPointer< T1 > &right) const
Definition ArrayPointer.h:358
int length() const
Returns the current size of the contained array or zero if the array is NULL.
Definition ArrayPointer.h:249
T * release()
Releases the Pointer held and resets the internal pointer value to Null.
Definition ArrayPointer.h:223
ReferenceType operator[](int index)
Dereference Operator, returns a reference to the Contained value.
Definition ArrayPointer.h:310
ArrayPointer & operator=(const ArrayPointer< T1 > &right)
Definition ArrayPointer.h:292
const T & ConstReferenceType
Definition ArrayPointer.h:100
ArrayPointer & operator=(const ArrayPointer &right)
Assigns the value of right to this Pointer and increments the reference Count.
Definition ArrayPointer.h:282
bool operator!=(const ArrayPointer< T1 > &right) const
Definition ArrayPointer.h:363
T * PointerType
Definition ArrayPointer.h:98
ArrayPointer()
Default Constructor.
Definition ArrayPointer.h:110
ConstReferenceType operator[](int index) const
Definition ArrayPointer.h:323
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 ...
Definition IllegalArgumentException.h:31
Definition IndexOutOfBoundsException.h:31
Definition NullPointerException.h:32
static void fill(E *array, int size, const E &value)
Fills an array with the specified element.
Definition Arrays.h:57
A comparison function, which imposes a total ordering on some collection of objects.
Definition Comparator.h:40
An int value that may be updated atomically.
Definition AtomicInteger.h:37
int incrementAndGet()
Atomically increments by one the current value.
int decrementAndGet()
Atomically decrements by one the current value.
void set(int newValue)
Sets to the given value.
Definition AtomicInteger.h:74
#define NULL
Definition Config.h:33
Definition ThreadingTypes.h:31
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
decaf::lang::ArrayPointer< T > first_argument_type
Definition ArrayPointer.h:441
bool result_type
Definition ArrayPointer.h:443
bool operator()(const decaf::lang::ArrayPointer< T > &left, const decaf::lang::ArrayPointer< T > &right) const
Definition ArrayPointer.h:445
decaf::lang::ArrayPointer< T > second_argument_type
Definition ArrayPointer.h:442