37 IntMap4(
int keyW,
int keyX,
int keyY,
int keyZ,
int step)
38 : keyWmax(keyW), keyXmax(keyX), keyYmax(keyY), keyZmax(keyZ), keyStep(step)
40 Map=
new int***[keyWmax];
41 int ***mappointpointbuf =
new int**[keyWmax*keyXmax];
42 int **mappointbuf =
new int*[keyWmax*keyXmax*keyYmax];
43 int *mapbuf=
new int[keyWmax*keyXmax*keyYmax*keyZmax];
45 for(
int w=0;w<keyWmax;w++)
47 Map[w]= mappointpointbuf + (w*keyXmax);
48 for(
int x=0;x<keyXmax;x++)
50 Map[w][x]= mappointbuf + (w*keyXmax+x)*keyYmax;
51 for(
int y=0;y<keyYmax;y++)
53 Map[w][x][y]= mapbuf + ((w*keyXmax+x)*keyYmax+y)*keyZmax;
58 stepTable=
new int [keyXmax*keyStep];
59 for(
int s=0;s<keyXmax*keyStep;s++)
60 stepTable[s]=s/keyStep;
64 : keyWmax(obj.keyWmax), keyXmax(obj.keyXmax), keyYmax(obj.keyYmax), keyZmax(obj.keyZmax),
65 keyStep(obj.keyStep), Map(0), stepTable(0)
67 if (keyWmax > 0 && keyXmax > 0 && keyYmax > 0 && keyZmax > 0)
69 Map =
new int***[keyWmax];
70 int ***mappointpointbuf =
new int** [keyWmax*keyXmax];
71 int **mappointbuf =
new int* [keyWmax*keyXmax*keyYmax];
72 int *mapbuf =
new int [keyWmax*keyXmax*keyYmax*keyZmax];
74 for(
int w=0; w<keyWmax; w++)
76 Map[w] = mappointpointbuf + (w*keyXmax);
77 for(
int x=0; x<keyXmax; x++)
79 Map[w][x] = mappointbuf + (w*keyXmax+x) * keyYmax;
80 for(
int y=0; y<keyYmax; y++)
82 Map[w][x][y] = mapbuf + ((w*keyXmax+x)*keyYmax+y) * keyZmax;
83 for (
int z=0; z<keyZmax; z++)
84 Map[w][x][y][z] = obj.Map[w][x][y][z];
89 if (keyXmax > 0 && keyStep > 0)
91 stepTable=
new int [keyXmax*keyStep];
92 for(
int s=0; s<keyXmax*keyStep; s++)
93 stepTable[s] = s/keyStep;
102 delete [] Map[0][0][0];
112 void buildMap(
int keyW=1,
int keyX=1,
int keyY=1,
int keyZ=1,
int step=1)
123 Map=
new int***[keyWmax];
124 int ***mappointpointbuf =
new int**[keyWmax*keyXmax];
125 int **mappointbuf =
new int*[keyWmax*keyXmax*keyYmax];
126 int *mapbuf=
new int[keyWmax*keyXmax*keyYmax*keyZmax];
127 for(
int w=0;w<keyWmax;w++)
129 Map[w]= mappointpointbuf + (w*keyXmax);
130 for(
int x=0;x<keyXmax;x++)
132 Map[w][x]= mappointbuf + (w*keyXmax+x)*keyYmax;
133 for(
int y=0;y<keyYmax;y++)
134 Map[w][x][y]= mapbuf + ((w*keyXmax+x)*keyYmax+y)*keyZmax;
139 stepTable=
new int [keyXmax*keyStep];
140 for(
int s=0;s<keyXmax*keyStep;s++)
141 stepTable[s]=s/keyStep;
151 int ***mappointpointbuf = NULL;
152 int **mappointbuf = NULL;
161 Map=
new int***[keyWmax];
162 mappointpointbuf =
new int**[keyWmax*keyXmax];
163 mappointbuf =
new int*[keyWmax*keyXmax*keyYmax];
164 mapbuf=
new int[keyWmax*keyXmax*keyYmax*keyZmax];
166 for(
int w=0;w<keyWmax;w++)
171 Map[w]= mappointpointbuf + (w*keyXmax);
172 for(
int x=0;x<keyXmax;x++)
177 Map[w][x]= mappointbuf + (w*keyXmax+x)*keyYmax;
178 for(
int y=0;y<keyYmax;y++)
183 Map[w][x][y]= mapbuf + ((w*keyXmax+x)*keyYmax+y)*keyZmax;
184 PUParray(p,Map[w][x][y],keyZmax);
189 if( p.isUnpacking() && (stepTable == 0) )
190 stepTable=
new int[keyXmax*keyStep];
191 PUParray(p,stepTable,keyXmax*keyStep);
198 inline int getWmax(){
return(keyWmax);}
199 inline int getXmax(){
return(keyXmax);}
200 inline int getYmax(){
return(keyYmax);}
201 inline int getZmax(){
return(keyZmax);}
202 inline int get(
int W,
int X,
int Y,
int Z) {
209 #define USE_INT_MAP_MATH
210 #ifdef USE_INT_MAP_MATH
211 return(Map[W][X/keyStep][Y/keyStep][Z]);
213 return(Map[W][stepTable[X]][stepTable[Y]][Z]);
217 inline void set(
int W,
int X,
int Y,
int Z,
int value){
219 CkAssert(X/keyStep<keyXmax);
220 CkAssert(Y/keyStep<keyYmax);
222 CkAssert(numPes>value);
223 Map[W][X/keyStep][Y/keyStep][Z]=value;
227 for(
int w=0;w<keyWmax;w++)
228 for(
int x=0;x<keyXmax;x++)
229 for(
int y=0;y<keyYmax;y++)
230 for(
int z=0;z<keyZmax;z++)
231 CkPrintf(
"%d %d %d %d %d \n",w,x,y,z,
get(w,x*keyStep,y*keyStep,z));
233 IntMap4(){keyWmax=0;keyXmax=0; keyYmax=0, keyZmax=0; keyStep=1; Map=NULL; stepTable=0; }
234 IntMap4(
IntMap4 *fromMap,
int offsetX,
int offsetY,
int offsetZ,
bool torus );
235 void translate(
IntMap4 *fromMap,
int offsetX,
int offsetY,
int offsetZ,
bool torus );
248 IntMap3(
int keyX,
int keyY,
int keyZ,
int step)
249 : keyXmax(keyX), keyYmax(keyY), keyZmax(keyZ)
254 Map=
new int**[keyXmax];
255 int **mappointbuf =
new int*[keyXmax*keyYmax];
256 int *mapbuf=
new int[keyXmax*keyYmax*keyZmax];
257 for(
int x=0;x<keyXmax;x++)
259 Map[x]= mappointbuf + (x*keyYmax);
260 for(
int y=0;y<keyYmax;y++)
262 Map[x][y]= mapbuf + (x*keyYmax+y)*keyZmax;
263 memset(Map[x][y],-1,keyZmax*
sizeof(
int));
278 void buildMap(
int keyX=1,
int keyY=1,
int keyZ=1,
int step=1)
286 CkAssert(keyXmax<10000000);
287 CkAssert(keyYmax<10000000);
288 CkAssert(keyZmax<10000000);
289 Map=
new int**[keyXmax];
290 int **mappointbuf =
new int*[keyXmax*keyYmax];
291 int *mapbuf=
new int[keyXmax*keyYmax*keyZmax];
292 for(
int x=0;x<keyXmax;x++)
294 Map[x]= mappointbuf + (x*keyYmax);
295 for(
int y=0;y<keyYmax;y++)
297 Map[x][y]= mapbuf + (x*keyYmax+y)*keyZmax;
298 memset(Map[x][y],-1,keyZmax*
sizeof(
int));
307 CkAssert(keyXmax<10000000);
308 CkAssert(keyYmax<10000000);
309 CkAssert(keyZmax<10000000);
310 CkAssert(keyXmax>=0);
311 CkAssert(keyYmax>=0);
312 CkAssert(keyZmax>=0);
313 int **mappointbuf = NULL;
321 Map=
new int**[keyXmax];
322 mappointbuf =
new int*[keyXmax*keyYmax];
323 mapbuf=
new int[keyXmax*keyYmax*keyZmax];
325 for(
int x=0;x<keyXmax;x++)
330 Map[x]= mappointbuf + (x*keyYmax);
331 for(
int y=0;y<keyYmax;y++)
335 Map[x][y]= mapbuf + (x*keyYmax+y)*keyZmax;
336 PUParray(p,Map[x][y],keyZmax);
343 inline int getXmax(){
return(keyXmax);}
344 inline int getYmax(){
return(keyYmax);}
345 inline int getZmax(){
return(keyZmax);}
346 inline int get(
int X,
int Y,
int Z) {
347 return(Map[X][Y][Z]);
350 inline void set(
int X,
int Y,
int Z,
int value){
354 CkAssert(numPes>value);
357 int getCentroid(
int torusMap);
360 for(
int x=0;x<keyXmax;x++)
361 for(
int y=0;y<keyYmax;y++)
362 for(
int z=0;z<keyZmax;z++)
363 CkPrintf(
"%d %d %d %d \n",x,y,z,
get(x,y,z));
365 IntMap3(){keyXmax=0; keyYmax=0, keyZmax=0; Map=NULL;}
366 void translate(
IntMap3 *fromMap,
int offsetX,
int offsetY,
int offsetZ,
bool torus );
379 if (obj.keyXmax >= 0 && obj.keyYmax >= 0)
381 int *mapbuf=
new int[keyXmax*keyYmax];
383 memcpy(mapbuf, obj.Map[0], keyXmax * keyYmax *
sizeof(
int));
385 memset(mapbuf, -1, keyXmax * keyYmax *
sizeof(
int));
386 Map =
new int*[keyXmax];
387 for(
int x=0;x<keyXmax;x++)
388 Map[x] = mapbuf + keyYmax * x;
401 IntMap2on2(
int keyX,
int keyY): keyXmax(keyX), keyYmax(keyY)
403 CkAssert(keyXmax>=0);
404 CkAssert(keyYmax>=0);
405 CkAssert(keyXmax<10000000);
406 CkAssert(keyYmax<10000000);
407 Map=
new int*[keyXmax];
408 int *mapbuf=
new int[keyXmax*keyYmax];
409 for(
int x=0;x<keyXmax;x++)
411 Map[x] = mapbuf + keyYmax * x;
412 memset(Map[x],-1,keyYmax*
sizeof(
int));
416 void buildMap(
int keyX=1,
int keyY=1)
425 CkAssert(keyXmax<10000000);
426 CkAssert(keyYmax<10000000);
428 Map=
new int*[keyXmax];
429 int *mapbuf=
new int[keyXmax*keyYmax];
430 for(
int x=0;x<keyXmax;x++)
432 Map[x] = mapbuf + keyYmax * x;
433 memset(Map[x],-1,keyYmax*
sizeof(
int));
441 CkAssert(keyXmax>=0);
442 CkAssert(keyYmax>=0);
443 CkAssert(keyXmax<10000000);
444 CkAssert(keyYmax<10000000);
451 Map=
new int*[keyXmax];
452 mapbuf=
new int[keyXmax*keyYmax];
454 for(
int x=0;x<keyXmax;x++)
459 Map[x] = mapbuf + keyYmax * x;
460 PUParray(p,Map[x], keyYmax);
466 inline int getXmax(){
return(keyXmax);}
467 inline int getYmax(){
return(keyYmax);}
468 int getCentroid(
int torusMap);
469 inline int get(
int X,
int Y) {
477 inline void set(
int X,
int Y,
int value){
478 CkAssert(numPes>value);
485 for(
int x=0;x<keyXmax;x++)
486 for(
int y=0;y<keyYmax;y++)
487 CkPrintf(
"%d %d %d \n",x,y,
get(x,y));
489 void translate(
IntMap2on2 *fromMap,
int offsetX,
int offsetY,
int offsetZ,
bool torus );
501 if(keymax>0 && Map!=NULL)
507 IntMap2on1(){keyXmax=0; keyYmax=0; keymax=0;Map=NULL;}
508 IntMap2on1(
int keyX,
int keyY): keyXmax(keyX), keyYmax(keyY)
512 CkAssert(keyXmax>keyYmax);
513 keymax=keyXmax*keyYmax;
514 Map=
new int[keymax];
516 void buildMap(
int keyX=1,
int keyY=1)
522 CkAssert(keyXmax>keyYmax);
523 keymax=keyXmax*keyYmax;
524 Map=
new int[keyXmax];
533 PUParray(p,Map,keymax);
536 inline int getXmax(){
return(keyXmax);}
537 inline int getYmax(){
return(keyYmax);}
538 inline int getmax(){
return(keymax);}
539 inline int get(
int X,
int Y) {
544 return(Map[Y*keyXmax +X]);
547 inline void set(
int X,
int Y,
int value){
548 CkAssert(numPes>value);
551 Map[Y*keyXmax +X]=value;
555 for(
int x=0;x<keyXmax;x++)
556 for(
int y=0;y<keyYmax;y++)
557 CkPrintf(
"%d %d %d \n",x,y,
get(x,y));
559 void translate(
IntMap2on1 *fromMap,
int offsetX,
int offsetY,
int offsetZ,
bool torus );
568 if(keyXmax>0 && Map!=NULL)
574 IntMap1(){keyXmax=0; Map=NULL;}
575 IntMap1(
int keyX): keyXmax(keyX)
578 Map=
new int[keyXmax];
580 void buildMap(
int keyX=1,
int keyY=1)
584 Map=
new int[keyXmax];
590 Map=
new int[keyXmax];
591 PUParray(p,Map,keyXmax);
594 inline int getXmax(){
return(keyXmax);}
595 inline int getmax(){
return(keyXmax);}
596 inline int get(
int X) {
603 inline void set(
int X,
int value){
604 CkAssert(numPes>value);
608 int getCentroid(
int torusMap);
611 for(
int x=0;x<keyXmax;x++)
612 CkPrintf(
"%d %d \n",x,
get(x));
614 void translate(
IntMap1 *fromMap,
int offsetX,
int offsetY,
int offsetZ,
bool torus );
IntMap2on2(const IntMap2on2 &obj)
Copy constructor.