mirror of
https://github.com/boostorg/geometry.git
synced 2026-02-20 02:42:10 +00:00
Used reversible_view in convex_hull to fix stlport
[SVN r67918]
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include <boost/geometry/policies/compare.hpp>
|
||||
|
||||
#include <boost/geometry/util/for_each_range.hpp>
|
||||
#include <boost/geometry/views/reversible_view.hpp>
|
||||
|
||||
|
||||
// Temporary, comparing sorting, this can be removed in the end
|
||||
@@ -323,13 +324,13 @@ public:
|
||||
{
|
||||
if (clockwise)
|
||||
{
|
||||
get_range_forward(state.m_upper_hull, out);
|
||||
get_range_reverse(state.m_lower_hull, out);
|
||||
output_range<iterate_forward>(state.m_upper_hull, out, false);
|
||||
output_range<iterate_reverse>(state.m_lower_hull, out, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
get_range_forward(state.m_lower_hull, out);
|
||||
get_range_reverse(state.m_upper_hull, out);
|
||||
output_range<iterate_forward>(state.m_lower_hull, out, false);
|
||||
output_range<iterate_reverse>(state.m_upper_hull, out, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -380,29 +381,24 @@ private:
|
||||
}
|
||||
|
||||
|
||||
template <typename OutputIterator>
|
||||
static inline void get_range_forward(container_type const& range, OutputIterator out)
|
||||
template <iterate_direction Direction, typename OutputIterator>
|
||||
static inline void output_range(container_type const& range,
|
||||
OutputIterator out, bool skip_first)
|
||||
{
|
||||
for (iterator it = boost::begin(range);
|
||||
it != boost::end(range);
|
||||
++it, ++out)
|
||||
typedef typename reversible_view<container_type const, Direction>::type view_type;
|
||||
view_type view(range);
|
||||
bool first = true;
|
||||
for (typename boost::range_iterator<view_type const>::type it = boost::begin(view);
|
||||
it != boost::end(view); ++it)
|
||||
{
|
||||
*out = *it;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template <typename OutputIterator>
|
||||
static inline void get_range_reverse(container_type const& range, OutputIterator out)
|
||||
{
|
||||
// STL Port does not accept iterating from rbegin+1 to rend
|
||||
std::size_t size = range.size();
|
||||
if (size > 0)
|
||||
{
|
||||
rev_iterator it = range.rbegin() + 1;
|
||||
for (std::size_t i = 1; i < size; ++i, ++it, ++out)
|
||||
if (first && skip_first)
|
||||
{
|
||||
first = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
*out = *it;
|
||||
++out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user