CMS 3D CMS Logo

IgMapUniqueIterator.h

Go to the documentation of this file.
00001 #ifndef IGUANA_FRAMEWORK_MAP_UNIQUE_ITERATOR_H
00002 # define IGUANA_FRAMEWORK_MAP_UNIQUE_ITERATOR_H
00003 
00004 //<<<<<< INCLUDES                                                       >>>>>>
00005 
00006 # include "Iguana/Framework/interface/config.h"
00007 # include <iterator>
00008 
00009 //<<<<<< PUBLIC DEFINES                                                 >>>>>>
00010 //<<<<<< PUBLIC CONSTANTS                                               >>>>>>
00011 //<<<<<< PUBLIC TYPES                                                   >>>>>>
00012 //<<<<<< PUBLIC VARIABLES                                               >>>>>>
00013 //<<<<<< PUBLIC FUNCTIONS                                               >>>>>>
00014 //<<<<<< CLASS DECLARATIONS                                             >>>>>>
00015 
00017 template <class Map>
00018 class IgMapUniqueIterator ITERATOR_BASE(bidirectional_iterator,
00019                                         typename Map::mapped_type,
00020                                         typename Map::difference_type)
00021 {
00022 public:
00023     typedef std::bidirectional_iterator_tag     iterator_category;
00024     typedef typename Map::const_iterator        base_iterator;
00025     typedef typename Map::key_type              key_type;
00026     typedef typename Map::mapped_type           value_type;
00027     typedef typename Map::difference_type       difference_type;
00028     typedef const value_type &                  reference;
00029     typedef const value_type *                  pointer;
00030 
00031     IgMapUniqueIterator (void);
00032     IgMapUniqueIterator (base_iterator pos, const Map *map);
00033     // implicit copy constructor
00034     // implicit assignment operator
00035     // implicit destructor
00036 
00037     bool                operator== (const IgMapUniqueIterator &x) const;
00038     bool                operator!= (const IgMapUniqueIterator &x) const;
00039     reference           operator* (void) const;
00040     pointer             operator-> (void) const;
00041     IgMapUniqueIterator &operator++ (void);
00042     IgMapUniqueIterator operator++ (int);
00043     IgMapUniqueIterator &operator-- (void);
00044     IgMapUniqueIterator operator-- (int);
00045 
00046  private:
00047     base_iterator       m_pos;
00048     const Map           *m_map;
00049 };
00050 
00051 //<<<<<< INLINE PUBLIC FUNCTIONS                                        >>>>>>
00052 //<<<<<< INLINE MEMBER FUNCTIONS                                        >>>>>>
00053 
00054 template <class Map>
00055 inline
00056 IgMapUniqueIterator<Map>::IgMapUniqueIterator (void)
00057 {}
00058 
00059 template <class Map>
00060 inline
00061 IgMapUniqueIterator<Map>::IgMapUniqueIterator (base_iterator pos, const Map *map)
00062     : m_pos (pos),
00063       m_map (map)
00064 {}
00065 
00066 template <class Map>
00067 inline bool
00068 IgMapUniqueIterator<Map>::operator== (const IgMapUniqueIterator &x) const
00069 { return m_pos == x.m_pos; }
00070 
00071 template <class Map>
00072 inline bool
00073 IgMapUniqueIterator<Map>::operator!= (const IgMapUniqueIterator &x) const
00074 { return m_pos != x.m_pos; }
00075 
00076 template <class Map>
00077 inline typename IgMapUniqueIterator<Map>::reference
00078 IgMapUniqueIterator<Map>::operator* (void) const
00079 { return m_pos->second; }
00080 
00081 template <class Map>
00082 inline typename IgMapUniqueIterator<Map>::pointer
00083 IgMapUniqueIterator<Map>::operator-> (void) const
00084 { return &m_pos->second; }
00085 
00086 template <class Map>
00087 inline IgMapUniqueIterator<Map> &
00088 IgMapUniqueIterator<Map>::operator++ (void)
00089 {
00090     const key_type &current = m_pos->first;
00091     while (m_pos != m_map->end () && m_pos->first == current)
00092         ++m_pos;
00093     return *this;
00094 }
00095 
00096 template <class Map>
00097 inline IgMapUniqueIterator<Map>
00098 IgMapUniqueIterator<Map>::operator++ (int)
00099 { IgMapUniqueIterator tmp (*this); ++*this; return tmp; }
00100 
00101 template <class Map>
00102 inline IgMapUniqueIterator<Map> &
00103 IgMapUniqueIterator<Map>::operator-- (void)
00104 {
00105     const key_type &current = m_pos->first;
00106     while (m_pos != m_map->begin () && m_pos->first == current)
00107         --m_pos;
00108     return *this;
00109 }
00110 
00111 template <class Map>
00112 inline IgMapUniqueIterator<Map>
00113 IgMapUniqueIterator<Map>::operator-- (int)
00114 { IgMapUniqueIterator tmp (*this); --*this; return tmp; }
00115 
00116 #endif // IGUANA_FRAMEWORK_MAP_UNIQUE_ITERATOR_H

Generated on Tue Jun 9 17:38:17 2009 for CMSSW by  doxygen 1.5.4