65.9K
CodeProject is changing. Read more.
Home

Simple static array class

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.14/5 (3 votes)

Mar 21, 2002

viewsIcon

63638

A simple static array class that provides range checking and non-zero indexing

Introduction

CStaticArray is a template based class that encapsulates a C style single dimensional static array.

////////////////////////////////////////////////////////
// CStaticArray
// provides:
// 1. Range checking
// 2. Non-zero indexing
// 3. Simple initialisation
////////////////////////////////////////////////////////
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];
};