00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _VOLINDEX_H_
00014 #define _VOLINDEX_H_
00015
00016 #include "REAL.H"
00017 #include "IntVect.H"
00018 #include "SPMD.H"
00019 #include "NamespaceHeader.H"
00020
00022
00030 class VolIndex
00031 {
00032 public:
00034 inline
00035 VolIndex();
00036
00038
00039
00041
00042
00044 inline
00045 bool operator== (const VolIndex& a_vofin) const;
00046
00048 inline
00049 const IntVect& gridIndex() const;
00050
00052 inline
00053 int cellIndex() const;
00054
00056 inline
00057 bool isDefined() const;
00058
00060
00061
00063 void define(const VolIndex& a_vofin);
00064
00066 inline
00067 VolIndex(const IntVect& a_ix,const int& a_vofID);
00068
00070 inline
00071 void define(const IntVect& a_ix,const int& a_vofID);
00072
00073 inline
00074 bool operator<(const VolIndex& rhs) const;
00075
00076 inline
00077 bool operator!=(const VolIndex& rhs) const;
00082 int linearSize() const;
00083 void linearOut(void* const a_outBuf) const;
00084 void linearIn(const void* const inBuf);
00087
00088 static size_t iv_offset, index_offset;
00089 static int initializeOffsets();
00090
00091 private:
00092
00093
00094 IntVect m_iv;
00095
00096
00097 int m_cellIndex;
00098
00099 bool m_isDefined;
00100 };
00101
00102 std::ostream& operator<< (std::ostream& os,
00103 const VolIndex& iv);
00104
00105 inline bool VolIndex::operator<(const VolIndex& rhs) const
00106 {
00107 if(m_iv.lexLT(rhs.m_iv)) return true;
00108 if(m_iv == rhs.m_iv) {
00109 return m_cellIndex < rhs.m_cellIndex;
00110 }
00111 return false;
00112 }
00113
00114 inline
00115 const IntVect&
00116 VolIndex::gridIndex() const
00117 {
00118 return m_iv;
00119 }
00120
00121
00122 inline
00123 int
00124 VolIndex::cellIndex() const
00125 {
00126 return m_cellIndex;
00127 }
00128
00129 inline void
00130 VolIndex::define(const IntVect& a_ix,const int& a_vofID)
00131 {
00132 m_isDefined = true;
00133 m_iv = a_ix;
00134 m_cellIndex = a_vofID;
00135 }
00136
00137 inline
00138 VolIndex::VolIndex(const IntVect& a_ix,const int& a_vofID)
00139 :m_iv(a_ix), m_cellIndex(a_vofID), m_isDefined(true)
00140 {
00141 ;
00142 }
00143
00144 inline bool
00145 VolIndex::isDefined() const
00146 {
00147 return m_isDefined;
00148 }
00149
00150
00151 inline
00152 VolIndex::VolIndex()
00153 :m_iv(IntVect::Zero), m_cellIndex(-1), m_isDefined(false)
00154 {
00155
00156
00157
00158 }
00159
00160 inline bool
00161 VolIndex::operator== (const VolIndex& a_vofin) const
00162 {
00163 return ((m_iv == a_vofin.m_iv)&&
00164 (m_cellIndex == a_vofin.m_cellIndex));
00165 }
00166
00167 inline bool
00168 VolIndex::operator!=(const VolIndex& rhs) const
00169 {
00170 return !(*this == rhs);
00171 }
00172
00173 #include "NamespaceFooter.H"
00174 #endif