1 // Boost.Polygon library segment_data.hpp header file 2 3 // Copyright (c) Intel Corporation 2008. 4 // Copyright (c) 2008-2012 Simonson Lucanus. 5 // Copyright (c) 2012-2012 Andrii Sydorchuk. 6 7 // See http://www.boost.org for updates, documentation, and revision history. 8 // Use, modification and distribution is subject to the Boost Software License, 9 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 10 // http://www.boost.org/LICENSE_1_0.txt) 11 12 #ifndef BOOST_POLYGON_SEGMENT_DATA_HPP 13 #define BOOST_POLYGON_SEGMENT_DATA_HPP 14 15 #include "isotropy.hpp" 16 #include "segment_concept.hpp" 17 18 namespace boost { 19 namespace polygon { 20 21 template <typename T> 22 class segment_data { 23 public: 24 typedef T coordinate_type; 25 typedef point_data<T> point_type; 26 segment_data()27 segment_data() 28 #ifndef BOOST_POLYGON_MSVC 29 : points_() 30 #endif 31 {} 32 segment_data(const point_type & low,const point_type & high)33 segment_data(const point_type& low, const point_type& high) { 34 points_[LOW] = low; 35 points_[HIGH] = high; 36 } 37 segment_data(const segment_data & that)38 segment_data(const segment_data& that) { 39 points_[0] = that.points_[0]; 40 points_[1] = that.points_[1]; 41 } 42 operator =(const segment_data & that)43 segment_data& operator=(const segment_data& that) { 44 points_[0] = that.points_[0]; 45 points_[1] = that.points_[1]; 46 return *this; 47 } 48 49 template <typename SegmentType> operator =(const SegmentType & that)50 segment_data& operator=(const SegmentType& that) { 51 assign(*this, that); 52 return *this; 53 } 54 get(direction_1d dir) const55 point_type get(direction_1d dir) const { 56 return points_[dir.to_int()]; 57 } 58 set(direction_1d dir,const point_type & point)59 void set(direction_1d dir, const point_type& point) { 60 points_[dir.to_int()] = point; 61 } 62 low() const63 point_type low() const { 64 return points_[LOW]; 65 } 66 low(const point_type & point)67 segment_data& low(const point_type& point) { 68 points_[LOW] = point; 69 return *this; 70 } 71 high() const72 point_type high() const { 73 return points_[HIGH]; 74 } 75 high(const point_type & point)76 segment_data& high(const point_type& point) { 77 points_[HIGH] = point; 78 return *this; 79 } 80 operator ==(const segment_data & that) const81 bool operator==(const segment_data& that) const { 82 return (points_[0] == that.points_[0]) && 83 (points_[1] == that.points_[1]); 84 } 85 operator !=(const segment_data & that) const86 bool operator!=(const segment_data& that) const { 87 return (points_[0] != that.points_[0]) || 88 (points_[1] != that.points_[1]); 89 } 90 operator <(const segment_data & that) const91 bool operator<(const segment_data& that) const { 92 if (points_[0] != that.points_[0]) { 93 return points_[0] < that.points_[0]; 94 } 95 return points_[1] < that.points_[1]; 96 } 97 operator <=(const segment_data & that) const98 bool operator<=(const segment_data& that) const { 99 return !(that < *this); 100 } 101 operator >(const segment_data & that) const102 bool operator>(const segment_data& that) const { 103 return that < *this; 104 } 105 operator >=(const segment_data & that) const106 bool operator>=(const segment_data& that) const { 107 return !((*this) < that); 108 } 109 110 private: 111 point_type points_[2]; 112 }; 113 114 template <typename CType> 115 struct geometry_concept<segment_data<CType> > { 116 typedef segment_concept type; 117 }; 118 } // polygon 119 } // boost 120 121 #endif // BOOST_POLYGON_SEGMENT_DATA_HPP 122