KrisLibrary  1.0.0
GridTable.h
1 #ifndef GRID_TABLE_H
2 #define GRID_TABLE_H
3 
4 #include "Grid.h"
5 
6 namespace Geometry {
7 
13 template <class T>
14 class GridTable
15 {
16 public:
17  typedef Grid::Index Index;
18  //typedef bool (*QueryCallback)(T&);
19 
20  GridTable(int numDims,Real h=1);
21  GridTable(const Vector& h);
22 
23  void Clear();
24  void Init(const Index& imin,const Index& imax);
25  void Set(const T& val);
26 
27  inline T& operator[](const Index& i) { return values[ElementIndex(i)]; }
28  inline const T& operator[](const Index& i) const { return values[ElementIndex(i)]; }
29 
30  int ElementIndex(const Index& i) const;
31 
32  Grid grid;
33  Index imin,imax;
34  vector<T> values;
35 };
36 
37 
38 template <class T>
39 GridTable<T>::GridTable(int numDims,Real h)
40  :grid(numDims,h),imin(numDims,0),imax(numDims,0),values(1)
41 {}
42 
43 template <class T>
45  :grid(h),imin(h.n,0),imax(h.n,0),values(1)
46 {}
47 
48 template <class T>
50 {
51  std::fill(imin.begin(),imin.end(),0);
52  std::fill(imax.begin(),imax.end(),0);
53  values.resize(1);
54 }
55 
56 template <class T>
57 void GridTable<T>::Init(const Index& _imin,const Index& _imax)
58 {
59  Assert(imin.size()==_imin.size());
60  Assert(imax.size()==_imax.size());
61  imin = _imin;
62  imax = _imax;
63  int size=1;
64  for(size_t i=0;i<imin.size();i++) {
65  Assert(imax[i] >= imin[i]);
66  size *= (imax[i]-imin[i]+1);
67  }
68  values.resize(size);
69 }
70 
71 template <class T>
72 void GridTable<T>::Set(const T& val)
73 {
74  fill(values.begin(),values.end(),val);
75 }
76 
77 template <class T>
78 int GridTable<T>::ElementIndex(const Index& i) const
79 {
80  Assert(i.size()==imin.size());
81  int index=0;
82  for(size_t k=0;k<imin.size();k++) {
83  index *= (imax[k]-imin[k]+1);
84  Assert(i[k] >= imin[k] && i[k] <= imax[k]);
85  index += i[k]-imin[k];
86  }
87  Assert(index >= 0 && index < (int)values.size());
88  return index;
89 }
90 
91 } //namespace Geometry
92 
93 #endif
A table with entry T on a gridding of n-dimensional space.
Definition: GridTable.h:14
A gridding of n-dimensional space.
Definition: Grid.h:19
An integer tuple class.
Definition: IntTuple.h:14
Contains all definitions in the Geometry package.
Definition: AnyGeometry.h:11