Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstddef> 7 : #include <ostream> 8 : #include <pup.h> 9 : 10 : /// \cond 11 : namespace PUP { 12 : class er; 13 : } // namespace PUP 14 : /// \endcond 15 : 16 : namespace domain { 17 : /*! 18 : * \ingroup ComputationalDomainGroup 19 : * \brief Index a block of the computational domain. 20 : */ 21 1 : class BlockId { 22 : public: 23 0 : BlockId() = default; 24 0 : explicit BlockId(size_t id) : id_(id) {} 25 : 26 : // NOLINTNEXTLINE(google-runtime-references) 27 0 : void pup(PUP::er& p) { p | id_; } 28 : 29 0 : size_t get_index() const { return id_; } 30 : 31 0 : BlockId& operator++() { 32 : ++id_; 33 : return *this; 34 : } 35 : 36 0 : BlockId& operator--() { 37 : --id_; 38 : return *this; 39 : } 40 : 41 0 : BlockId operator++(int) { 42 : BlockId temp = *this; 43 : id_++; 44 : return temp; 45 : } 46 : 47 0 : BlockId operator--(int) { 48 : BlockId temp = *this; 49 : id_--; 50 : return temp; 51 : } 52 : 53 : private: 54 0 : size_t id_{0}; 55 : }; 56 : 57 0 : inline bool operator==(const BlockId& lhs, const BlockId& rhs) { 58 : return lhs.get_index() == rhs.get_index(); 59 : } 60 : 61 0 : inline bool operator!=(const BlockId& lhs, const BlockId& rhs) { 62 : return not(lhs == rhs); 63 : } 64 : 65 0 : inline std::ostream& operator<<(std::ostream& os, const BlockId& block_id) { 66 : return os << '[' << block_id.get_index() << ']'; 67 : } 68 : 69 : } // namespace domain