1 // Boost.Geometry (aka GGL, Generic Geometry Library) 2 3 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. 4 5 // Use, modification and distribution is subject to the Boost Software License, 6 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 9 #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP 10 #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP 11 12 13 namespace boost { namespace geometry 14 { 15 16 #ifndef DOXYGEN_NO_DETAIL 17 namespace detail { namespace overlay 18 { 19 20 class visit_info 21 { 22 private : 23 static const int NONE = 0; 24 static const int STARTED = 1; 25 static const int VISITED = 2; 26 static const int FINISHED = 3; 27 static const int REJECTED = 4; 28 29 int m_visit_code; 30 bool m_rejected; 31 bool m_final; 32 33 public: visit_info()34 inline visit_info() 35 : m_visit_code(0) 36 , m_rejected(false) 37 , m_final(false) 38 {} 39 set_visited()40 inline void set_visited() { m_visit_code = VISITED; } set_started()41 inline void set_started() { m_visit_code = STARTED; } set_finished()42 inline void set_finished() { m_visit_code = FINISHED; } set_rejected()43 inline void set_rejected() 44 { 45 m_visit_code = REJECTED; 46 m_rejected = true; 47 } 48 none() const49 inline bool none() const { return m_visit_code == NONE; } visited() const50 inline bool visited() const { return m_visit_code == VISITED; } started() const51 inline bool started() const { return m_visit_code == STARTED; } finished() const52 inline bool finished() const { return m_visit_code == FINISHED; } rejected() const53 inline bool rejected() const { return m_rejected; } finalized() const54 inline bool finalized() const { return m_final; } 55 clear()56 inline void clear() 57 { 58 if (! m_rejected && ! m_final) 59 { 60 m_visit_code = NONE; 61 } 62 } 63 reset()64 inline void reset() 65 { 66 *this = visit_info(); 67 } 68 finalize()69 inline void finalize() 70 { 71 if (visited() || started() || finished() ) 72 { 73 m_final = true; 74 } 75 } 76 77 #ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION operator <<(std::ostream & os,visit_info const & v)78 friend std::ostream& operator<<(std::ostream &os, visit_info const& v) 79 { 80 if (v.m_visit_code != 0) 81 { 82 os << " VIS: " << int(v.m_visit_code); 83 } 84 return os; 85 } 86 #endif 87 88 }; 89 90 91 }} // namespace detail::overlay 92 #endif //DOXYGEN_NO_DETAIL 93 94 95 }} // namespace boost::geometry 96 97 98 #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP 99