|
template <typename T, typename R = typename AllocatorSelector<T, std::tr1::is_pod<T>::value>::allocator > class AcArray
{
public:
AcArray(int initPhysicalLength = 0, int initGrowLength = 8);
AcArray(const AcArray<T,R>&);
~AcArray();
// Copy operator.
//
AcArray<T,R>& operator = (const AcArray<T,R>&);
bool operator == (const AcArray<T,R>&) const;
// Indexing into the array.
//
T& operator [] (int);
const T & operator [] (int) const;
// More access to array-elements.
//
const T & at (int index) const;
T & at (int index);
AcArray<T,R>& setAt (int index, const T& value);
AcArray<T,R>& setAll (const T& value);
T& first ();
const T & first () const;
T& last ();
const T & last () const;
// Adding array-elements.
//
int append (const T& value);
AcArray<T,R>& append (const AcArray<T,R>& array);
AcArray<T,R>& insertAt (int index, const T& value);
// Removing array-elements.
//
AcArray<T,R>& removeAt (int index);
bool remove (const T& value, int start = 0);
AcArray<T,R>& removeFirst ();
AcArray<T,R>& removeLast ();
AcArray<T,R>& removeAll ();
AcArray<T,R>& removeSubArray (int startIndex, int endIndex);
// Query about array-elements.
//
bool contains (const T& value, int start = 0) const;
bool find (const T& value, int& foundAt,
int start = 0) const;
int find (const T& value) const;
int findFrom (const T& value, int start) const;
// Array length.
//
int length () const; // Logical length.
bool isEmpty () const;
int logicalLength() const;
AcArray<T,R>& setLogicalLength(int);
int physicalLength() const;
AcArray<T,R>& setPhysicalLength(int);
// Automatic resizing.
//
int growLength () const;
AcArray<T,R>& setGrowLength(int);
// Utility.
//
AcArray<T,R>& reverse ();
AcArray<T,R>& swap (int i1, int i2);
// Treat as simple array of T.
//
const T* asArrayPtr () const;
T* asArrayPtr ();
protected:
T* mpArray;
int mPhysicalLen;// Actual buffer length.
int mLogicalLen;// Number of items in the array.
int mGrowLen; // Buffer grows by this value.
bool isValid (int) const;
}; |
|