awUtil::ArrayN< D, T > Class Template Reference

template<int D, typename T>
class awUtil::ArrayN< D, T >

#include <awUtilArrayN.h>

List of all members.

Public Types

typedef T  Type

Public Member Functions

  ArrayN (const int dim[D])
  ~ArrayN ()
const T *  data () const
T *  data ()
int  size () const
int  dim (int d) const
void  swap (ArrayN< D, T > &array)
Slice< const T, D-2 >  operator[] (const int i) const
Slice< T, D-2 >  operator[] (const int i)

Member Typedef Documentation


Constructor & Destructor Documentation

ArrayN ( const int  dim[D] ) [inline]
        : m_size(1)
        , m_data(0)
        {
            int d;
            for( d=0; d<D; d++ )
            {
                m_dim[d] = dim[d];
                m_size *= m_dim[d];
            }

            int s = 1;
            for( d=D-1; d>=0; d-- )
            {
                m_stride[d] = s;
                s *= m_dim[d];
            }

            m_data = new T[m_size];
        }
~ArrayN ( ) [inline]
        {
            delete[] m_data;
            m_data = 0;
        }

Member Function Documentation

const T* data ( ) const [inline]
        {
            return m_data;
        }
T* data ( ) [inline]
        {
            return m_data;
        }
int size ( ) const [inline]
        {
            return m_size;
        }
int dim ( int  d ) const [inline]
        {
            assert( d >= 0 && d < D );
            return m_dim[d];
        }
void swap ( ArrayN< D, T > &  array ) [inline]
        {
            swap_attrib(m_size, array.m_size);
            swap_attrib(m_data, array.m_data);
            
            for(int d=0 ; d<D ; d++ )
            {
                swap_attrib(m_dim[d], array.m_dim[d]);
                swap_attrib(m_stride[d], array.m_stride[d]);
            }
        }
Slice<const T,D-2> operator[] ( const int  i ) const [inline]
        {
            return Slice<const T,D-2>
                ( m_data + (i*m_stride[0]), m_stride + 1 );
        }
Slice<T,D-2> operator[] ( const int  i ) [inline]
        {
            return Slice<T,D-2>
                ( m_data + (i*m_stride[0]), m_stride + 1 );
        }