1951a39d68df598db08dfced8b4707755864a0492Ying Wang// -*- C++ -*- 2951a39d68df598db08dfced8b4707755864a0492Ying Wang 343f272afd56a57640c62c952f9266478bacf0244Andrew Hsieh// Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. 4951a39d68df598db08dfced8b4707755864a0492Ying Wang// 5951a39d68df598db08dfced8b4707755864a0492Ying Wang// This file is part of the GNU ISO C++ Library. This library is free 6951a39d68df598db08dfced8b4707755864a0492Ying Wang// software; you can redistribute it and/or modify it under the terms 7951a39d68df598db08dfced8b4707755864a0492Ying Wang// of the GNU General Public License as published by the Free Software 8951a39d68df598db08dfced8b4707755864a0492Ying Wang// Foundation; either version 3, or (at your option) any later 9951a39d68df598db08dfced8b4707755864a0492Ying Wang// version. 10951a39d68df598db08dfced8b4707755864a0492Ying Wang 11951a39d68df598db08dfced8b4707755864a0492Ying Wang// This library is distributed in the hope that it will be useful, but 12951a39d68df598db08dfced8b4707755864a0492Ying Wang// WITHOUT ANY WARRANTY; without even the implied warranty of 13951a39d68df598db08dfced8b4707755864a0492Ying Wang// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14951a39d68df598db08dfced8b4707755864a0492Ying Wang// General Public License for more details. 15951a39d68df598db08dfced8b4707755864a0492Ying Wang 16951a39d68df598db08dfced8b4707755864a0492Ying Wang// Under Section 7 of GPL version 3, you are granted additional 17951a39d68df598db08dfced8b4707755864a0492Ying Wang// permissions described in the GCC Runtime Library Exception, version 18951a39d68df598db08dfced8b4707755864a0492Ying Wang// 3.1, as published by the Free Software Foundation. 19951a39d68df598db08dfced8b4707755864a0492Ying Wang 20951a39d68df598db08dfced8b4707755864a0492Ying Wang// You should have received a copy of the GNU General Public License and 21951a39d68df598db08dfced8b4707755864a0492Ying Wang// a copy of the GCC Runtime Library Exception along with this program; 22951a39d68df598db08dfced8b4707755864a0492Ying Wang// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23951a39d68df598db08dfced8b4707755864a0492Ying Wang// <http://www.gnu.org/licenses/>. 24951a39d68df598db08dfced8b4707755864a0492Ying Wang 25951a39d68df598db08dfced8b4707755864a0492Ying Wang// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. 26951a39d68df598db08dfced8b4707755864a0492Ying Wang 27951a39d68df598db08dfced8b4707755864a0492Ying Wang// Permission to use, copy, modify, sell, and distribute this software 28951a39d68df598db08dfced8b4707755864a0492Ying Wang// is hereby granted without fee, provided that the above copyright 29951a39d68df598db08dfced8b4707755864a0492Ying Wang// notice appears in all copies, and that both that copyright notice 30951a39d68df598db08dfced8b4707755864a0492Ying Wang// and this permission notice appear in supporting documentation. None 31951a39d68df598db08dfced8b4707755864a0492Ying Wang// of the above authors, nor IBM Haifa Research Laboratories, make any 32951a39d68df598db08dfced8b4707755864a0492Ying Wang// representation about the suitability of this software for any 33951a39d68df598db08dfced8b4707755864a0492Ying Wang// purpose. It is provided "as is" without express or implied 34951a39d68df598db08dfced8b4707755864a0492Ying Wang// warranty. 35951a39d68df598db08dfced8b4707755864a0492Ying Wang 36951a39d68df598db08dfced8b4707755864a0492Ying Wang/** 37951a39d68df598db08dfced8b4707755864a0492Ying Wang * @file const_iterator.hpp 38951a39d68df598db08dfced8b4707755864a0492Ying Wang * Contains an iterator class used for const ranging over the elements of the 39951a39d68df598db08dfced8b4707755864a0492Ying Wang * table. 40951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 41951a39d68df598db08dfced8b4707755864a0492Ying Wang 42951a39d68df598db08dfced8b4707755864a0492Ying Wang// Const range-type iterator. 43951a39d68df598db08dfced8b4707755864a0492Ying Wangclass const_iterator_ : 44951a39d68df598db08dfced8b4707755864a0492Ying Wang public const_point_iterator_ 45951a39d68df598db08dfced8b4707755864a0492Ying Wang 46951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 47951a39d68df598db08dfced8b4707755864a0492Ying Wang 48951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 49951a39d68df598db08dfced8b4707755864a0492Ying Wang 50951a39d68df598db08dfced8b4707755864a0492Ying Wang // Category. 51951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef std::forward_iterator_tag iterator_category; 52951a39d68df598db08dfced8b4707755864a0492Ying Wang 53951a39d68df598db08dfced8b4707755864a0492Ying Wang // Difference type. 54951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename Allocator::difference_type difference_type; 55951a39d68df598db08dfced8b4707755864a0492Ying Wang 56951a39d68df598db08dfced8b4707755864a0492Ying Wang // Iterator's value type. 57951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef value_type_ value_type; 58951a39d68df598db08dfced8b4707755864a0492Ying Wang 59951a39d68df598db08dfced8b4707755864a0492Ying Wang // Iterator's pointer type. 60951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef pointer_ pointer; 61951a39d68df598db08dfced8b4707755864a0492Ying Wang 62951a39d68df598db08dfced8b4707755864a0492Ying Wang // Iterator's const pointer type. 63951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef const_pointer_ const_pointer; 64951a39d68df598db08dfced8b4707755864a0492Ying Wang 65951a39d68df598db08dfced8b4707755864a0492Ying Wang // Iterator's reference type. 66951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef reference_ reference; 67951a39d68df598db08dfced8b4707755864a0492Ying Wang 68951a39d68df598db08dfced8b4707755864a0492Ying Wang // Iterator's const reference type. 69951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef const_reference_ const_reference; 70951a39d68df598db08dfced8b4707755864a0492Ying Wang 71951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 72951a39d68df598db08dfced8b4707755864a0492Ying Wang 73951a39d68df598db08dfced8b4707755864a0492Ying Wang // Default constructor. 74951a39d68df598db08dfced8b4707755864a0492Ying Wang inline 75951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator_() 76951a39d68df598db08dfced8b4707755864a0492Ying Wang 7743f272afd56a57640c62c952f9266478bacf0244Andrew Hsieh : m_p_tbl(0) 78951a39d68df598db08dfced8b4707755864a0492Ying Wang { } 79951a39d68df598db08dfced8b4707755864a0492Ying Wang 80951a39d68df598db08dfced8b4707755864a0492Ying Wang // Increments. 81951a39d68df598db08dfced8b4707755864a0492Ying Wang inline const_iterator_& 82951a39d68df598db08dfced8b4707755864a0492Ying Wang operator++() 83951a39d68df598db08dfced8b4707755864a0492Ying Wang { 84951a39d68df598db08dfced8b4707755864a0492Ying Wang m_p_tbl->inc_it_state(base_type::m_p_value, m_pos); 85951a39d68df598db08dfced8b4707755864a0492Ying Wang 86951a39d68df598db08dfced8b4707755864a0492Ying Wang return (*this); 87951a39d68df598db08dfced8b4707755864a0492Ying Wang } 88951a39d68df598db08dfced8b4707755864a0492Ying Wang 89951a39d68df598db08dfced8b4707755864a0492Ying Wang // Increments. 90951a39d68df598db08dfced8b4707755864a0492Ying Wang inline const_iterator_ 91951a39d68df598db08dfced8b4707755864a0492Ying Wang operator++(int) 92951a39d68df598db08dfced8b4707755864a0492Ying Wang { 93951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator_ ret =* this; 94951a39d68df598db08dfced8b4707755864a0492Ying Wang 95951a39d68df598db08dfced8b4707755864a0492Ying Wang m_p_tbl->inc_it_state(base_type::m_p_value, m_pos); 96951a39d68df598db08dfced8b4707755864a0492Ying Wang 97951a39d68df598db08dfced8b4707755864a0492Ying Wang return (ret); 98951a39d68df598db08dfced8b4707755864a0492Ying Wang } 99951a39d68df598db08dfced8b4707755864a0492Ying Wang 100951a39d68df598db08dfced8b4707755864a0492Ying Wangprotected: 101951a39d68df598db08dfced8b4707755864a0492Ying Wang 102951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef const_point_iterator_ base_type; 103951a39d68df598db08dfced8b4707755864a0492Ying Wang 104951a39d68df598db08dfced8b4707755864a0492Ying Wangprotected: 105951a39d68df598db08dfced8b4707755864a0492Ying Wang 106951a39d68df598db08dfced8b4707755864a0492Ying Wang /** 107951a39d68df598db08dfced8b4707755864a0492Ying Wang * Constructor used by the table to initiate the generalized 108951a39d68df598db08dfced8b4707755864a0492Ying Wang * pointer and position (e.g., this is called from within a find() 109951a39d68df598db08dfced8b4707755864a0492Ying Wang * of a table. 110951a39d68df598db08dfced8b4707755864a0492Ying Wang * */ 111951a39d68df598db08dfced8b4707755864a0492Ying Wang inline 112951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator_(const_pointer_ p_value, PB_DS_GEN_POS pos, const PB_DS_CLASS_C_DEC* p_tbl) : const_point_iterator_(p_value), 113951a39d68df598db08dfced8b4707755864a0492Ying Wang m_p_tbl(p_tbl), 114951a39d68df598db08dfced8b4707755864a0492Ying Wang m_pos(pos) 115951a39d68df598db08dfced8b4707755864a0492Ying Wang { } 116951a39d68df598db08dfced8b4707755864a0492Ying Wang 117951a39d68df598db08dfced8b4707755864a0492Ying Wangprotected: 118951a39d68df598db08dfced8b4707755864a0492Ying Wang 119951a39d68df598db08dfced8b4707755864a0492Ying Wang /** 120951a39d68df598db08dfced8b4707755864a0492Ying Wang * Pointer to the table object which created the iterator (used for 121951a39d68df598db08dfced8b4707755864a0492Ying Wang * incrementing its position. 122951a39d68df598db08dfced8b4707755864a0492Ying Wang * */ 123951a39d68df598db08dfced8b4707755864a0492Ying Wang const PB_DS_CLASS_C_DEC* m_p_tbl; 124951a39d68df598db08dfced8b4707755864a0492Ying Wang 125951a39d68df598db08dfced8b4707755864a0492Ying Wang PB_DS_GEN_POS m_pos; 126951a39d68df598db08dfced8b4707755864a0492Ying Wang 127951a39d68df598db08dfced8b4707755864a0492Ying Wang friend class PB_DS_CLASS_C_DEC; 128951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 129951a39d68df598db08dfced8b4707755864a0492Ying Wang 130