duplicates_iterator.hpp
Go to the documentation of this file.
1 /* Copyright 2003-2013 Joaquin M Lopez Munoz.
2  * Distributed under the Boost Software License, Version 1.0.
3  * (See accompanying file LICENSE_1_0.txt or copy at
4  * http://www.boost.org/LICENSE_1_0.txt)
5  *
6  * See http://www.boost.org/libs/multi_index for library home page.
7  */
8 
9 #ifndef BOOST_MULTI_INDEX_DETAIL_DUPLICATES_ITERATOR_HPP
10 #define BOOST_MULTI_INDEX_DETAIL_DUPLICATES_ITERATOR_HPP
11 
12 #if defined(_MSC_VER)
13 #pragma once
14 #endif
15 
16 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
17 #include <cstddef>
18 #include <iterator>
19 
20 namespace boost{
21 
22 namespace multi_index{
23 
24 namespace detail{
25 
26 /* duplicates_operator is given a range of ordered elements and
27  * passes only over those which are duplicated.
28  */
29 
30 template<typename Node,typename Predicate>
32 {
33 public:
34  typedef typename Node::value_type value_type;
35  typedef std::ptrdiff_t difference_type;
36  typedef const typename Node::value_type* pointer;
37  typedef const typename Node::value_type& reference;
38  typedef std::forward_iterator_tag iterator_category;
39 
40  duplicates_iterator(Node* node_,Node* end_,Predicate pred_):
41  node(node_),begin_chunk(0),end(end_),pred(pred_)
42  {
43  advance();
44  }
45 
46  duplicates_iterator(Node* end_,Predicate pred_):
47  node(end_),begin_chunk(end_),end(end_),pred(pred_)
48  {
49  }
50 
52  {
53  return node->value();
54  }
55 
57  {
58  return &node->value();
59  }
60 
62  {
63  Node::increment(node);
64  sync();
65  return *this;
66  }
67 
69  {
70  duplicates_iterator tmp(*this);
71  ++(*this);
72  return tmp;
73  }
74 
75  Node* get_node()const{return node;}
76 
77 private:
78  void sync()
79  {
80  if(node!=end&&pred(begin_chunk->value(),node->value()))advance();
81  }
82 
83  void advance()
84  {
85  for(Node* node2=node;node!=end;node=node2){
86  Node::increment(node2);
87  if(node2!=end&&!pred(node->value(),node2->value()))break;
88  }
90  }
91 
92  Node* node;
93  Node* begin_chunk;
94  Node* end;
95  Predicate pred;
96 };
97 
98 template<typename Node,typename Predicate>
102 {
103  return x.get_node()==y.get_node();
104 }
105 
106 template<typename Node,typename Predicate>
110 {
111  return !(x==y);
112 }
113 
114 } /* namespace multi_index::detail */
115 
116 } /* namespace multi_index */
117 
118 } /* namespace boost */
119 
120 #endif
config.hpp
boost::multi_index::detail::duplicates_iterator::advance
void advance()
Definition: duplicates_iterator.hpp:83
boost::multi_index::detail::duplicates_iterator
Definition: duplicates_iterator.hpp:31
boost
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
boost::multi_index::detail::duplicates_iterator::node
Node * node
Definition: duplicates_iterator.hpp:92
boost::multi_index::detail::duplicates_iterator::iterator_category
std::forward_iterator_tag iterator_category
Definition: duplicates_iterator.hpp:38
boost::multi_index::detail::duplicates_iterator::end
Node * end
Definition: duplicates_iterator.hpp:94
boost::multi_index::detail::duplicates_iterator::operator->
pointer operator->() const
Definition: duplicates_iterator.hpp:56
boost::multi_index::detail::operator==
bool operator==(const bidir_node_iterator< Node > &x, const bidir_node_iterator< Node > &y)
Definition: bidir_node_iterator.hpp:101
boost::multi_index::detail::duplicates_iterator::operator*
reference operator*() const
Definition: duplicates_iterator.hpp:51
boost::multi_index::detail::duplicates_iterator::get_node
Node * get_node() const
Definition: duplicates_iterator.hpp:75
boost::multi_index::detail::duplicates_iterator::reference
const typedef Node::value_type & reference
Definition: duplicates_iterator.hpp:37
boost::multi_index::detail::duplicates_iterator::duplicates_iterator
duplicates_iterator(Node *node_, Node *end_, Predicate pred_)
Definition: duplicates_iterator.hpp:40
boost::multi_index::detail::operator!=
bool operator!=(const duplicates_iterator< Node, Predicate > &x, const duplicates_iterator< Node, Predicate > &y)
Definition: duplicates_iterator.hpp:107
boost::multi_index::detail::duplicates_iterator::duplicates_iterator
duplicates_iterator(Node *end_, Predicate pred_)
Definition: duplicates_iterator.hpp:46
boost::multi_index::detail::duplicates_iterator::operator++
duplicates_iterator operator++(int)
Definition: duplicates_iterator.hpp:68
boost::multi_index::detail::duplicates_iterator::begin_chunk
Node * begin_chunk
Definition: duplicates_iterator.hpp:93
boost::multi_index::detail::duplicates_iterator::pointer
const typedef Node::value_type * pointer
Definition: duplicates_iterator.hpp:36
boost::multi_index::detail::duplicates_iterator::pred
Predicate pred
Definition: duplicates_iterator.hpp:95
boost::multi_index::detail::duplicates_iterator::operator++
duplicates_iterator & operator++()
Definition: duplicates_iterator.hpp:61
boost::multi_index::detail::duplicates_iterator::sync
void sync()
Definition: duplicates_iterator.hpp:78
boost::multi_index::detail::duplicates_iterator::value_type
Node::value_type value_type
Definition: duplicates_iterator.hpp:34
boost::multi_index::detail::duplicates_iterator::difference_type
std::ptrdiff_t difference_type
Definition: duplicates_iterator.hpp:35


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:38:54