1 // Boost.Geometry Index
2 //
3 // Insert iterator
4 //
5 // Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
6 //
7 // Use, modification and distribution is subject to the Boost Software License,
8 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
10 
11 #ifndef BOOST_GEOMETRY_INDEX_INSERTER_HPP
12 #define BOOST_GEOMETRY_INDEX_INSERTER_HPP
13 
14 #include <iterator>
15 
16 /*!
17 \defgroup inserters Inserters (boost::geometry::index::)
18 */
19 
20 namespace boost { namespace geometry { namespace index {
21 
22 template <class Container>
23 class insert_iterator :
24     public std::iterator<std::output_iterator_tag, void, void, void, void>
25 {
26 public:
27     typedef Container container_type;
28 
insert_iterator(Container & c)29     inline explicit insert_iterator(Container & c)
30         : container(&c)
31     {}
32 
operator =(typename Container::value_type const & value)33     insert_iterator & operator=(typename Container::value_type const& value)
34     {
35         container->insert(value);
36         return *this;
37     }
38 
operator *()39     insert_iterator & operator* ()
40     {
41         return *this;
42     }
43 
operator ++()44     insert_iterator & operator++ ()
45     {
46         return *this;
47     }
48 
operator ++(int)49     insert_iterator operator++(int)
50     {
51         return *this;
52     }
53 
54 private:
55     Container * container;
56 };
57 
58 /*!
59 \brief Insert iterator generator.
60 
61 Returns insert iterator capable to insert values to the container
62 (spatial index) which has member function insert(value_type const&) defined.
63 
64 \ingroup inserters
65 
66 \param c    The reference to the container (spatial index) to which values will be inserted.
67 
68 \return     The insert iterator inserting values to the container.
69 */
70 template <typename Container>
inserter(Container & c)71 insert_iterator<Container> inserter(Container & c)
72 {
73     return insert_iterator<Container>(c);
74 }
75 
76 }}} // namespace boost::geometry::index
77 
78 #endif // BOOST_GEOMETRY_INDEX_INSERTER_HPP
79