SpatialOps
IntVec.h
Go to the documentation of this file.
1 
29 #ifndef SpatialOps_IntVec_h
30 #define SpatialOps_IntVec_h
31 
32 #include <spatialops/structured/Numeric3Vec.h>
33 
34 namespace SpatialOps{
35  typedef Numeric3Vec<int> IntVec;
36  /*
37  * WARNING! THIS DOES NOT PROVIDE ORDERING THIS ONLY PROVIDES BOX COMPARISON
38  */
39  template<>
40  inline bool IntVec::operator<(const IntVec& v) const{
41  return (ijk[0]<v[0]) & (ijk[1]<v[1]) & (ijk[2]<v[2]);
42  }
43  template<>
44  inline bool IntVec::operator<=(const IntVec& v) const{
45  return (ijk[0]<=v[0]) & (ijk[1]<=v[1]) & (ijk[2]<=v[2]);
46  }
47  template<>
48  inline bool IntVec::operator>(const IntVec& v) const{
49  return (ijk[0]>v[0]) & (ijk[1]>v[1]) & (ijk[2]>v[2]);
50  }
51  template<>
52  inline bool IntVec::operator>=(const IntVec& v) const{
53  return (ijk[0]>=v[0]) & (ijk[1]>=v[1]) & (ijk[2]>=v[2]);
54  }
55 
62  inline int ijk_to_flat( const IntVec& dim, const IntVec& loc ){
63 # ifndef NDEBUG
64  assert( loc[0] < dim[0] && loc[1] < dim[1] && loc[2] < dim[2] );
65  assert( loc[0] >= 0 && loc[1] >= 0 && loc[2] >= 0 );
66 # endif
67  return loc[0] + loc[1]*dim[0] + loc[2]*dim[0]*dim[1];
68  }
69 
76  inline IntVec flat_to_ijk( const IntVec& dim, const int pt ){
77 # ifndef NDEBUG
78  assert( pt >= 0 );
79  assert( pt < dim[0]*dim[1]*dim[2] );
80 # endif
81  return IntVec( pt % dim[0], (pt / dim[0]) % dim[1], pt / (dim[0]*dim[1]) );
82  }
83 
84  inline IntVec min(const IntVec& first, const IntVec& second) {
85  return IntVec((first[0] < second[0] ? first[0] : second[0]),
86  (first[1] < second[1] ? first[1] : second[1]),
87  (first[2] < second[2] ? first[2] : second[2]));
88  }
89 
90  inline IntVec max(const IntVec& first, const IntVec& second) {
91  return IntVec((first[0] > second[0] ? first[0] : second[0]),
92  (first[1] > second[1] ? first[1] : second[1]),
93  (first[2] > second[2] ? first[2] : second[2]));
94  }
95 
96 } // namespace SpatialOps
97 
98 #endif /* SpatialOps_IntVec_h */
IntVec flat_to_ijk(const IntVec &dim, const int pt)
Definition: IntVec.h:76
int ijk_to_flat(const IntVec &dim, const IntVec &loc)
Definition: IntVec.h:62