Line data Source code
1 : // The libMesh Finite Element Library. 2 : // Copyright (C) 2002-2025 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 3 : 4 : // This library is free software; you can redistribute it and/or 5 : // modify it under the terms of the GNU Lesser General Public 6 : // License as published by the Free Software Foundation; either 7 : // version 2.1 of the License, or (at your option) any later version. 8 : 9 : // This library is distributed in the hope that it will be useful, 10 : // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 : // Lesser General Public License for more details. 13 : 14 : // You should have received a copy of the GNU Lesser General Public 15 : // License along with this library; if not, write to the Free Software 16 : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 : 18 : 19 : 20 : #ifndef LIBMESH_SIMPLERANGE_H 21 : #define LIBMESH_SIMPLERANGE_H 22 : 23 : #include <utility> 24 : 25 : namespace libMesh 26 : { 27 : 28 : /** 29 : * The \p SimpleRange templated class is intended to make it easy to 30 : * construct ranges from pairs of iterators. 31 : * 32 : * \author Roy H. Stogner 33 : */ 34 : 35 : template <typename IndexType> 36 0 : class SimpleRange 37 : { 38 : public: 39 143921690 : SimpleRange(IndexType begin, IndexType end) : _begin(begin), _end(end) {} 40 : 41 1084569601 : IndexType begin() const { return _begin; } 42 : 43 1109191238 : IndexType end () const { return _end; } 44 : 45 : private: 46 : IndexType _begin, _end; 47 : }; 48 : 49 : 50 : 51 : /** 52 : * Helper function that allows us to treat a homogenous pair as a 53 : * range. Useful for writing range-based for loops over the pair 54 : * returned by std::equal_range() and std::map::equal_range(). 55 : */ 56 : template<typename IndexType> 57 101125134 : SimpleRange<IndexType> as_range(const std::pair<IndexType, IndexType> & p) 58 : { 59 101130318 : return {p.first, p.second}; 60 : } 61 : 62 : 63 : 64 : /** 65 : * As above, but can be used in cases where a std::pair is not 66 : * otherwise involved. 67 : */ 68 : template<typename IndexType> 69 5791769 : SimpleRange<IndexType> as_range(const IndexType & first, 70 : const IndexType & second) 71 : { 72 14480760 : return {first, second}; 73 : } 74 : 75 : } // namespace libMesh 76 : 77 : #endif // LIBMESH_SIMPLERANGE_H