summaryrefslogtreecommitdiff
path: root/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:38:45 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:39:52 +0900
commit5cde13f21d36c7224b0e13d11c4b49379ae5210d (patch)
treee8269ac85a4b0f7d416e2565fa4f451b5cb41351 /boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
parentd9ec475d945d3035377a0d89ed42e382d8988891 (diff)
downloadboost-5cde13f21d36c7224b0e13d11c4b49379ae5210d.tar.gz
boost-5cde13f21d36c7224b0e13d11c4b49379ae5210d.tar.bz2
boost-5cde13f21d36c7224b0e13d11c4b49379ae5210d.zip
Imported Upstream version 1.61.0
Change-Id: I96a1f878d1e6164f01e9aadd5147f38fca448d90 Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp')
-rw-r--r--boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp44
1 files changed, 38 insertions, 6 deletions
diff --git a/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp b/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
index 90901dee70..a8171e1482 100644
--- a/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
+++ b/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
@@ -48,7 +48,6 @@ inline void clear_visit_info(Turns& turns)
{
op_it->visited.clear();
}
- it->discarded = false;
}
}
@@ -62,6 +61,34 @@ struct backtrack_state
};
+enum traverse_error_type
+{
+ traverse_error_none,
+ traverse_error_no_next_ip_at_start,
+ traverse_error_no_next_ip,
+ traverse_error_dead_end_at_start,
+ traverse_error_dead_end,
+ traverse_error_visit_again,
+ traverse_error_endless_loop
+};
+
+inline std::string traverse_error_string(traverse_error_type error)
+{
+ switch (error)
+ {
+ case traverse_error_none : return "";
+ case traverse_error_no_next_ip_at_start : return "No next IP at start";
+ case traverse_error_no_next_ip : return "No next IP";
+ case traverse_error_dead_end_at_start : return "Dead end at start";
+ case traverse_error_dead_end : return "Dead end";
+ case traverse_error_visit_again : return "Visit again";
+ case traverse_error_endless_loop : return "Endless loop";
+ default : return "";
+ }
+ return "";
+}
+
+
template
<
typename Geometry1,
@@ -73,23 +100,28 @@ class backtrack_check_self_intersections
{
bool m_checked;
inline state()
- : m_checked()
+ : m_checked(true)
{}
};
public :
typedef state state_type;
- template <typename Operation, typename Rings, typename Ring, typename Turns, typename RobustPolicy>
+ template <typename Operation, typename Rings, typename Ring, typename Turns, typename RobustPolicy, typename Visitor>
static inline void apply(std::size_t size_at_start,
Rings& rings, Ring& ring,
- Turns& turns, Operation& operation,
- std::string const& ,
+ Turns& turns,
+ typename boost::range_value<Turns>::type const& turn,
+ Operation& operation,
+ traverse_error_type traverse_error,
Geometry1 const& geometry1,
Geometry2 const& geometry2,
RobustPolicy const& robust_policy,
- state_type& state
+ state_type& state,
+ Visitor& visitor
)
{
+ visitor.visit_traverse_reject(turns, turn, operation, traverse_error);
+
state.m_good = false;
// Check self-intersections and throw exception if appropriate