StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StMultiArray.cxx
1 
2 
3 #include <stdlib.h>
4 #include <string.h>
5 #include <assert.h>
6 #include <stdio.h>
7 #include "StMultiArray.h"
8 //______________________________________________________________________________
9 StMultiArrayBase::StMultiArrayBase(int n1,int n2)
10 {
11  int des[]={n1,n2};
12  Init(des,2);
13 }
14 //______________________________________________________________________________
15 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3)
16 {
17  int des[]={n1,n2,n3};
18  Init(des,3);
19 }
20 //______________________________________________________________________________
21 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4)
22 {
23  int des[]={n1,n2,n3,n4};
24  Init(des,4);
25 }
26 //______________________________________________________________________________
27 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4,int n5)
28 {
29  int des[]={n1,n2,n3,n4,n5};
30  Init(des,5);
31 }
32 //______________________________________________________________________________
33 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4,int n5,int n6)
34 {
35  int des[]={n1,n2,n3,n4,n5,n6};
36  Init(des,6);
37 }
38 //______________________________________________________________________________
39 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4,int n5,int n6,int n7)
40 {
41  int des[]={n1,n2,n3,n4,n5,n6,n7};
42  Init(des,7);
43 }
44 //______________________________________________________________________________
45 StMultiArrayBase::StMultiArrayBase(int n1,int n2,int n3,int n4,int n5,int n6,int n7,int n8)
46 {
47  int des[]={n1,n2,n3,n4,n5,n6,n7,n8};
48  Init(des,8);
49 }
50 //______________________________________________________________________________
51 void StMultiArrayBase::Init(int *sz,int n)
52 {
53  memset(this,0,sizeof(*this));
54  mNDes = n;
55  mDes[n]=1;
56  for (int i=n-1;i>=0;i--) {mDes[i]=mDes[i+1]*sz[i];}
57 }
58 //______________________________________________________________________________
59 void StMultiArrayBase::AddIdx(int i)
60 {
61  mSft +=mDes[++mTally]*i;
62  assert(mTally<=mNDes+1);
63 }
64 //______________________________________________________________________________
65 int StMultiArrayBase::GetIdx()
66 {
67  assert(mTally==mNDes);
68  int i=mSft; mSft=0; mTally=0;
69  return i;
70 }
71 //______________________________________________________________________________
72 int StMultiArrayBase::GetKdx()
73 {
74  assert(mTally==mNDes-1);
75  int i=mSft; mSft=0; mTally=0;
76  return i;
77 }
78 //______________________________________________________________________________
79 void StMultiArrayBase::Clear()
80 {
81  mSft=0; mTally=0;
82 }
83 //______________________________________________________________________________
84 void StMultiArrayBase::Test()
85 {
86  int A[2][3][4];
87  for (int i1=0;i1<2;i1++) {
88  for (int i2=0;i2<3;i2++) {
89  for (int i3=0;i3<4;i3++) {A[i1][i2][i3] = 100*i1+10*i2+i3;}}};
90 
91  StMultiArray<int > MA(2,3,4);
92  MA = A[0][0];
93  for (int i1=0;i1<2;i1++) {
94  for (int i2=0;i2<3;i2++) {
95  for (int i3=0;i3<4;i3++) {
96  int v = MA[i1][i2][i3];
97  int* vp = MA[i1][i2];
98  printf("%d = %d = %d\n",100*i1+10*i2+i3,v,vp[i3]);
99  }}}
100 
101 }