Introduction
CStaticArray
is a template based class that encapsulates a C style single dimensional static array.
template <class T,long cFirstIndex,long cLastIndex>
class CStaticArray
{
public:
CStaticArray(){}
CStaticArray(const T& t){Initialise(t);}
long GetSize()const {return cLastIndex-cFirstIndex+1;}
long GetFirstIndex()const {return cFirstIndex;}
long GetLastIndex()const {return cLastIndex;}
bool IsValidIndex(long nIndex) const
{
return nIndex>=GetFirstIndex() && nIndex<=GetLastIndex();
}
size_t GetNoOfBytes()const
{
return GetSize()*sizeof(T);
}
T& operator[](long nIndex)
{
ASSERT(IsValidIndex(nIndex));
return m_Data[nIndex-cFirstIndex];
}
const T& operator[](long nIndex)const
{
ASSERT(IsValidIndex(nIndex));
return m_Data[nIndex-cFirstIndex];
}
void Initialise(const T& t)
{
for(long i=0;i<GetSize();i++)
m_Data[i]=t;
}
void Initialise(long nStart,long nEnd,const T& t)
{
for(long i=nStart;i<=nEnd;i++)
(*this)[i]=t;
}
operator const T*()const {return m_Data;}
operator T*() {return m_Data;}
protected:
T m_Data[cLastIndex-cFirstIndex+1];
};
John Curtis runs Fatlab Software Pty. Ltd. which provides software services to companies in Australia and is currently developing a range of productivity apps.
He has 20+ years experience writing C++ software and can write Java, C#, Javascript when needed!
Specialities include IOT device code, Realtime control, Embedded Linux, Bare bones....
Loves playing with Arduino and Raspberry Pi based solutions for small scale problems.