Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r78185 - in sandbox/gtl: boost/polygon doc
From: sydorchuk.andriy_at_[hidden]
Date: 2012-04-24 18:09:55


Author: asydorchuk
Date: 2012-04-24 18:09:54 EDT (Tue, 24 Apr 2012)
New Revision: 78185
URL: http://svn.boost.org/trac/boost/changeset/78185

Log:
Adding segment concept documentation page.
Updating segment concept code.

Added:
   sandbox/gtl/doc/gtl_segment_concept.htm (contents, props changed)
Text files modified:
   sandbox/gtl/boost/polygon/segment_concept.hpp | 32 ++++++++++++++------------------
   1 files changed, 14 insertions(+), 18 deletions(-)

Modified: sandbox/gtl/boost/polygon/segment_concept.hpp
==============================================================================
--- sandbox/gtl/boost/polygon/segment_concept.hpp (original)
+++ sandbox/gtl/boost/polygon/segment_concept.hpp 2012-04-24 18:09:54 EDT (Tue, 24 Apr 2012)
@@ -117,7 +117,7 @@
>::type,
     void
>::type
- set(T& segment, direction_1d dir, point_type value) {
+ set(T& segment, direction_1d dir, const point_type& value) {
     segment_mutable_traits<T>::set(segment, dir, value);
   }
 
@@ -133,7 +133,7 @@
>::type,
     T
>::type
- construct(T2 low_value, T3 high_value) {
+ construct(const T2& low_value, const T3& high_value) {
     return segment_mutable_traits<T>::construct(low_value, high_value);
   }
 
@@ -153,9 +153,7 @@
     T
>::type
   copy_construct(const T2& segment) {
- return construct<T>
- (get(segment, LOW ),
- get(segment, HIGH));
+ return construct<T>(get(segment, LOW ), get(segment, HIGH));
   }
 
   struct y_s_assign : gtl_yes {};
@@ -195,7 +193,7 @@
>::type
   equivalence(const T& segment1, const T2& segment2) {
     return get(segment1, LOW) == get(segment2, LOW) &&
- get(segment1, HIGH) == get(segment2, HIGH);
+ get(segment1, HIGH) == get(segment2, HIGH);
   }
   
   struct y_s_on_above_or_below : gtl_yes {};
@@ -341,7 +339,7 @@
     void
>::type
   low(segment_type& segment,
- typename segment_point_type<segment_type>::type v) {
+ const typename segment_point_type<segment_type>::type& v) {
     set(segment, LOW, v);
   }
   
@@ -359,7 +357,7 @@
     void
>::type
   high(segment_type& segment,
- typename segment_point_type<segment_type>::type v) {
+ const typename segment_point_type<segment_type>::type& v) {
     set(segment, HIGH, v);
   }
 
@@ -373,7 +371,7 @@
         typename geometry_concept<segment_type>::type
>::type
>::type,
- typename segment_point_type<segment_type>::type
+ typename segment_distance_type<segment_type>::type
>::type
   length(const segment_type& segment) {
     return euclidean_distance(low(segment), high(segment));
@@ -540,7 +538,7 @@
     typename segment_distance_type<segment_type>::type
>::type
   euclidean_distance(const segment_type& segment,
- typename segment_point_type<segment_type>::type position) {
+ const typename segment_point_type<segment_type>::type& position) {
     typedef typename segment_distance_type<segment_type>::type Unit;
     Unit x1 = x(low(segment));
     Unit y1 = y(low(segment));
@@ -586,10 +584,10 @@
>::type
   euclidean_distance(const segment_type& segment,
                      const segment_type_2& b) {
- typename segment_distance_type<segment_type>::type result1 =
- euclidean_distance(segment, low(b)),
- result2 = euclidean_distance(segment, high(b));
- if(result2 < result1) result1 = result2;
+ typename segment_distance_type<segment_type>::type
+ result1 = euclidean_distance(segment, low(b)),
+ result2 = euclidean_distance(segment, high(b));
+ if(result2 < result1) return result2;
     return result1;
   }
   
@@ -613,10 +611,8 @@
              const segment_type_2& b,
              bool consider_touch = true) {
     if(consider_touch) {
- if(low(segment) == low(b) ||
- low(segment) == high(b) ||
- high(segment) == low(b) ||
- high(segment) == high(b))
+ if(low(segment) == low(b) || low(segment) == high(b) ||
+ high(segment) == low(b) || high(segment) == high(b))
         return true;
     }
     typedef polygon_arbitrary_formation<

Added: sandbox/gtl/doc/gtl_segment_concept.htm
==============================================================================
--- (empty file)
+++ sandbox/gtl/doc/gtl_segment_concept.htm 2012-04-24 18:09:54 EDT (Tue, 24 Apr 2012)
@@ -0,0 +1,504 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
+ Copyright 2009-2010 Intel Corporation
+ license banner
+--><title>Boost Polygon Library: Segment Concept</title>
+
+
+
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept<br />
+ </li>
+ <li>Segment Concept</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+ </a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+ </a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.htm">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --><br />
+ <p> </p>
+ <h1>Segment Concept</h1>
+ <p> </p>
+ <p> The segment concept tag is <font face="Courier New">segment_concept</font></p>
+ <p> To register a user defined type as a model of segment
+concept, specialize the geometry concept meta-function for that
+type.&nbsp; In the example below CSegment is registered as a model of
+the segment concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;</font>CSegment<font face="Courier New">&gt;
+{ typedef segment_concept type; };</font></p>
+ <p> The semantic of a segment is
+that it has an low and high point.&nbsp; A
+std::pair&lt;std::pair&lt;int, int&gt;, std::pair&lt;int,int&gt;&gt;,
+boost::tuple&lt;boost::tuple&lt;int, int&gt;, boost::tuple&lt;int,
+int&gt;&gt; or boost::array&lt;int, 4&gt; could all be made models of
+segment by simply providing indirect access to their elements through
+traits, however, these objects cannot be made a model of both segment
+and interval in the same compilation unit, for obvious reason that
+duplicate specialization of the geometry_concept struct is illegal, but
+also because it would make overloading generic function by concept
+ambiguous if a type modeled more than one concept.</p>
+ <p> Below is shown the default
+segment traits.&nbsp; Specialization of these traits is required for
+types that don't conform to the default behavior.</p>
+
+ <p><span style="font-family: Courier New,Courier,monospace;">template &lt;typename T&gt;<br />
+struct segment_traits {<br />
+&nbsp; typedef typename T::coordinate_type coordinate_type;<br />
+&nbsp; typedef typename T::point_type point_type;<br />
+ <br />
+&nbsp; static inline point_type get(const T&amp; segment, direction_1d dir) {<br />
+&nbsp;&nbsp;&nbsp; return segment.get(dir);<br />
+&nbsp; }<br />
+};</span><span style="font-family: Courier New,Courier,monospace;"></span><br />
+ <br /><span style="font-family: Courier New,Courier,monospace;">template &lt;typename T&gt;<br />
+struct segment_mutable_traits {<br />
+&nbsp; template &lt;typename Point1&gt;<br />
+&nbsp; static inline void set(T&amp; segment, direction_1d dir, const Point1&amp; value) {<br />
+&nbsp;&nbsp;&nbsp; typename segment_traits&lt;T&gt;::point_type p1;<br />
+&nbsp;&nbsp;&nbsp; assign(p1, value);<br />
+&nbsp;&nbsp;&nbsp; segment.set(dir, value);<br />
+&nbsp; }<br />
+ <br />
+&nbsp; template &lt;typename Point1, typename Point2&gt;<br />
+&nbsp; static inline T construct(const Point1&amp; low_value,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const Point2&amp; high_value) {<br />
+&nbsp;&nbsp;&nbsp; typename segment_traits&lt;T&gt;::point_type p1, p2;<br />
+&nbsp;&nbsp;&nbsp; assign(p1, low_value);<br />
+&nbsp;&nbsp;&nbsp; assign(p2, high_value);<br />
+&nbsp;&nbsp;&nbsp; return T(p1, p2);<br />
+&nbsp; }<br />
+};<br />
+ </span><span style="font-family: Courier New,Courier,monospace;"></span></p>
+
+ <p> Example code custom_segment.cpp
+demonstrates how to map a user defined segment class to the library segment_concept.</p>
+ <h2>Functions</h2>
+ <table style="width: 100%;" id="table1" border="1">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />point_type&lt;T&gt; <b>get</b>(const T&amp; segment, direction_1d dir)</font></td>
+ <td>Expects a model of segment.&nbsp; Returns the low or high endpoint of the segment, depending on
+the direction_1d value.<font face="Courier New"><br />
+&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+void <b>set</b>(T&amp; segment, direction_1d dir,<br />
+&nbsp;&nbsp;&nbsp; const point_type&amp; point)</font></td>
+ <td>Expects a model of segment. Sets the low or high endpoint of the segment to the point, depending on the direction_1d&nbsp; value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template &lt;typename T, typename T2, typename T3&gt;<br />
+T <b>construct</b>(const T2&amp; low_value, const T3&amp; high_value)</font></td>
+ <td>Construct an object that is a model of segment given both endpoints.</td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><font face="Courier New">template &lt;typename T, typename T2&gt;<br />
+T <span style="font-weight: bold;">copy_construct</span>(const T2&amp; segment)</font></td>
+ <td style="vertical-align: middle; text-align: left;">Copy construct an object that is a model of segment given another segment.</td>
+ </tr>
+<tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; lvalue, const T2&amp; rvalue)</font></td>
+ <td>Copies data from right object that models segment into
+left object that models segment.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename T2&gt;<br />
+bool <b>equivalence</b>(const T&amp; segment, const T2&amp; segment2)</font></td>
+ <td>Given two objects that model segment, compares and
+returns true if their low and high values are respectively equal to each
+other.</td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><span style="font-family: Courier New,Courier,monospace;">template &lt;typename segment_type&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">bool </span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">on_above_or_below</span><span style="font-family: Courier New,Courier,monospace;">(const segment_type&amp; segment,</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp; point_type value)</span><br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><span style="font-family: Courier New,Courier,monospace;">template &lt;typename segment_type&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">bool </span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span style="font-family: Courier New,Courier,monospace;">(const segment_type&amp; segment,</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp; point_type value,</span><span style="font-family: Courier New,Courier,monospace;"> bool consider_touch)</span><br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><span style="font-family: Courier New,Courier,monospace;">template &lt;typename segment_type, typename segment_type_2&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
+
+ <span style="font-family: Courier New,Courier,monospace;">bool </span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span style="font-family: Courier New,Courier,monospace;">(const segment_type&amp; segment,</span><br style="font-family: Courier New,Courier,monospace;" />
+
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp; const segment_type_2&amp; value,</span><br style="font-family: Courier New,Courier,monospace;" />
+
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp; bool consider_touch)</span></td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">template &lt;typename segment_type&gt;<br />
+point_type <span style="font-weight: bold;">low</span>(const segment_type&amp; segment)<br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">template &lt;typename segment_type&gt;<br />
+point_type <span style="font-weight: bold;">high</span>(const segment_type&amp; segment)</td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">template &lt;typename segment_type&gt;<br />
+point_type <span style="font-weight: bold;">center</span>(const segment_type&amp; segment)</td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">template &lt;typename segment_type&gt;<br />
+point_type <span style="font-weight: bold;">low</span>(const segment_type&amp; segment,<br />
+&nbsp;&nbsp;&nbsp; const segment_type::point_type&amp; v)</td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">template &lt;typename segment_type&gt;<br />
+point_type <span style="font-weight: bold;">high</span>(const segment_type&amp; segment,<br />
+
+&nbsp;&nbsp;&nbsp; const segment_type::point_type&amp; v)</td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><span style="font-family: Courier New,Courier,monospace;">template &lt;typename segment_type&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">distance_type <span style="font-weight: bold;">length</span>(const segment_type&amp; segment)</span><br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename segment_type&gt;<br />segment_type&amp; <b>scale_up</b>(segment_type&amp; </font><font face="Courier New">segment</font><font face="Courier New">, <br />&nbsp;&nbsp;&nbsp; unsigned_area_type factor)</font></td>
+ <td>Multiplies x and y coordinates of both endpoints of an object that models segment by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">segment</font><font face="Courier New">_type&gt;<br />
+ </font><font face="Courier New">segment</font><font face="Courier New">_type&amp; <b>scale_down</b>(</font><font face="Courier New">segment</font><font face="Courier New">_type&amp; </font><font face="Courier New">segment</font><font face="Courier New">, <br />
+&nbsp;&nbsp;&nbsp; unsigned_area_type factor)</font></td>
+ <td>Divides x and y coordinates of both endpoints of an object that models segment by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">segment</font><font face="Courier New">_type, typename scaling_type&gt;<br />
+ </font><font face="Courier New">segment</font><font face="Courier New">_type&amp; <b>scale</b>(</font><font face="Courier New">segment</font><font face="Courier New">_type&amp; </font><font face="Courier New">segment</font><font face="Courier New">,<br />
+&nbsp;&nbsp;&nbsp; const scaling_type&amp; factor) </font></td>
+ <td>Calls
+the scale member function of scaling type on the low and high point of
+an object that models segment and updates the segment with the
+scaled points.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename segment_type, typename transform_type&gt;<br />
+segment_type&amp; <b>transform</b>(segment_type&amp; segment,<br />
+&nbsp;&nbsp;&nbsp; const transform_type&amp; transform) </font></td>
+ <td>Calls the transform member function of transform type
+on the low and high endpoints of an object that models segment and updates the segment with the transformed endpoints.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">segment</font><font face="Courier New">_type&gt;<br />
+ </font><font face="Courier New">segment</font><font face="Courier New">_type&amp; <b>move</b>(</font><font face="Courier New">segment</font><font face="Courier New">_type&amp; segment, orientation_2d<br />
+&nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
+ <td>Adds displacement value to the coordinates of both endpoints of an object
+that models segment indicated by the orientation_2d.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;segment_type&gt;<br />
+</font><font face="Courier New">segment_type</font><font face="Courier New">&amp; <b>convolve</b>(</font><font face="Courier New">segment_type</font><font face="Courier New">&amp; segment,<br />
+&nbsp;&nbsp;&nbsp; const point_type&amp; b)</font></td>
+ <td>Convolves both endpoints of an object that models segment with b.<br />
+</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;segment_type&gt;<br />
+ </font><font face="Courier New">segment_type</font><font face="Courier New">&amp; <b>deconvolve</b>(</font><font face="Courier New">segment_type</font><font face="Courier New">&amp; segment,<br />
+&nbsp;&nbsp;&nbsp; const point_type&amp; b)</font></td>
+ <td>Deconvolves both endpoints of an object that models segment with b. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename segment_type&gt;<br />distance_type <b>euclidean_distance</b>(<br />
+&nbsp;&nbsp;&nbsp; const segment_type&amp; segment,<br />&nbsp;&nbsp;&nbsp;
+const point_type&amp; point)</font></td>
+ <td>Returns the distance from an object that models segment
+to a second object that models point.</td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><font face="Courier New">template
+&lt;typename segment_type, typename segment_type_2&gt;<br />distance_type <b>euclidean_distance</b>(<br />
+&nbsp;&nbsp;&nbsp; const segment_type&amp; segment,<br />&nbsp;&nbsp;&nbsp;
+const segment_type_2&amp; b)</font></td>
+ <td style="vertical-align: middle;">Returns the distance from an object that models segment
+to a second object that models segment.</td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><br />
+ </td>
+ <td style="vertical-align: top;"><br />
+ </td>
+ </tr>
+
+
+
+ </tbody>
+ </table>
+ <h1>Segment Data</h1>
+ <p> </p>
+ <p>The library provides a model of the segment concept declared <font face="Courier New">template&lt;typename T&gt; segment_data </font>where
+T is the coordinate type.</p>
+ <p>This data type is used internally when a segment is needed and
+is available to the library user who finds it convenient to use a
+library segment data type instead of providing their own.&nbsp; The data
+type is implemented to be convenient to use with the library traits.</p>
+ <p>Example code segment_usage.cpp
+demonstrates using the library provided segment data type and functions</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td>segment_concept</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td>T</td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><b><font face="Courier New">point_type</font></b></td>
+ <td style="vertical-align: top;">point_data&lt;T&gt;<br />
+ </td>
+ </tr>
+<tr>
+ <td width="586"><font face="Courier New"><b>segment_data</b>()</font></td>
+ <td>Default constructs the two endpoints of the segment.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>segment_data</b>(point_type low, point_type high)</font></td>
+ <td>Constructs a segment from the given endpoints.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>segment_data</b>(const segment_data&amp; that)</font></td>
+ <td>Copy constructor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">segment_data&amp; <b>operator=</b>(const segment_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b><br />
+ </b>point_data&amp; <b>operator=</b>(const T2&amp; that)
+const</font></td>
+ <td>Assign from an object that is a model of point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b><br />
+ </b>bool<b> operator==</b>(const T2&amp; that) const</font></td>
+ <td>Compare equality to an object that is a model of point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> <br />
+ </b>bool<b> operator!=</b>(const T2&amp; that) const</font></td>
+ <td>Compare inequality to an object that is a model of
+point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> <br />
+ </b>bool<b> operator&lt;</b>(const T2&amp; that) const</font></td>
+ <td>Compares y coordinates then x coordinates to break ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> <br />
+ </b>bool<b> operator&lt;=</b>(const T2&amp; that) const</font></td>
+ <td>Compares y coordinates then x coordinates to break ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> <br />
+ </b>bool<b> operator&gt;</b>(const T2&amp; that) const</font></td>
+ <td>Compares low coordinates then high coordinates to break
+ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> <br />
+ </b>bool<b> operator&gt;=</b>(const T2&amp; that) const</font></td>
+ <td>Compares low coordinates then high coordinates to break
+ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">T <b>get</b>(orientation_2d
+orient) const</font></td>
+ <td>Get the coordinate in the given orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">T <b>x</b>() const</font></td>
+ <td>Get the coordinate in the horizontal orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">T <b>y</b>() const</font></td>
+ <td>Get the coordinate in the vertical orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>set</b>(orientation_2d
+orient, T value)</font></td>
+ <td>Sets the coordinate in the given orientation to the
+value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>x</b>(T
+value)</font></td>
+ <td>Sets the coordinate in the horizontal orientation to
+the value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>y</b>(T
+value)</font></td>
+ <td>Sets the coordinate in the vertical orientation to the
+value.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top"> &nbsp;</td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk