PTLib  Version 2.18.8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 >:
Collaboration 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 PObjectClone () const
 Clone the object. More...
 
Overrides from class PContainer
PBoolean SetAt (PINDEX index, T val)
 Set the specific element in the array. More...
 
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
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...
 
const void * GetPointer () const
 
virtual PINDEX GetLength () const
 Retrun the length in bytes for the array. 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...
 
PContaineroperator= (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...
 
__inline size_t size () const
 
PBoolean SetMinSize (PINDEX minSize)
 Set the minimum size of container. More...
 
virtual PBoolean IsEmpty () const
 Determine if the container is empty. More...
 
__inline bool empty () const
 
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
__inline unsigned GetTraceContextIdentifier () const
 Get PTRACE context identifier. More...
 
__inline void SetTraceContextIdentifier (unsigned id)
 
__inline void SetTraceContextIdentifier (const PObject &obj)
 
__inline void SetTraceContextIdentifier (const PObject *obj)
 
__inline void CopyTraceContextIdentifier (PObject &obj) const
 
__inline void CopyTraceContextIdentifier (PObject *obj) const
 
virtual ~PObject ()
 
__inline const char * GetClass () const
 
__inline bool IsClass (const char *name) const
 
__inline const PObjectPTraceObjectInstance () const
 
template<class CLS >
CLS * CloneAs () const
 As for Clone() but converts to specified type. More...
 
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...
 

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 __inline void CopyTraceContextIdentifier (PObject &to, const PObject &from)
 
static __inline void CopyTraceContextIdentifier (PObject &to, const PObject *from)
 
static __inline void CopyTraceContextIdentifier (PObject *to, const PObject &from)
 
static __inline void CopyTraceContextIdentifier (PObject *to, const PObject *from)
 
static __inline const char * Class ()
 
static __inline const PObjectPTraceObjectInstance (const char *)
 
static __inline const PObjectPTraceObjectInstance (const PObject *obj)
 
template<typename T >
static Comparison Compare2 (T v1, T v2)
 Compare two types, returning Comparison type. More...
 
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() 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
PContainerReferencereference
 
- Protected Attributes inherited from PObject
unsigned m_traceContextIdentifier
 

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_)
inlineprotected

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.
template<class T>
virtual PObject* PBaseArray< T >::Clone ( ) const
inlinevirtual

Clone the object.

Reimplemented from PObject.

Reimplemented in PCaselessString, PBitArray, PBYTEArray, PCharArray, PString, and PHashTableInfo.

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

Referenced by PBaseArray< PHashTableList >::operator[](), and PBaseArray< PHashTableList >::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.

Referenced by P_WXWINDOWS_DEVICE_CLASS::FrameComplete().

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.
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.
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
inlineprotectedvirtual

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< DWORD >::ReadElementFrom().


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