00001 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- 00002 // vi: set et ts=4 sw=2 sts=2: 00003 00004 #ifndef DUNE_COMMON_LOCALINDEX_HH 00005 #define DUNE_COMMON_LOCALINDEX_HH 00006 00007 #include <cstddef> 00008 00009 namespace Dune 00010 { 00011 00012 00026 enum LocalIndexState {VALID, DELETED}; 00027 00028 00032 class LocalIndex 00033 { 00034 public: 00039 LocalIndex() : 00040 localIndex_(0), state_(VALID){} 00041 00042 00047 LocalIndex(std::size_t index) : 00048 localIndex_(index), state_(VALID){} 00053 inline const std::size_t& local() const; 00054 00058 inline operator std::size_t() const; 00059 00065 inline LocalIndex& operator=(std::size_t index); 00066 00071 inline LocalIndexState state() const; 00072 00077 inline void setState(LocalIndexState state); 00078 00079 private: 00081 std::size_t localIndex_; 00082 00089 char state_; 00090 00091 }; 00092 00093 00094 00095 inline const std::size_t& LocalIndex::local() const { 00096 return localIndex_; 00097 } 00098 00099 inline LocalIndex::operator std::size_t() const { 00100 return localIndex_; 00101 } 00102 00103 inline LocalIndex& LocalIndex::operator=(std::size_t index){ 00104 localIndex_ = index; 00105 return *this; 00106 } 00107 00108 inline LocalIndexState LocalIndex::state() const { 00109 return static_cast<LocalIndexState>(state_); 00110 } 00111 00112 inline void LocalIndex::setState(LocalIndexState state){ 00113 state_ = static_cast<char>(state); 00114 } 00115 00118 } // namespace Dune 00119 00120 #endif