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 "BaseIndex.H"
00020 #include "NamespaceHeader.H"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 class VolIndex: public BaseIndex
00032 {
00033 public:
00034
00035 VolIndex();
00036
00037 virtual ~VolIndex();
00038
00039
00040
00041
00042
00043 inline
00044 bool operator== (const VolIndex& a_vofin) const;
00045
00046
00047 inline
00048 const IntVect& gridIndex() const;
00049
00050
00051 inline
00052 int cellIndex() const;
00053
00054
00055 inline
00056 bool isDefined() const;
00057
00058
00059
00060
00061
00062 void define(const VolIndex& a_vofin);
00063
00064
00065 inline
00066 VolIndex(const IntVect& a_ix,const int& a_vofID);
00067
00068
00069 inline
00070 void define(const IntVect& a_ix,const int& a_vofID);
00071
00072 inline
00073 bool operator<(const VolIndex& rhs) const;
00074
00075 inline
00076 bool operator!=(const VolIndex& rhs) const;
00077
00078
00079
00080
00081 int linearSize() const;
00082 void linearOut(void* const a_outBuf) const;
00083 void linearIn(const void* const inBuf);
00084
00085
00086
00087 static size_t iv_offset, index_offset;
00088 static int initializeOffsets();
00089
00090
00091 void shift(const IntVect& a_iv)
00092 {
00093 m_iv += a_iv;
00094 }
00095
00096 private:
00097
00098
00099 IntVect m_iv;
00100
00101
00102 int m_cellIndex;
00103
00104 bool m_isDefined;
00105 };
00106
00107 std::ostream& operator<< (std::ostream& os,
00108 const VolIndex& iv);
00109
00110 inline bool VolIndex::operator<(const VolIndex& rhs) const
00111 {
00112 if (m_iv.lexLT(rhs.m_iv))
00113 {
00114 return true;
00115 }
00116 if (m_iv == rhs.m_iv)
00117 {
00118 return m_cellIndex < rhs.m_cellIndex;
00119 }
00120 return false;
00121 }
00122
00123 inline
00124 const IntVect&
00125 VolIndex::gridIndex() const
00126 {
00127 return m_iv;
00128 }
00129
00130
00131 inline
00132 int
00133 VolIndex::cellIndex() const
00134 {
00135 return m_cellIndex;
00136 }
00137
00138 inline void
00139 VolIndex::define(const IntVect& a_ix,const int& a_vofID)
00140 {
00141 m_isDefined = true;
00142 m_iv = a_ix;
00143 m_cellIndex = a_vofID;
00144 }
00145
00146 inline
00147 VolIndex::VolIndex(const IntVect& a_ix,const int& a_vofID)
00148 :BaseIndex(),m_iv(a_ix), m_cellIndex(a_vofID), m_isDefined(true)
00149 {
00150 ;
00151 }
00152
00153 inline bool
00154 VolIndex::isDefined() const
00155 {
00156 return m_isDefined;
00157 }
00158
00159
00160 inline
00161 VolIndex::VolIndex()
00162 :m_iv(IntVect::Zero), m_cellIndex(-1), m_isDefined(false)
00163 {
00164
00165
00166
00167 }
00168
00169 inline bool
00170 VolIndex::operator== (const VolIndex& a_vofin) const
00171 {
00172 return ((m_iv == a_vofin.m_iv)&&
00173 (m_cellIndex == a_vofin.m_cellIndex));
00174 }
00175
00176 inline bool
00177 VolIndex::operator!=(const VolIndex& rhs) const
00178 {
00179 return !(*this == rhs);
00180 }
00181
00182 #include "NamespaceFooter.H"
00183 #endif