00001
00002
00003 #include <stdlib.h>
00004 #include <string.h>
00005 #include <assert.h>
00006 #include <stdio.h>
00007 #include "StMultiArray.h"
00008
00009 StMultiArrayBase::StMultiArrayBase(int n1,int n2)
00010 {
00011 int des[]={n1,n2};
00012 Init(des,2);
00013 }
00014
00015 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3)
00016 {
00017 int des[]={n1,n2,n3};
00018 Init(des,3);
00019 }
00020
00021 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4)
00022 {
00023 int des[]={n1,n2,n3,n4};
00024 Init(des,4);
00025 }
00026
00027 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4,int n5)
00028 {
00029 int des[]={n1,n2,n3,n4,n5};
00030 Init(des,5);
00031 }
00032
00033 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4,int n5,int n6)
00034 {
00035 int des[]={n1,n2,n3,n4,n5,n6};
00036 Init(des,6);
00037 }
00038
00039 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4,int n5,int n6,int n7)
00040 {
00041 int des[]={n1,n2,n3,n4,n5,n6,n7};
00042 Init(des,7);
00043 }
00044
00045 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4,int n5,int n6,int n7,int n8)
00046 {
00047 int des[]={n1,n2,n3,n4,n5,n6,n7,n8};
00048 Init(des,8);
00049 }
00050
00051 void StMultiArrayBase::Init(int *sz,int n)
00052 {
00053 memset(this,0,sizeof(*this));
00054 mNDes = n;
00055 mDes[n]=1;
00056 for (int i=n-1;i>=0;i--) {mDes[i]=mDes[i+1]*sz[i];}
00057 }
00058
00059 void StMultiArrayBase::AddIdx(int i)
00060 {
00061 mSft +=mDes[++mTally]*i;
00062 assert(mTally<=mNDes+1);
00063 }
00064
00065 int StMultiArrayBase::GetIdx()
00066 {
00067 assert(mTally==mNDes);
00068 int i=mSft; mSft=0; mTally=0;
00069 return i;
00070 }
00071
00072 int StMultiArrayBase::GetKdx()
00073 {
00074 assert(mTally==mNDes-1);
00075 int i=mSft; mSft=0; mTally=0;
00076 return i;
00077 }
00078
00079 void StMultiArrayBase::Clear()
00080 {
00081 mSft=0; mTally=0;
00082 }
00083
00084 void StMultiArrayBase::Test()
00085 {
00086 int A[2][3][4];
00087 for (int i1=0;i1<2;i1++) {
00088 for (int i2=0;i2<3;i2++) {
00089 for (int i3=0;i3<4;i3++) {A[i1][i2][i3] = 100*i1+10*i2+i3;}}};
00090
00091 StMultiArray<int > MA(2,3,4);
00092 MA = A[0][0];
00093 for (int i1=0;i1<2;i1++) {
00094 for (int i2=0;i2<3;i2++) {
00095 for (int i3=0;i3<4;i3++) {
00096 int v = MA[i1][i2][i3];
00097 int* vp = MA[i1][i2];
00098 printf("%d = %d = %d\n",100*i1+10*i2+i3,v,vp[i3]);
00099 }}}
00100
00101 }