typedef T P_##cls##_Base_Type; \
class cls :
public PAbstractArray { \
PCLASSINFO(cls,
PAbstractArray) \
public: \
inline cls(PINDEX initialSize = 0) \
:
PAbstractArray(
sizeof(P_##cls##_Base_Type), initialSize) { } \
inline cls(P_##cls##_Base_Type
const * buffer, PINDEX length, BOOL dynamic = TRUE) \
:
PAbstractArray(
sizeof(P_##cls##_Base_Type), buffer, length, dynamic) { } \
virtual PObject * Clone() const \
{
return PNEW cls(*
this, GetSize()); } \
inline BOOL SetAt(PINDEX index, P_##cls##_Base_Type val) \
{
return SetMinSize(index+1) && \
val==(((P_##cls##_Base_Type *)theArray)[index] = val); } \
inline P_##cls##_Base_Type GetAt(PINDEX index)
const \
{ PASSERTINDEX(index);
return index < GetSize() ? \
((P_##cls##_Base_Type*)theArray)[index] : (P_##cls##_Base_Type)0; } \
inline P_##cls##_Base_Type operator[](PINDEX index)
const \
{ PASSERTINDEX(index);
return GetAt(index); } \
inline P_##cls##_Base_Type & operator[](PINDEX index) \
{ PASSERTINDEX(index);
PAssert(SetMinSize(index+1), POutOfMemory); \
return ((P_##cls##_Base_Type *)theArray)[index]; } \
inline void Attach(
const P_##cls##_Base_Type * buffer, PINDEX bufferSize) \
{
PAbstractArray::Attach(buffer, bufferSize); } \
inline P_##cls##_Base_Type * GetPointer(PINDEX minSize = 0) \
{
return (P_##cls##_Base_Type *)
PAbstractArray::GetPointer(minSize); } \
inline operator P_##cls##_Base_Type const *() const \
{
return (P_##cls##_Base_Type
const *)theArray; } \
inline BOOL Concatenate(cls
const & array) \
{
return PAbstractArray::Concatenate(array); } \
}