Added boost header
This commit is contained in:
113
test/external/boost/property_map/property_map_iterator.hpp
vendored
Normal file
113
test/external/boost/property_map/property_map_iterator.hpp
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
// (C) Copyright Jeremy Siek, 2001.
|
||||
// Distributed under the Boost Software License, Version 1.0. (See
|
||||
// accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/property_map for documentation.
|
||||
|
||||
#ifndef BOOST_PROPERTY_MAP_ITERATOR_HPP
|
||||
#define BOOST_PROPERTY_MAP_ITERATOR_HPP
|
||||
|
||||
#include <boost/property_map/property_map.hpp>
|
||||
#include <boost/iterator/iterator_adaptor.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
//======================================================================
|
||||
// property iterator, generalized from ideas by Francois Faure
|
||||
|
||||
namespace detail {
|
||||
|
||||
template <class Iterator, class LvaluePropertyMap>
|
||||
class lvalue_pmap_iter
|
||||
: public iterator_adaptor< lvalue_pmap_iter< Iterator, LvaluePropertyMap >,
|
||||
Iterator,
|
||||
typename property_traits<LvaluePropertyMap>::value_type,
|
||||
use_default,
|
||||
typename property_traits<LvaluePropertyMap>::reference>
|
||||
{
|
||||
friend class boost::iterator_core_access;
|
||||
|
||||
typedef iterator_adaptor< lvalue_pmap_iter< Iterator, LvaluePropertyMap >,
|
||||
Iterator,
|
||||
typename property_traits<LvaluePropertyMap>::value_type,
|
||||
use_default,
|
||||
typename property_traits<LvaluePropertyMap>::reference> super_t;
|
||||
|
||||
public:
|
||||
lvalue_pmap_iter() { }
|
||||
lvalue_pmap_iter(Iterator const& it,
|
||||
LvaluePropertyMap m)
|
||||
: super_t(it),
|
||||
m_map(m) {}
|
||||
|
||||
private:
|
||||
typename super_t::reference
|
||||
dereference() const
|
||||
{
|
||||
return m_map[*(this->base_reference())];
|
||||
}
|
||||
|
||||
LvaluePropertyMap m_map;
|
||||
};
|
||||
|
||||
template <class Iterator, class ReadablePropertyMap>
|
||||
class readable_pmap_iter :
|
||||
public iterator_adaptor< readable_pmap_iter< Iterator, ReadablePropertyMap >,
|
||||
Iterator,
|
||||
typename property_traits<ReadablePropertyMap>::value_type,
|
||||
use_default,
|
||||
typename property_traits<ReadablePropertyMap>::value_type>
|
||||
|
||||
|
||||
{
|
||||
friend class boost::iterator_core_access;
|
||||
|
||||
typedef iterator_adaptor< readable_pmap_iter< Iterator, ReadablePropertyMap >,
|
||||
Iterator,
|
||||
typename property_traits<ReadablePropertyMap>::value_type,
|
||||
use_default,
|
||||
typename property_traits<ReadablePropertyMap>::value_type> super_t;
|
||||
|
||||
public:
|
||||
readable_pmap_iter() { }
|
||||
readable_pmap_iter(Iterator const& it,
|
||||
ReadablePropertyMap m)
|
||||
: super_t(it),
|
||||
m_map(m) {}
|
||||
|
||||
private:
|
||||
typename super_t::reference
|
||||
dereference() const
|
||||
{
|
||||
return get(m_map, *(this->base_reference()));
|
||||
}
|
||||
|
||||
ReadablePropertyMap m_map;
|
||||
};
|
||||
|
||||
|
||||
} // namespace detail
|
||||
|
||||
template <class PropertyMap, class Iterator>
|
||||
struct property_map_iterator_generator :
|
||||
mpl::if_< is_same< typename property_traits<PropertyMap>::category, lvalue_property_map_tag>,
|
||||
detail::lvalue_pmap_iter<Iterator, PropertyMap>,
|
||||
detail::readable_pmap_iter<Iterator, PropertyMap> >
|
||||
{};
|
||||
|
||||
template <class PropertyMap, class Iterator>
|
||||
typename property_map_iterator_generator<PropertyMap, Iterator>::type
|
||||
make_property_map_iterator(PropertyMap pmap, Iterator iter)
|
||||
{
|
||||
typedef typename property_map_iterator_generator<PropertyMap,
|
||||
Iterator>::type Iter;
|
||||
return Iter(iter, pmap);
|
||||
}
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_PROPERTY_MAP_ITERATOR_HPP
|
||||
|
||||
Reference in New Issue
Block a user