PTLib  Version 2.10.4
PBaseArray< T > Class Template Reference

This template class maps the PAbstractArray to a specific element type. More...

#include <array.h>

Inheritance diagram for PBaseArray< T >:
PAbstractArray PContainer PObject PBYTEArray PCharArray PDWORDArray PIntArray PLongArray PScalarArray< T > PShortArray PUnsignedArray PWORDArray

List of all members.

Public Member Functions

Construction
 PBaseArray (PINDEX initialSize=0)
 Construct a new dynamic array of elements of the specified type.
 PBaseArray (T const *buffer, PINDEX length, PBoolean dynamic=true)
 Construct a new dynamic array of elements of the specified type.
Overrides from class PObject
virtual PObjectClone () const
 Clone the object.
Overrides from class PContainer
PBoolean SetAt (PINDEX index, T val)
 Set the specific element in the array.
GetAt (PINDEX index) const
 Get a value from the array.
void Attach (const T *buffer, PINDEX bufferSize)
 Attach a pointer to a static block to the base array type.
T * GetPointer (PINDEX minSize=0)
 Get a pointer to the internal array and assure that it is of at least the specified size.
New functions for class
operator[] (PINDEX index) const
 Get a value from the array.
T & operator[] (PINDEX index)
 Get a reference to value from the array.
 operator T const * () const
 Get a pointer to the internal array.
PBoolean Concatenate (const PBaseArray &array)
 Concatenate one array to the end of this array.

Protected Member Functions

virtual void PrintElementOn (ostream &stream, PINDEX index) const
 PBaseArray (PContainerReference &reference)

Detailed Description

template<class T>
class PBaseArray< T >

This template class maps the PAbstractArray to a specific element type.

The functions in this class primarily do all the appropriate casting of types.

Note that if templates are not used the PBASEARRAY macro will simulate the template instantiation.

The following classes are instantiated automatically for the basic scalar types:


Constructor & Destructor Documentation

template<class T>
PBaseArray< T >::PBaseArray ( PINDEX  initialSize = 0) [inline]

Construct a new dynamic array of elements of the specified type.

The array is initialised to all zero bytes. Note that this may not be logically equivalent to the zero value for the type, though this would be very rare.

Parameters:
initialSizeInitial number of elements in the array.
template<class T>
PBaseArray< T >::PBaseArray ( T const *  buffer,
PINDEX  length,
PBoolean  dynamic = true 
) [inline]

Construct a new dynamic array of elements of the specified type.

Parameters:
bufferPointer to an array of the elements of type T.
lengthNumber of elements pointed to by buffer.
dynamicBuffer is copied and dynamically allocated.
template<class T>
PBaseArray< T >::PBaseArray ( PContainerReference reference) [inline, protected]

Member Function Documentation

template<class T>
void PBaseArray< T >::Attach ( const T *  buffer,
PINDEX  bufferSize 
) [inline]

Attach a pointer to a static block to the base array type.

The pointer is used directly and will not be copied to a dynamically allocated buffer. If the SetSize() function is used to change the size of the buffer, the object will be converted to a dynamic form with the contents of the static buffer copied to the allocated buffer.

Any dynamically allocated buffer will be freed.

Parameters:
bufferPointer to an array of elements.
bufferSizeNumber of elements pointed to by buffer.

Referenced by PBaseArray< char * >::Attach().

template<class T>
virtual PObject* PBaseArray< T >::Clone ( ) const [inline, virtual]

Clone the object.

Reimplemented from PObject.

Reimplemented in PCaselessString, PBitArray, PString, and PGloballyUniqueID.

template<class T>
PBoolean PBaseArray< T >::Concatenate ( const PBaseArray< T > &  array) [inline]

Concatenate one array to the end of this array.

This function will allocate a new array large enough for the existing contents and the contents of the parameter. The paramters contents is then copied to the end of the existing array.

Note this does nothing and returns false if the target array is not dynamically allocated.

Returns:
true if the memory allocation succeeded.
Parameters:
arrayOther array to concatenate

Referenced by PBaseArray< char * >::Concatenate().

template<class T>
T PBaseArray< T >::GetAt ( PINDEX  index) const [inline]

Get a value from the array.

If the index is beyond the end of the allocated array then a zero value is returned.

Returns:
Value at the array position.
Parameters:
indexPosition on the array to get value from.

Reimplemented in PBitArray.

Referenced by PBaseArray< char * >::operator[](), and PBaseArray< char * >::PrintElementOn().

template<class T>
T* PBaseArray< T >::GetPointer ( PINDEX  minSize = 0) [inline]

Get a pointer to the internal array and assure that it is of at least the specified size.

This is useful when the array contents are being set by some external or system function eg file read.

It is unsafe to assume that the pointer is valid for very long after return from this function. The array may be resized or otherwise changed and the pointer returned invalidated. It should be used for simple calls to atomic functions, or very careful examination of the program logic must be performed.

Returns:
Pointer to the array memory.
Parameters:
minSizeMinimum size for returned buffer pointer.

Reimplemented from PAbstractArray.

Reimplemented in PBitArray.

Referenced by PBaseArray< char * >::GetPointer(), and PASN_OctetString::GetPointer().

template<class T>
PBaseArray< T >::operator T const * ( ) const [inline]

Get a pointer to the internal array.

The user may not modify the contents of this pointer. This is useful when the array contents are required by some external or system function eg file write.

It is unsafe to assume that the pointer is valid for very long after return from this function. The array may be resized or otherwise changed and the pointer returned invalidated. It should be used for simple calls to atomic functions, or very careful examination of the program logic must be performed.

Returns:
Constant pointer to the array memory.

References PAbstractArray::theArray.

template<class T>
T PBaseArray< T >::operator[] ( PINDEX  index) const [inline]

Get a value from the array.

If the index is beyond the end of the allocated array then a zero value is returned.

This is functionally identical to the PContainer::GetAt() function.

Returns:
Value at the array position.
Parameters:
indexPosition on the array to get value from.

Reimplemented in PBitArray.

template<class T>
T& PBaseArray< T >::operator[] ( PINDEX  index) [inline]

Get a reference to value from the array.

If index is beyond the end of the allocated array then the array is expanded. If a memory allocation failure occurs the function asserts.

This is functionally similar to the SetAt() function and allows the array subscript to be an lvalue.

Returns:
Reference to value at the array position.
Parameters:
indexPosition on the array to get value from.
template<class T>
virtual void PBaseArray< T >::PrintElementOn ( ostream &  stream,
PINDEX  index 
) const [inline, protected, virtual]

Reimplemented from PAbstractArray.

template<class T>
PBoolean PBaseArray< T >::SetAt ( PINDEX  index,
val 
) [inline]

Set the specific element in the array.

The array will automatically expand, if necessary, to fit the new element in.

Returns:
true if new memory for the array was successfully allocated.
Parameters:
indexPosition in the array to set the new value.
valValue to set in the array.

Referenced by PScalarArray< T >::ReadElementFrom().


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines