Used reversible_view in convex_hull to fix stlport

[SVN r67918]
This commit is contained in:
Barend Gehrels
2011-01-10 18:38:04 +00:00
parent 7737637877
commit 216f8a1d15

View File

@@ -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;
}
}
}