source: src/Helpers/IteratorAdaptors.hpp@ d1e0c0

Last change on this file since d1e0c0 was d1e0c0, checked in by Frederik Heber <heber@…>, 15 years ago

Added IteratorAdaptor code by Emile Cormier.

  • Library version is now 5:0:5, API version is still 1.0.10.
  • lets an iterator on an associative container be used with operator*.
  • Property mode set to 100644
File size: 1.9 KB
Line 
1/*
2 * IteratorAdaptors.hpp
3 *
4 * This is all copy&pasted from
5 * http://stackoverflow.com/questions/4908317/iterate-through-stl-sequence-and-associative-containers-using-same-code
6 *
7 * Kudos go to Emile Cormier for writing this adapter code.
8 *
9 * I just adapted it to sequence through either value or key and changed the name.
10 *
11 * Created on: Feb 21, 2011
12 * Author: heber
13 */
14
15#ifndef ITERATORADAPTORS_HPP_
16#define ITERATORADAPTORS_HPP_
17
18#include <iostream>
19#include <map>
20#include <vector>
21#include <boost/iterator/iterator_adaptor.hpp>
22
23/** This class wraps an iterator and implements a dereferencer (operator*) that
24 * always returns the value
25 */
26template <class BaseIterator>
27class MapValueIterator :
28 public boost::iterator_adaptor<
29 MapValueIterator<BaseIterator>,
30 BaseIterator,
31 typename BaseIterator::value_type::second_type >
32{
33public:
34 typedef typename BaseIterator::value_type::second_type& reference;
35
36 MapValueIterator() {}
37
38 explicit MapValueIterator(BaseIterator base)
39 : MapValueIterator::iterator_adaptor_(base) {}
40
41 private:
42 friend class boost::iterator_core_access;
43 reference dereference() const
44 {return this->base_reference()->second;}
45};
46
47/** This class wraps an iterator and implements a dereferencer (operator*) that
48 * always returns the key
49 */
50template <class BaseIterator>
51class MapKeyIterator :
52 public boost::iterator_adaptor<
53 MapKeyIterator<BaseIterator>,
54 BaseIterator,
55 typename BaseIterator::value_type::first_type >
56{
57public:
58 typedef typename BaseIterator::value_type::first_type& reference;
59
60 MapKeyIterator() {}
61
62 explicit MapKeyIterator(BaseIterator base)
63 : MapKeyIterator::iterator_adaptor_(base) {}
64
65 private:
66 friend class boost::iterator_core_access;
67 reference dereference() const
68 {return this->base_reference()->first;}
69};
70
71#endif /* ITERATORADAPTORS_HPP_ */
Note: See TracBrowser for help on using the repository browser.