[iterators][segment_iterator] move range_segment_iterator class to

detail::segment_iterator namespace; move bg::segment_iterator_value_type
to bg::detail::segment_iterator::value_type;
This commit is contained in:
Menelaos Karavelas
2014-09-29 17:10:24 +03:00
parent 2a0dceece9
commit 67e418e705
3 changed files with 99 additions and 36 deletions

View File

@@ -24,6 +24,10 @@
namespace boost { namespace geometry
{
#ifndef DOXYGEN_NO_DETAIL
namespace detail { namespace segment_iterator
{
template <typename Range, closure_selector Closure = closure<Range>::value>
struct range_iterator_type
@@ -114,7 +118,12 @@ public:
: m_it(--range_iterator_end<Range>::apply(r))
{}
template <typename OtherRange, typename OtherValue, typename OtherReference>
template
<
typename OtherRange,
typename OtherValue,
typename OtherReference
>
range_segment_iterator(range_segment_iterator
<
OtherRange,
@@ -134,7 +143,12 @@ public:
BOOST_MPL_ASSERT_MSG((are_conv), NOT_CONVERTIBLE, (types<OtherRange>));
}
template <typename OtherRange, typename OtherValue, typename OtherReference>
template
<
typename OtherRange,
typename OtherValue,
typename OtherReference
>
range_segment_iterator operator=(range_segment_iterator
<
OtherRange,
@@ -169,7 +183,12 @@ private:
return Reference(*m_it, *next);
}
template <typename OtherRange, typename OtherValue, typename OtherReference>
template
<
typename OtherRange,
typename OtherValue,
typename OtherReference
>
inline bool equal(range_segment_iterator
<
OtherRange,
@@ -195,6 +214,9 @@ private:
};
}} // namespace detail::segment_iterator
#endif // DOXYGEN_NO_DETAIL
}} // namespace boost::geometry

View File

@@ -0,0 +1,43 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Copyright (c) 2014, Oracle and/or its affiliates.
// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Licensed under the Boost Software License version 1.0.
// http://www.boost.org/users/license.html
#ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP
#define BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP
#include <boost/geometry/iterators/point_iterator_type.hpp>
#include <boost/geometry/geometries/pointing_segment.hpp>
namespace boost { namespace geometry
{
#ifndef DOXYGEN_NO_DETAIL
namespace detail { namespace segment_iterator
{
template <typename Geometry>
struct value_type
{
typedef typename detail_dispatch::point_iterator_value_type
<
Geometry
>::type point_iterator_value_type;
typedef geometry::model::pointing_segment
<
point_iterator_value_type
> type;
};
}} // namespace detail::segment_iterator
#endif // DOXYGEN_NO_DETAIL
}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP

View File

@@ -20,7 +20,8 @@
#include <boost/geometry/iterators/concatenate_iterator.hpp>
#include <boost/geometry/iterators/flatten_iterator.hpp>
#include <boost/geometry/iterators/point_iterator_type.hpp>
#include <boost/geometry/iterators/range_segment_iterator.hpp>
#include <boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp>
#include <boost/geometry/iterators/detail/segment_iterator/value_type.hpp>
#include <boost/geometry/geometries/pointing_segment.hpp>
@@ -31,23 +32,6 @@
namespace boost { namespace geometry
{
template <typename Geometry>
struct segment_iterator_value_type
{
typedef typename detail_dispatch::point_iterator_value_type
<
Geometry
>::type point_iterator_value_type;
typedef geometry::model::pointing_segment
<
point_iterator_value_type
> type;
};
#ifndef DOXYGEN_NO_DISPATCH
namespace dispatch
{
@@ -56,10 +40,10 @@ namespace dispatch
template <typename Linestring>
struct segment_iterator_type<Linestring, linestring_tag>
{
typedef range_segment_iterator
typedef detail::segment_iterator::range_segment_iterator
<
Linestring,
typename segment_iterator_value_type<Linestring>::type
typename detail::segment_iterator::value_type<Linestring>::type
> type;
};
@@ -67,10 +51,10 @@ struct segment_iterator_type<Linestring, linestring_tag>
template <typename Ring>
struct segment_iterator_type<Ring, ring_tag>
{
typedef range_segment_iterator
typedef detail::segment_iterator::range_segment_iterator
<
Ring,
typename segment_iterator_value_type<Ring>::type
typename detail::segment_iterator::value_type<Ring>::type
> type;
};
@@ -84,13 +68,17 @@ private:
Polygon
>::type inner_range;
typedef typename detail::segment_iterator::value_type
<
Polygon
>::type value_type;
public:
typedef concatenate_iterator
<
range_segment_iterator
detail::segment_iterator::range_segment_iterator
<
inner_range,
typename segment_iterator_value_type<Polygon>::type
inner_range, value_type
>,
flatten_iterator
<
@@ -99,13 +87,13 @@ public:
typename geometry::interior_type<Polygon>::type
>::type,
typename dispatch::segment_iterator_type<inner_range>::type,
typename segment_iterator_value_type<Polygon>::type,
value_type,
dispatch::segments_begin<inner_range>,
dispatch::segments_end<inner_range>,
typename segment_iterator_value_type<Polygon>::type
value_type
>,
typename segment_iterator_value_type<Polygon>::type,
typename segment_iterator_value_type<Polygon>::type
value_type,
value_type
> type;
};
@@ -119,15 +107,20 @@ private:
MultiLinestring
>::type inner_range;
typedef typename detail::segment_iterator::value_type
<
MultiLinestring
>::type value_type;
public:
typedef flatten_iterator
<
typename boost::range_iterator<MultiLinestring>::type,
typename dispatch::segment_iterator_type<inner_range>::type,
typename segment_iterator_value_type<MultiLinestring>::type,
value_type,
dispatch::segments_begin<inner_range>,
dispatch::segments_end<inner_range>,
typename segment_iterator_value_type<MultiLinestring>::type
value_type
> type;
};
@@ -141,15 +134,20 @@ private:
MultiPolygon
>::type inner_range;
typedef typename detail::segment_iterator::value_type
<
MultiPolygon
>::type value_type;
public:
typedef flatten_iterator
<
typename boost::range_iterator<MultiPolygon>::type,
typename dispatch::segment_iterator_type<inner_range>::type,
typename segment_iterator_value_type<MultiPolygon>::type,
value_type,
dispatch::segments_begin<inner_range>,
dispatch::segments_end<inner_range>,
typename segment_iterator_value_type<MultiPolygon>::type
value_type
> type;
};