Grid 0.7.0
Lexicographic.h
Go to the documentation of this file.
1#ifndef GRID_LEXICOGRAPHIC_H
2#define GRID_LEXICOGRAPHIC_H
3
4
5namespace Grid{
6
8 public:
9
10 template<class coor_t>
11 static accelerator_inline void CoorFromIndex (coor_t& coor,int64_t index,const coor_t &dims){
12 int nd= dims.size();
13 coor.resize(nd);
14 for(int d=0;d<nd;d++){
15 coor[d] = index % dims[d];
16 index = index / dims[d];
17 }
18 }
19
20 template<class coor_t>
21 static accelerator_inline void IndexFromCoor (const coor_t& coor,int64_t &index,const coor_t &dims){
22 int nd=dims.size();
23 int stride=1;
24 index=0;
25 for(int d=0;d<nd;d++){
26 index = index+(int64_t)stride*coor[d];
27 stride=stride*dims[d];
28 }
29 }
30 template<class coor_t>
31 static accelerator_inline void IndexFromCoor (const coor_t& coor,int &index,const coor_t &dims){
32 int64_t index64;
33 IndexFromCoor(coor,index64,dims);
34 assert(index64<2*1024*1024*1024LL);
35 index = (int) index64;
36 }
37
38 template<class coor_t>
39 static inline void IndexFromCoorReversed (const coor_t& coor,int64_t &index,const coor_t &dims){
40 int nd=dims.size();
41 int stride=1;
42 index=0;
43 for(int d=nd-1;d>=0;d--){
44 index = index+(int64_t)stride*coor[d];
45 stride=stride*dims[d];
46 }
47 }
48 template<class coor_t>
49 static inline void IndexFromCoorReversed (const coor_t& coor,int &index,const coor_t &dims){
50 int64_t index64;
51 IndexFromCoorReversed(coor,index64,dims);
52 if ( index64>=2*1024*1024*1024LL ){
53 // std::cout << " IndexFromCoorReversed " << coor<<" index " << index64<< " dims "<<dims<<std::endl;
54 }
55 assert(index64<2*1024*1024*1024LL);
56 index = (int) index64;
57 }
58 template<class coor_t>
59 static inline void CoorFromIndexReversed (coor_t& coor,int64_t index,const coor_t &dims){
60 int nd= dims.size();
61 coor.resize(nd);
62 for(int d=nd-1;d>=0;d--){
63 coor[d] = index % dims[d];
64 index = index / dims[d];
65 }
66 }
67
68
69 };
70
71}
72#endif
#define accelerator_inline
static void IndexFromCoorReversed(const coor_t &coor, int64_t &index, const coor_t &dims)
static void CoorFromIndexReversed(coor_t &coor, int64_t index, const coor_t &dims)
static accelerator_inline void IndexFromCoor(const coor_t &coor, int64_t &index, const coor_t &dims)
static accelerator_inline void CoorFromIndex(coor_t &coor, int64_t index, const coor_t &dims)
static void IndexFromCoorReversed(const coor_t &coor, int &index, const coor_t &dims)
static accelerator_inline void IndexFromCoor(const coor_t &coor, int &index, const coor_t &dims)