node_iterators.hpp

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 // Copyright (C) 2005 Free Software Foundation, Inc.
00004 //
00005 // This file is part of the GNU ISO C++ Library.  This library is free
00006 // software; you can redistribute it and/or modify it under the
00007 // terms of the GNU General Public License as published by the
00008 // Free Software Foundation; either version 2, or (at your option)
00009 // any later version.
00010 
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 // GNU General Public License for more details.
00015 
00016 // You should have received a copy of the GNU General Public License along
00017 // with this library; see the file COPYING.  If not, write to the Free
00018 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
00019 // USA.
00020 
00021 // As a special exception, you may use this file as part of a free software
00022 // library without restriction.  Specifically, if other files instantiate
00023 // templates or use macros or inline functions from this file, or you compile
00024 // this file and link it with other files to produce an executable, this
00025 // file does not by itself cause the resulting executable to be covered by
00026 // the GNU General Public License.  This exception does not however
00027 // invalidate any other reasons why the executable file might be covered by
00028 // the GNU General Public License.
00029 
00030 // Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
00031 
00032 // Permission to use, copy, modify, sell, and distribute this software
00033 // is hereby granted without fee, provided that the above copyright
00034 // notice appears in all copies, and that both that copyright notice and
00035 // this permission notice appear in supporting documentation. None of
00036 // the above authors, nor IBM Haifa Research Laboratories, make any
00037 // representation about the suitability of this software for any
00038 // purpose. It is provided "as is" without express or implied warranty.
00039 
00045 class const_node_it_
00046 {
00047 
00048 public:
00049 
00050   typedef trivial_iterator_tag iterator_category;
00051 
00052   typedef trivial_iterator_difference_type difference_type;
00053 
00054   typedef const_iterator value_type;
00055 
00056   typedef const_iterator*  pointer;
00057 
00058   typedef const_iterator*  const_pointer;
00059 
00060   typedef const_iterator&  reference;
00061 
00062   typedef const iterator&  const_reference;
00063 
00064 public:
00065 
00066   inline
00067   const_node_it_(const node_pointer p_nd = NULL)
00068 
00069     : m_p_nd(const_cast<node_pointer>(p_nd))
00070   { }
00071 
00072   inline const_iterator
00073   operator*() const
00074   {
00075     return (const_iterator(m_p_nd));
00076   }
00077 
00078   inline const_node_it_
00079   l_child() const
00080   {
00081     return (const_node_it_(m_p_nd->m_p_left));
00082   }
00083 
00084   inline const_node_it_
00085   r_child() const
00086   {
00087     return (const_node_it_(m_p_nd->m_p_right));
00088   }
00089 
00090   inline bool
00091   operator==(const const_node_it_& r_other) const
00092   {
00093     return (m_p_nd == r_other.m_p_nd);
00094   }
00095 
00096   inline bool
00097   operator!=(const const_node_it_& r_other) const
00098   {
00099     return (m_p_nd != r_other.m_p_nd);
00100   }
00101 
00102 private:
00103 
00104   friend class PB_ASSOC_CLASS_C_DEC;
00105 
00106 public:
00107   node_pointer m_p_nd;
00108 };
00109 
00110 class node_it_ : 
00111   public const_node_it_
00112 
00113 {
00114 
00115 public:
00116 
00117   inline
00118   node_it_(const node_pointer p_nd = NULL)
00119 
00120     : const_node_it_(const_cast<node_pointer>(p_nd))
00121   { }
00122 
00123   inline iterator
00124   operator*() const
00125   {
00126     return (iterator(const_node_it_::m_p_nd));
00127   }
00128 
00129   inline node_it_
00130   l_child()
00131   {
00132     return (node_it_(const_node_it_::m_p_nd->m_p_left));
00133   }
00134 
00135   inline node_it_
00136   r_child()
00137   {
00138     return (node_it_(const_node_it_::m_p_nd->m_p_right));
00139   }
00140 
00141 private:
00142   friend class PB_ASSOC_CLASS_C_DEC;
00143 };
00144 

Generated on Tue Feb 2 16:56:20 2010 for GNU C++ STL by  doxygen 1.4.7