#ifndef TMWA_COMPAT_ITER_HPP #define TMWA_COMPAT_ITER_HPP // iter.hpp - tools for dealing with iterators // // Copyright © 2012-2014 Ben Longbons // // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . # include "fwd.hpp" # include /// Simple class to use a pair of iterators with foreach template class IteratorPair { It _b, _e; public: IteratorPair(It b, It e) : _b(b), _e(e) {} It begin() { return _b; } It end() { return _e; } }; template IteratorPair iterator_pair(It b, It e) { return {b, e}; } template class PassthroughMath { public: static T inced(T v) { return ++v; } }; // An iterator that just directly contains an integer-like value // TODO port this once the new integer API happens template> class ValueIterator { T value; public: typedef std::forward_iterator_tag iterator_category; typedef void difference_type; typedef T value_type; typedef void reference; typedef void pointer; public: ValueIterator(T v) : value(v) {} T operator *() { return value; } ValueIterator& operator++ () { value = Math::inced(value); return *this; } friend bool operator == (ValueIterator l, ValueIterator r) { return l.value == r.value; } friend bool operator != (ValueIterator l, ValueIterator r) { return !(l == r); } }; template IteratorPair> value_range(T b, T e) { return {b, e}; } #endif // TMWA_COMPAT_ITER_HPP