$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r79534 - in branches/release: boost/geometry boost/geometry/algorithms boost/geometry/arithmetic boost/geometry/core boost/geometry/geometries boost/geometry/io boost/geometry/io/dsv boost/geometry/iterators boost/geometry/multi boost/geometry/policies boost/geometry/strategies boost/geometry/strategies/cartesian boost/geometry/util boost/geometry/views libs/geometry/doc libs/geometry/doc/concept libs/geometry/doc/doxy libs/geometry/doc/generated libs/geometry/doc/html libs/geometry/doc/reference libs/geometry/doc/src libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk libs/geometry/example libs/geometry/test
From: barend.gehrels_at_[hidden]
Date: 2012-07-15 11:02:16
Author: barendgehrels
Date: 2012-07-15 11:02:16 EDT (Sun, 15 Jul 2012)
New Revision: 79534
URL: http://svn.boost.org/trac/boost/changeset/79534
Log:
[geometry] merged into release (two fixes, doc change) since r79395
Properties modified: 
   branches/release/boost/geometry/algorithms/   (props changed)
   branches/release/boost/geometry/arithmetic/   (props changed)
   branches/release/boost/geometry/core/   (props changed)
   branches/release/boost/geometry/geometries/   (props changed)
   branches/release/boost/geometry/geometry.hpp   (props changed)
   branches/release/boost/geometry/io/   (props changed)
   branches/release/boost/geometry/io/dsv/   (props changed)
   branches/release/boost/geometry/iterators/   (props changed)
   branches/release/boost/geometry/multi/   (props changed)
   branches/release/boost/geometry/policies/   (props changed)
   branches/release/boost/geometry/strategies/   (props changed)
   branches/release/boost/geometry/util/   (props changed)
   branches/release/boost/geometry/views/   (props changed)
   branches/release/libs/geometry/doc/   (props changed)
   branches/release/libs/geometry/doc/Jamfile.v2   (contents, props changed)
   branches/release/libs/geometry/doc/about_documentation.qbk   (props changed)
   branches/release/libs/geometry/doc/acknowledgments.qbk   (props changed)
   branches/release/libs/geometry/doc/compiling.qbk   (props changed)
   branches/release/libs/geometry/doc/concept/   (props changed)
   branches/release/libs/geometry/doc/copyright_note_policy.txt   (props changed)
   branches/release/libs/geometry/doc/design_rationale.qbk   (props changed)
   branches/release/libs/geometry/doc/doxy/   (props changed)
   branches/release/libs/geometry/doc/generated/   (props changed)
   branches/release/libs/geometry/doc/geometry.qbk   (props changed)
   branches/release/libs/geometry/doc/html/   (props changed)
   branches/release/libs/geometry/doc/imports.qbk   (props changed)
   branches/release/libs/geometry/doc/introduction.qbk   (props changed)
   branches/release/libs/geometry/doc/make_qbk.py   (props changed)
   branches/release/libs/geometry/doc/matrix.qbk   (props changed)
   branches/release/libs/geometry/doc/quickref.xml   (props changed)
   branches/release/libs/geometry/doc/quickstart.qbk   (props changed)
   branches/release/libs/geometry/doc/readme.txt   (props changed)
   branches/release/libs/geometry/doc/reference/   (props changed)
   branches/release/libs/geometry/doc/reference.qbk   (props changed)
   branches/release/libs/geometry/doc/release_notes.qbk   (contents, props changed)
   branches/release/libs/geometry/doc/src/   (props changed)
   branches/release/libs/geometry/example/   (props changed)
   branches/release/libs/geometry/test/   (props changed)
Text files modified: 
   branches/release/boost/geometry/strategies/cartesian/cart_intersect.hpp                      |   168 ++++++++++++++++++++--------------------
   branches/release/libs/geometry/doc/Jamfile.v2                                                |     4                                         
   branches/release/libs/geometry/doc/release_notes.qbk                                         |    24 ++++-                                   
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp |    54 ++++++++++++                            
   4 files changed, 157 insertions(+), 93 deletions(-)
Modified: branches/release/boost/geometry/strategies/cartesian/cart_intersect.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/cartesian/cart_intersect.hpp	(original)
+++ branches/release/boost/geometry/strategies/cartesian/cart_intersect.hpp	2012-07-15 11:02:16 EDT (Sun, 15 Jul 2012)
@@ -172,28 +172,28 @@
             >::type promoted_type;
 
         // r: ratio 0-1 where intersection divides A/B
-		// (only calculated for non-collinear segments)
-		promoted_type r;
-		if (! collinear)
-		{
-	        // Calculate determinants - Cramers rule
-			coordinate_type const wx = get<0, 0>(a) - get<0, 0>(b);
-			coordinate_type const wy = get<0, 1>(a) - get<0, 1>(b);
-			coordinate_type const d = geometry::detail::determinant<coordinate_type>(dx_a, dy_a, dx_b, dy_b);
-			coordinate_type const da = geometry::detail::determinant<coordinate_type>(dx_b, dy_b, wx, wy);
-
-	        coordinate_type const zero = coordinate_type();
-			if (math::equals(d, zero))
-			{
-				// This is still a collinear case (because of FP imprecision this can occur here)
-				// sides.debug();
-				sides.set<0>(0,0);
-				sides.set<1>(0,0);
-				collinear = true;
-			}
-			else
-			{
-				r = da / d;
+        // (only calculated for non-collinear segments)
+        promoted_type r;
+        if (! collinear)
+        {
+            // Calculate determinants - Cramers rule
+            coordinate_type const wx = get<0, 0>(a) - get<0, 0>(b);
+            coordinate_type const wy = get<0, 1>(a) - get<0, 1>(b);
+            coordinate_type const d = geometry::detail::determinant<coordinate_type>(dx_a, dy_a, dx_b, dy_b);
+            coordinate_type const da = geometry::detail::determinant<coordinate_type>(dx_b, dy_b, wx, wy);
+
+            coordinate_type const zero = coordinate_type();
+            if (math::equals(d, zero))
+            {
+                // This is still a collinear case (because of FP imprecision this can occur here)
+                // sides.debug();
+                sides.set<0>(0,0);
+                sides.set<1>(0,0);
+                collinear = true;
+            }
+            else
+            {
+                r = promoted_type(da) / promoted_type(d);
 
                 if (! robustness_verify_r(a, b, r))
                 {
@@ -207,8 +207,8 @@
                     return Policy::disjoint();
                 }
 
-			}
-		}
+            }
+        }
 
         if(collinear)
         {
@@ -218,7 +218,7 @@
             }
             else
             {
-				// Y direction contains larger segments (maybe dx is zero)
+                // Y direction contains larger segments (maybe dx is zero)
                 return relate_collinear<1>(a, b);
             }
         }
@@ -231,23 +231,23 @@
 private :
 
 
-	// Ratio should lie between 0 and 1
-	// Also these three conditions might be of FP imprecision, the segments were actually (nearly) collinear
+    // Ratio should lie between 0 and 1
+    // Also these three conditions might be of FP imprecision, the segments were actually (nearly) collinear
     template <typename T>
     static inline bool robustness_verify_r(
                 segment_type1 const& a, segment_type2 const& b,
                 T& r)
     {
-		T const zero = 0;
-		T const one = 1;
+        T const zero = 0;
+        T const one = 1;
         if (r < zero || r > one)
         {
-		    if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b))
-		    {
-			    // Can still be disjoint (even if not one is left or right from another)
+            if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b))
+            {
+                // Can still be disjoint (even if not one is left or right from another)
                 // This is e.g. in case #snake4 of buffer test.
-			    return false;
-		    }
+                return false;
+            }
 
             //std::cout << "ROBUSTNESS: correction of r " << r << std::endl;
             // sides.debug();
@@ -273,7 +273,7 @@
             }
             else if (r < zero)
             {
-    		    r = zero;
+                r = zero;
             }
         }
         return true;
@@ -284,16 +284,16 @@
                 side_info& sides,
                 bool& collinear)
     {
-		if ((sides.zero<0>() && ! sides.zero<1>()) || (sides.zero<1>() && ! sides.zero<0>()))
-		{
-			// If one of the segments is collinear, the other must be as well.
-			// So handle it as collinear.
-			// (In float/double epsilon margins it can easily occur that one or two of them are -1/1)
-			// sides.debug();
+        if ((sides.zero<0>() && ! sides.zero<1>()) || (sides.zero<1>() && ! sides.zero<0>()))
+        {
+            // If one of the segments is collinear, the other must be as well.
+            // So handle it as collinear.
+            // (In float/double epsilon margins it can easily occur that one or two of them are -1/1)
+            // sides.debug();
             sides.set<0>(0,0);
             sides.set<1>(0,0);
             collinear = true;
-		}
+        }
     }
 
     static inline void robustness_verify_meeting(
@@ -389,11 +389,11 @@
     {
         if (sides.one_of_all_zero())
         {
-			if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b))
-			{
-    			return true;
+            if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b))
+            {
+                return true;
             }
-		}
+        }
         return false;
     }
 
@@ -412,11 +412,11 @@
 
         T const db = geometry::detail::determinant<T>(dx_a, dy_a, wx, wy);
 
-		R const zero = 0;
-		R const one = 1;
+        R const zero = 0;
+        R const one = 1;
         if (math::equals(r, zero) || math::equals(r, one))
         {
-        	R rb = db / d;
+            R rb = db / d;
             if (rb <= 0 || rb >= 1 || math::equals(rb, 0) || math::equals(rb, 1))
             {
                 if (sides.one_zero<0>() && ! sides.one_zero<1>()) // or vice versa
@@ -432,16 +432,16 @@
         }
     }
 
-	template <std::size_t Dimension>
+    template <std::size_t Dimension>
     static inline bool verify_disjoint(segment_type1 const& a,
-					segment_type2 const& b)
-	{
-		coordinate_type a_1, a_2, b_1, b_2;
-		bool a_swapped = false, b_swapped = false;
-		detail::segment_arrange<Dimension>(a, a_1, a_2, a_swapped);
-		detail::segment_arrange<Dimension>(b, b_1, b_2, b_swapped);
-		return math::smaller(a_2, b_1) || math::larger(a_1, b_2);
-	}
+                    segment_type2 const& b)
+    {
+        coordinate_type a_1, a_2, b_1, b_2;
+        bool a_swapped = false, b_swapped = false;
+        detail::segment_arrange<Dimension>(a, a_1, a_2, a_swapped);
+        detail::segment_arrange<Dimension>(b, b_1, b_2, b_swapped);
+        return math::smaller(a_2, b_1) || math::larger(a_1, b_2);
+    }
 
     template <typename Segment>
     static inline typename point_type<Segment>::type select(int index, Segment const& segment)
@@ -476,10 +476,10 @@
     template <std::size_t Dimension>
     static inline bool analyse_equal(segment_type1 const& a, segment_type2 const& b)
     {
-		coordinate_type const a_1 = geometry::get<0, Dimension>(a);
-		coordinate_type const a_2 = geometry::get<1, Dimension>(a);
-		coordinate_type const b_1 = geometry::get<0, Dimension>(b);
-		coordinate_type const b_2 = geometry::get<1, Dimension>(b);
+        coordinate_type const a_1 = geometry::get<0, Dimension>(a);
+        coordinate_type const a_2 = geometry::get<1, Dimension>(a);
+        coordinate_type const b_1 = geometry::get<0, Dimension>(b);
+        coordinate_type const b_2 = geometry::get<1, Dimension>(b);
         return math::equals(a_1, b_1)
             || math::equals(a_2, b_1)
             || math::equals(a_1, b_2)
@@ -487,21 +487,21 @@
             ;
     }
 
-	template <std::size_t Dimension>
+    template <std::size_t Dimension>
     static inline return_type relate_collinear(segment_type1 const& a,
-											   segment_type2 const& b)
-	{
-		coordinate_type a_1, a_2, b_1, b_2;
-		bool a_swapped = false, b_swapped = false;
-		detail::segment_arrange<Dimension>(a, a_1, a_2, a_swapped);
-		detail::segment_arrange<Dimension>(b, b_1, b_2, b_swapped);
-		if (math::smaller(a_2, b_1) || math::larger(a_1, b_2))
-		//if (a_2 < b_1 || a_1 > b_2)
-		{
-			return Policy::disjoint();
-		}
+                                               segment_type2 const& b)
+    {
+        coordinate_type a_1, a_2, b_1, b_2;
+        bool a_swapped = false, b_swapped = false;
+        detail::segment_arrange<Dimension>(a, a_1, a_2, a_swapped);
+        detail::segment_arrange<Dimension>(b, b_1, b_2, b_swapped);
+        if (math::smaller(a_2, b_1) || math::larger(a_1, b_2))
+        //if (a_2 < b_1 || a_1 > b_2)
+        {
+            return Policy::disjoint();
+        }
         return relate_collinear(a, b, a_1, a_2, b_1, b_2, a_swapped, b_swapped);
-	}
+    }
 
     /// Relate segments known collinear
     static inline return_type relate_collinear(segment_type1 const& a
@@ -535,22 +535,22 @@
         bool const both_swapped = a_swapped && b_swapped;
 
         // Check if segments are equal or opposite equal...
-		bool const swapped_a1_eq_b1 = math::equals(a_1, b_1);
-		bool const swapped_a2_eq_b2 = math::equals(a_2, b_2);
+        bool const swapped_a1_eq_b1 = math::equals(a_1, b_1);
+        bool const swapped_a2_eq_b2 = math::equals(a_2, b_2);
 
         if (swapped_a1_eq_b1 && swapped_a2_eq_b2)
         {
             return Policy::segment_equal(a, opposite);
         }
 
-		bool const swapped_a2_eq_b1 = math::equals(a_2, b_1);
-		bool const swapped_a1_eq_b2 = math::equals(a_1, b_2);
+        bool const swapped_a2_eq_b1 = math::equals(a_2, b_1);
+        bool const swapped_a1_eq_b2 = math::equals(a_1, b_2);
 
-		bool const a1_eq_b1 = both_swapped ? swapped_a2_eq_b2 : a_swapped ? swapped_a2_eq_b1 : b_swapped ? swapped_a1_eq_b2 : swapped_a1_eq_b1;
-		bool const a2_eq_b2 = both_swapped ? swapped_a1_eq_b1 : a_swapped ? swapped_a1_eq_b2 : b_swapped ? swapped_a2_eq_b1 : swapped_a2_eq_b2;
+        bool const a1_eq_b1 = both_swapped ? swapped_a2_eq_b2 : a_swapped ? swapped_a2_eq_b1 : b_swapped ? swapped_a1_eq_b2 : swapped_a1_eq_b1;
+        bool const a2_eq_b2 = both_swapped ? swapped_a1_eq_b1 : a_swapped ? swapped_a1_eq_b2 : b_swapped ? swapped_a2_eq_b1 : swapped_a2_eq_b2;
 
-		bool const a1_eq_b2 = both_swapped ? swapped_a2_eq_b1 : a_swapped ? swapped_a2_eq_b2 : b_swapped ? swapped_a1_eq_b1 : swapped_a1_eq_b2;
-		bool const a2_eq_b1 = both_swapped ? swapped_a1_eq_b2 : a_swapped ? swapped_a1_eq_b1 : b_swapped ? swapped_a2_eq_b2 : swapped_a2_eq_b1;
+        bool const a1_eq_b2 = both_swapped ? swapped_a2_eq_b1 : a_swapped ? swapped_a2_eq_b2 : b_swapped ? swapped_a1_eq_b1 : swapped_a1_eq_b2;
+        bool const a2_eq_b1 = both_swapped ? swapped_a1_eq_b2 : a_swapped ? swapped_a1_eq_b1 : b_swapped ? swapped_a2_eq_b2 : swapped_a2_eq_b1;
 
 
 
@@ -722,7 +722,7 @@
                 ;
         }
         // Nothing should goes through. If any we have made an error
-		// std::cout << "Robustness issue, non-logical behaviour" << std::endl;
+        // std::cout << "Robustness issue, non-logical behaviour" << std::endl;
         return Policy::error("Robustness issue, non-logical behaviour");
     }
 };
Modified: branches/release/libs/geometry/doc/Jamfile.v2
==============================================================================
--- branches/release/libs/geometry/doc/Jamfile.v2	(original)
+++ branches/release/libs/geometry/doc/Jamfile.v2	2012-07-15 11:02:16 EDT (Sun, 15 Jul 2012)
@@ -41,5 +41,5 @@
        <format>pdf:<xsl:param>img.src.path=$(images_location)/    
 ;
 
-install pdf-install : geometry : <location>. <name>geometry.pdf <install-type>PDF ;
-explicit pdf-install ;
+install pdfinstall : geometry/<format>pdf : <location>. <name>geometry.pdf <install-type>PDF ;
+explicit pdfinstall ;
Modified: branches/release/libs/geometry/doc/release_notes.qbk
==============================================================================
--- branches/release/libs/geometry/doc/release_notes.qbk	(original)
+++ branches/release/libs/geometry/doc/release_notes.qbk	2012-07-15 11:02:16 EDT (Sun, 15 Jul 2012)
@@ -12,12 +12,29 @@
 
 [section:release_notes Release Notes]
 
+
 [/=================]
-[heading Boost 1.50]
+[heading Boost 1.51]
 [/=================]
 
 [*Breaking changes]
 
+* points accessed through a pointer (e.g. in a linestring) should now be specialized without the pointer. In previous versions a type `my_point` used like `linestring<my_point*>` had to be specalized like: `template<> struct tag<my_point*>`. Now the library itself removes the pointer before calling the traits class, so now it should be like: `template<> struct tag<my_point>`
+
+[*Bugfixes]
+
+* intersection was sometimes wrong for integer points, fixed
+* documentation, order of parameters in simplify was wrong, fixed
+
+[*Solved tickets]
+
+* [@https://svn.boost.org/trac/boost/ticket/7030 7030] spherical distance, fixed (by patch of Karsten Ahnert)
+
+
+[/=================]
+[heading Boost 1.50]
+[/=================]
+
 [*Bugfixes]
 
 * the return type of comparable projected point strategy for integer points was wrong (integer), fixed
@@ -37,11 +54,6 @@
 
 * added algorithm "touches" (OGC SF compliant) for *polygon/*polygon
 
-[*Documentation]
-
-[*Internal changes]
-
-
 [/=================]
 [heading Boost 1.49]
 [/=================]
Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp	(original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp	2012-07-15 11:02:16 EDT (Sun, 15 Jul 2012)
@@ -228,6 +228,46 @@
     }
 }
 
+static void copy_string_property(std::string const& source, std::string& target)
+{
+    if (target.empty())
+    {
+        target = source;
+    }
+}
+
+
+template <typename Parameters>
+static void copy_parameter_properties(parameter const& source, Parameters& target)
+{
+    BOOST_FOREACH(parameter& t, target)
+    {
+        if (source.name == t.name)
+        {
+            t.skip = source.skip;
+            copy_string_property(source.brief_description, t.brief_description);
+            copy_string_property(source.type, t.type);
+            copy_string_property(source.default_value, t.default_value);
+            copy_string_property(source.fulltype, t.fulltype);
+
+            return;
+        }
+    }
+    // If not found, write a warning
+    std::cerr << "Parameter not found: " << source.name << std::endl;
+}
+
+
+template <typename Parameters>
+static void copy_parameters_properties(Parameters const& source, Parameters& target)
+{
+    BOOST_FOREACH(parameter const& s, source)
+    {
+        copy_parameter_properties(s, target);
+    }
+}
+
+
 
 template <typename Element>
 static void parse_element(rapidxml::xml_node<>* node, configuration const& config, std::string const& parent, Element& el)
@@ -290,13 +330,25 @@
             std::string kind = get_attribute(node, "kind");
             if (kind == "param")
             {
-                parse_parameter_list(node->first_node(), el.parameters);
+                // Parse parameters and their descriptions.
+                // NOTE: they are listed here, but the order might not be the order in the function call
+                std::vector<parameter> parameters;
+                parse_parameter_list(node->first_node(), parameters);
+                copy_parameters_properties(parameters, el.parameters);
             }
             else if (kind == "templateparam")
             {
                 parse_parameter_list(node->first_node(), el.template_parameters);
             }
         }
+        else if (full == ".param")
+        {
+            // Parse one parameter, and add it to el.parameters
+            parameter p;
+            parse_parameter(node->first_node(), p);
+            el.parameters.push_back(p);
+        }
+
 
         parse_element(node->first_node(), config, full, el);
         parse_element(node->next_sibling(), config, parent, el);