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