Added boost header
This commit is contained in:
103
test/external/boost/icl/iterator.hpp
vendored
Normal file
103
test/external/boost/icl/iterator.hpp
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
/*-----------------------------------------------------------------------------+
|
||||
Copyright (c) 2009-2009: Joachim Faulhaber
|
||||
+------------------------------------------------------------------------------+
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENCE.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt)
|
||||
+-----------------------------------------------------------------------------*/
|
||||
#ifndef BOOST_ICL_ITERATOR_HPP_JOFA_091003
|
||||
#define BOOST_ICL_ITERATOR_HPP_JOFA_091003
|
||||
|
||||
#include <iterator>
|
||||
#include <boost/config/warning_disable.hpp>
|
||||
|
||||
namespace boost{namespace icl
|
||||
{
|
||||
|
||||
/** \brief Performes an addition using a container's memberfunction add, when operator= is called. */
|
||||
template<class ContainerT> class add_iterator
|
||||
: public std::iterator<std::output_iterator_tag, void, void, void, void>
|
||||
{
|
||||
public:
|
||||
/// The container's type.
|
||||
typedef ContainerT container_type;
|
||||
typedef std::output_iterator_tag iterator_category;
|
||||
|
||||
/** An add_iterator is constructed with a container and a position
|
||||
that has to be maintained. */
|
||||
add_iterator(ContainerT& cont, typename ContainerT::iterator iter)
|
||||
: _cont(&cont), _iter(iter) {}
|
||||
|
||||
/** This assignment operator adds the \c value before the current position.
|
||||
It maintains it's position by incrementing after addition. */
|
||||
add_iterator& operator=(typename ContainerT::const_reference value)
|
||||
{
|
||||
_iter = icl::add(*_cont, _iter, value);
|
||||
if(_iter != _cont->end())
|
||||
++_iter;
|
||||
return *this;
|
||||
}
|
||||
|
||||
add_iterator& operator*() { return *this; }
|
||||
add_iterator& operator++() { return *this; }
|
||||
add_iterator& operator++(int){ return *this; }
|
||||
|
||||
private:
|
||||
ContainerT* _cont;
|
||||
typename ContainerT::iterator _iter;
|
||||
};
|
||||
|
||||
|
||||
/** Function adder creates and initializes an add_iterator */
|
||||
template<class ContainerT, typename IteratorT>
|
||||
inline add_iterator<ContainerT> adder(ContainerT& cont, IteratorT iter_)
|
||||
{
|
||||
return add_iterator<ContainerT>(cont, typename ContainerT::iterator(iter_));
|
||||
}
|
||||
|
||||
/** \brief Performes an insertion using a container's memberfunction add, when operator= is called. */
|
||||
template<class ContainerT> class insert_iterator
|
||||
: public std::iterator<std::output_iterator_tag, void, void, void, void>
|
||||
{
|
||||
public:
|
||||
/// The container's type.
|
||||
typedef ContainerT container_type;
|
||||
typedef std::output_iterator_tag iterator_category;
|
||||
|
||||
/** An insert_iterator is constructed with a container and a position
|
||||
that has to be maintained. */
|
||||
insert_iterator(ContainerT& cont, typename ContainerT::iterator iter)
|
||||
: _cont(&cont), _iter(iter) {}
|
||||
|
||||
/** This assignment operator adds the \c value before the current position.
|
||||
It maintains it's position by incrementing after addition. */
|
||||
insert_iterator& operator=(typename ContainerT::const_reference value)
|
||||
{
|
||||
_iter = _cont->insert(_iter, value);
|
||||
if(_iter != _cont->end())
|
||||
++_iter;
|
||||
return *this;
|
||||
}
|
||||
|
||||
insert_iterator& operator*() { return *this; }
|
||||
insert_iterator& operator++() { return *this; }
|
||||
insert_iterator& operator++(int){ return *this; }
|
||||
|
||||
private:
|
||||
ContainerT* _cont;
|
||||
typename ContainerT::iterator _iter;
|
||||
};
|
||||
|
||||
|
||||
/** Function inserter creates and initializes an insert_iterator */
|
||||
template<class ContainerT, typename IteratorT>
|
||||
inline insert_iterator<ContainerT> inserter(ContainerT& cont, IteratorT iter_)
|
||||
{
|
||||
return insert_iterator<ContainerT>(cont, typename ContainerT::iterator(iter_));
|
||||
}
|
||||
|
||||
}} // namespace icl boost
|
||||
|
||||
#endif // BOOST_ICL_ITERATOR_HPP_JOFA_091003
|
||||
|
||||
|
||||
Reference in New Issue
Block a user