Listing 2: Using the array template

#include <stdio.h>
#include "mdat2.h"
     
void main()
{
     
 try{
  A1D<int,10,19> va1d; 
  va1d[11] = 102;
     
  A2D<int,10,19,20,29> va2d;
  va2d[11][28] = 11;
     
  A3D<int,10,19,20,29,30,39> va3d;
     
     
  int dim1 =va3d.dim();
  int low1 =va3d.begin();
  int high1= va3d.end();
  int dim2=va3d[low1].dim();
  int low2 =va3d[low1].begin();
  int high2 = va3d[low1].end();
     
  int dim3=va3d[low1][low2].dim();
     
  int low3 =va3d[low1][low2].begin();
  int high3 =va3d[low1][low2].end();
  printf("dim: %dX%dX%d\n",dim1,dim2,dim3);
     
     
  for( int i= low1; i<=high1; ++i)
   for( int j=low2; j<=high2; ++j)
    for( int k=low3; k<=high3; ++k)
    va3d[i][j][k] = (i*100+j)*100+k;
     
     
  for( i= low1; i<=high1; ++i)
   for( int j=low2; j<=high2; ++j)
    for( int k=low3; k<=high3; ++k)
     if(va3d[i][j][k] != (i*100+j)*100+k)
      printf("%2d%2d%2d != %d\n",i,j,k,va3d[i][j][k]);
     
  //Projection
  A1D<int, 30,39> va3d_1Dsubarr;
  va3d_1Dsubarr = va3d[10][20];
  for(i=va3d_1Dsubarr.begin(); i<=va3d_1Dsubarr.end(); ++i)
   printf("[%d]=%d\n",i,va3d_1Dsubarr[i]);
     
     
  A3D<int,10,19,20,29,30,39> *pva3d= new A3D<int,10,19,20,29,30,39>;
     
  A3D<int,10,19,20,29,30,39>& rva3d = *pva3d;
     
  //raise range error exception
  //va3d[1][20][30] = 1;
  //va3d[10][2][31] = 2;
  va3d[10][20][3] = 3;
     
     
  puts("\nend");
  while(1);
 }
 catch(RangeException RE)
 {
  char buf[128];
  sprintf(buf,
  "The %d-D(sub)array:\n  The subscript %d is out of range: %d:%d\n",
   RE.m_dim,RE.m_index,RE.m_low,RE.m_high);
  puts(buf);
 }
     
     
}
     
//End of File