1 /* EList_Iterator class declaration. 2 Copyright (C) 2001-2010 Roberto Bagnara <bagnara@cs.unipr.it> 3 Copyright (C) 2010-2016 BUGSENG srl (http://bugseng.com) 4 5 This file is part of the Parma Polyhedra Library (PPL). 6 7 The PPL is free software; you can redistribute it and/or modify it 8 under the terms of the GNU General Public License as published by the 9 Free Software Foundation; either version 3 of the License, or (at your 10 option) any later version. 11 12 The PPL is distributed in the hope that it will be useful, but WITHOUT 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the Free Software Foundation, 19 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA. 20 21 For the most up-to-date information see the Parma Polyhedra Library 22 site: http://bugseng.com/products/ppl/ . */ 23 24 #ifndef PPL_EList_Iterator_defs_hh 25 #define PPL_EList_Iterator_defs_hh 1 26 27 #include "EList_Iterator_types.hh" 28 #include "Doubly_Linked_Object_types.hh" 29 30 namespace Parma_Polyhedra_Library { 31 32 namespace Implementation { 33 34 //! Returns <CODE>true</CODE> if and only if \p x and \p y are equal. 35 template <typename T> 36 bool operator==(const EList_Iterator<T>& x, const EList_Iterator<T>& y); 37 38 //! Returns <CODE>true</CODE> if and only if \p x and \p y are different. 39 template <typename T> 40 bool operator!=(const EList_Iterator<T>& x, const EList_Iterator<T>& y); 41 42 } // namespace Implementation 43 44 } // namespace Parma_Polyhedra_Library 45 46 //! A class providing iterators for embedded lists. 47 template <typename T> 48 class Parma_Polyhedra_Library::Implementation::EList_Iterator { 49 public: 50 //! Constructs an iterator pointing to nothing. 51 EList_Iterator(); 52 53 //! Constructs an iterator pointing to \p p. 54 explicit EList_Iterator(Doubly_Linked_Object* p); 55 56 //! Changes \p *this so that it points to \p p. 57 EList_Iterator& operator=(Doubly_Linked_Object* p); 58 59 //! Indirect member selector. 60 T* operator->(); 61 62 //! Dereference operator. 63 T& operator*(); 64 65 //! Preincrement operator. 66 EList_Iterator& operator++(); 67 68 //! Postincrement operator. 69 EList_Iterator operator++(int); 70 71 //! Predecrement operator. 72 EList_Iterator& operator--(); 73 74 //! Postdecrement operator. 75 EList_Iterator operator--(int); 76 77 private: 78 //! Embedded pointer. 79 Doubly_Linked_Object* ptr; 80 81 friend bool operator==<T>(const EList_Iterator& x, const EList_Iterator& y); 82 83 friend bool operator!=<T>(const EList_Iterator& x, const EList_Iterator& y); 84 }; 85 86 #include "EList_Iterator_inlines.hh" 87 88 #endif // !defined(PPL_EList_Iterator_defs_hh) 89