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 >:

## Public Member Functions

Construction
| PBaseArray (PINDEX initialSize=0)
| Construct a new dynamic array of elements of the specified type. More...
| PBaseArray (T const *buffer, PINDEX length, PBoolean dynamic=true)
| Construct a new dynamic array of elements of the specified type. More...
Overrides from class PObject
virtual PObject * | Clone () const
| Clone the object. More...
Overrides from class PContainer
PBoolean | SetAt (PINDEX index, T val)
| Set the specific element in the array. More...
T | GetAt (PINDEX index) const
| Get a value from the array. More...
void | Attach (const T *buffer, PINDEX bufferSize)
| Attach a pointer to a static block to the base array type. More...
T * | GetPointer (PINDEX minSize=0)
| Get a pointer to the internal array and assure that it is of at least the specified size. More...
New functions for class
T | operator[] (PINDEX index) const
| Get a value from the array. More...
T & | operator[] (PINDEX index)
| Get a reference to value from the array. More...
| operator T const * () const
| Get a pointer to the internal array. More...
PBoolean | Concatenate (const PBaseArray &array)
| Concatenate one array to the end of this array. More...
Public Member Functions inherited from PAbstractArray
| PAbstractArray (PINDEX elementSizeInBytes, PINDEX initialSize=0)
| Create a new dynamic array of `initalSize` elements of `elementSizeInBytes` bytes each. More...
| PAbstractArray (PINDEX elementSizeInBytes, const void *buffer, PINDEX bufferSizeInElements, PBoolean dynamicAllocation)
| Create a new dynamic array of `bufferSizeInElements` elements of `elementSizeInBytes` bytes each. More...
virtual void | PrintOn (ostream &strm) const
| Output the contents of the object to the stream. More...
virtual void | ReadFrom (istream &strm)
| Input the contents of the object from the stream. More...
virtual Comparison | Compare (const PObject &obj) const
| Get the relative rank of the two arrays. More...
virtual PBoolean | SetSize (PINDEX newSize)
| Set the size of the array in elements. More...
void | Attach (const void *buffer, PINDEX bufferSize)
| Attach a pointer to a static block to the base array type. More...
void * | GetPointer (PINDEX minSize=1)
| Get a pointer to the internal array and assure that it is of at least the specified size. More...
PBoolean | Concatenate (const PAbstractArray &array)
| Concatenate one array to the end of this array. More...
Public Member Functions inherited from PContainer
| PContainer (PINDEX initialSize=0)
| Create a new unique container. More...
| PContainer (const PContainer &cont)
| Create a new refernce to container. More...
PContainer & | operator= (const PContainer &cont)
| Assign one container reference to another. More...
virtual | ~PContainer ()
| Destroy the container class. More...
virtual PINDEX | GetSize () const
| Get the current size of the container. More...
PBoolean | SetMinSize (PINDEX minSize)
| Set the minimum size of container. More...
virtual PBoolean | IsEmpty () const
| Determine if the container is empty. More...
PBoolean | IsUnique () const
| Determine if container is unique reference. More...
virtual PBoolean | MakeUnique ()
| Make this instance to be the one and only reference to the container contents. More...
Public Member Functions inherited from PObject
virtual | ~PObject ()
virtual PINDEX | HashFunction () const
| This function yields a hash value required by the `PDictionary` class. More...
virtual Comparison | CompareObjectMemoryDirect (const PObject &obj) const
| Determine the byte wise comparison of two objects. More...
bool | operator== (const PObject &obj) const
| Compare the two objects. More...
bool | operator!= (const PObject &obj) const
| Compare the two objects. More...
bool | operator< (const PObject &obj) const
| Compare the two objects. More...
bool | operator> (const PObject &obj) const
| Compare the two objects. More...
bool | operator<= (const PObject &obj) const
| Compare the two objects. More...
bool | operator>= (const PObject &obj) const
| Compare the two objects. More...
virtual const char * | GetClass (unsigned ancestor=0) const
| Get the current dynamic type of the object instance. More...
PBoolean | IsClass (const char *cls) const
virtual PBoolean | InternalIsDescendant (const char *clsName) const
| Determine if the dynamic type of the current instance is a descendent of the specified class. More...

## Protected Member Functions

virtual void | PrintElementOn (ostream &stream, PINDEX index) const
| PBaseArray (PContainerReference &reference)
Protected Member Functions inherited from PAbstractArray
PBoolean | InternalSetSize (PINDEX newSize, PBoolean force)
virtual void | ReadElementFrom (istream &stream, PINDEX index)
| PAbstractArray (PContainerReference &reference, PINDEX elementSizeInBytes)
Protected Member Functions inherited from PContainer
| PContainer (int dummy, const PContainer *cont)
| Constructor used in support of the Clone() function. More...
| PContainer (PContainerReference &reference)
| Construct using static PContainerReference. More...
virtual void | DestroyContents ()=0
| Destroy the container contents. More...
virtual void | AssignContents (const PContainer &c)
| Copy the container contents. More...
void | CopyContents (const PContainer &c)
| Copy the container contents. More...
void | CloneContents (const PContainer *src)
| Create a duplicate of the container contents. More...
void | Destruct ()
| Internal function called from container destructors. More...
virtual void | DestroyReference ()
| Destroy the PContainerReference instance. More...
Protected Member Functions inherited from PObject
| PObject ()
| Constructor for PObject, made protected so cannot ever create one on its own. More...

## Additional Inherited Members

Public Types inherited from PObject
enum | Comparison { LessThan = -1, EqualTo = 0, GreaterThan = 1 }
| Result of the comparison operation performed by the `Compare()` function. More...
Static Public Member Functions inherited from PObject
static Comparison | InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
| Internal function caled from CompareObjectMemoryDirect() More...
static const char * | Class ()
| Get the name of the class as a C string. More...
Protected Attributes inherited from PAbstractArray
PINDEX | elementSize
| Size of an element in bytes. More...
char * | theArray
| Pointer to the allocated block of memory. More...
PBoolean | allocatedDynamically
| Flag indicating the array was allocated on the heap. More...
Protected Attributes inherited from PContainer
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:

- `PCharArray`
- `PBYTEArray`
- `PShortArray`
- `PWORDArray`
- `PIntArray`
- `PUnsignedArray`
- `PLongArray`
- `PDWORDArray`

## Constructor & Destructor Documentation

## PBaseArray() [1/3]

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

  initialSize | Initial number of elements in the array.

## PBaseArray() [2/3]

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

  buffer | Pointer to an array of the elements of type T.
  length | Number of elements pointed to by `buffer`.
  dynamic | Buffer is copied and dynamically allocated.

## PBaseArray() [3/3]

template<class T>

PBaseArray< T >::PBaseArray | ( | PContainerReference & | reference | ) |

inline protected

## Member Function Documentation

## Attach()

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

  buffer | Pointer to an array of elements.
  bufferSize | Number of elements pointed to by buffer.

## Clone()

template<class T>

virtual PObject* PBaseArray< T >::Clone | ( |  | ) | const

inline virtual

Clone the object.

Reimplemented from PObject.

Reimplemented in PCaselessString, PBitArray, PString, and PGloballyUniqueID.

## Concatenate()

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

  array | Other array to concatenate

## GetAt()

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

  index | Position on the array to get value from.

Referenced by PStringDictionary< K >::operator()(), and PStringDictionary< K >::RemoveAt().

## GetPointer()

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

  minSize | Minimum size for returned buffer pointer.

## operator T const *()

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.

## operator[]() [1/2]

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

  index | Position on the array to get value from.

Referenced by PStringArray::container().

## operator[]() [2/2]

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

  index | Position on the array to get value from.

## PrintElementOn()

template<class T>

virtual void PBaseArray< T >::PrintElementOn | ( | ostream & | stream,
|  | PINDEX | index
| ) |  | const

inline protected virtual

Reimplemented from PAbstractArray.

## SetAt()

template<class T>

PBoolean PBaseArray< T >::SetAt | ( | PINDEX | index,
|  | T | 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

  index | Position in the array to set the new value.
  val | Value to set in the array.

Referenced by PStringOptions::Set(), PStringOptions::SetBoolean(), and PStringOptions::SetString().

The documentation for this class was generated from the following file:

- array.h