|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r57382 - in sandbox/ggl/formal_review/libs/ggl: doc doc/doxygen_input/pages doc/doxygen_input/sourcecode doc/doxygen_output/html example
From: barend.gehrels_at_[hidden]
Date: 2009-11-04 16:55:32
Author: barendgehrels
Date: 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
New Revision: 57382
URL: http://svn.boost.org/trac/boost/changeset/57382
Log:
GGL doc updates
Text files modified:
sandbox/ggl/formal_review/libs/ggl/doc/Doxyfile | 3
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_a_design_rationale.hpp | 142 ++++-----
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_c_strategy_rationale.hpp | 11
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_mainpage.hpp | 8
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_pages.hpp | 43 ++-
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.cpp | 20 +
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/02__linestring__example_8cpp-example.html | 4
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2for__each_8hpp.html | 16
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2for__each_8hpp_source.html | 36 +-
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2intersection_8hpp_source.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/annotated.html | 3
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/assemble_8hpp_source.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/classes.html | 38 +-
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compare__circular_8hpp.html | 8
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compare__circular_8hpp_source.html | 240 ++++++++--------
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compiling.html | 20 +
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/design.html | 138 ++++-----
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/disjoint_8hpp_source.html | 4
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/download.html | 5
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__a__design__rationale_8hpp_source.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__c__strategy__rationale_8hpp_source.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__mainpage_8hpp_source.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__pages_8hpp_source.html | 24
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/equals_8hpp_source.html | 558 ++++++++++++++++++++--------------------
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/files.html | 6
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_0x66.html | 7
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_0x68.html | 3
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_func.html | 9
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__compare.html | 21 +
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__equals.html | 4
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__for__each.html | 184 +++++++++++++
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__overlay.html | 52 +++
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__utility.html | 59 ---
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/hierarchy.html | 3
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/index.html | 9
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/multi_2algorithms_2for__each_8hpp_source.html | 4
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaceggl.html | 185 ------------
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaceggl_1_1strategy_1_1compare.html | 3
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespacemembers.html | 6
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespacemembers_func.html | 6
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaces.html | 1
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/ogc.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/point__on__border_8hpp.html | 4
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/point__on__border_8hpp_source.html | 26
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/policies_2compare_8hpp_source.html | 375 +++++++++++++-------------
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/select__coordinate__type_8hpp_source.html | 38 +-
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/sort__interior__rings_8hpp_source.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/status.html | 4
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/strategy.html | 12
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1add__const__if__c.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1equal__to.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1greater.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1less.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1select__coordinate__type.html | 4
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1strategy_1_1compare_1_1circular__comparator.html | 6
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/union_8hpp_source.html | 2
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/x02__numeric__adaptor__example_8cpp-example.html | 2
sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.cpp | 2
58 files changed, 1201 insertions(+), 1179 deletions(-)
Modified: sandbox/ggl/formal_review/libs/ggl/doc/Doxyfile
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/Doxyfile (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/Doxyfile 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -113,7 +113,8 @@
FILE_PATTERNS = *.hpp
RECURSIVE = NO
EXCLUDE = ../../../boost/ggl/util/builder.hpp \
- ../../../boost/ggl/point_on_line.hpp \
+ ../../../boost/ggl/algorithms/parse.hpp \
+ ../../../boost/ggl/algorithms/point_on_line.hpp \
../../../boost/ggl/strategies/cartesian/cart_intersect.hpp \
../../../boost/ggl/util/distance_sort.hpp \
./doxygen_extension_examples.hpp
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_a_design_rationale.hpp
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_a_design_rationale.hpp (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_a_design_rationale.hpp 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -31,8 +31,7 @@
And a function, containing the algorithm:
\code
-double distance(mypoint const& a,
- mypoint const& b)
+double distance(mypoint const& a, mypoint const& b)
{
double dx = a.x - b.x;
double dy = a.y - b.y;
@@ -40,11 +39,11 @@
}
\endcode
-Quite simple, and it is usable, but not generic. For a library it has to be designed way further. The design above can only be used for 2D points, for the struct point (and no other struct), in a Cartesian coordinate system.
+Quite simple, and it is usable, but not generic. For a library it has to be designed way further. The design above can only be used for 2D points, for the struct \b mypoint (and no other struct), in a Cartesian coordinate system.
A generic library should be able to calculate the distance:
-- for any point class or struct, not on just this mypoint type
+- for any point class or struct, not on just this \b mypoint type
- in more than two dimensions
-- for other coordinate systems, e.g. over the earth or over a sphere
+- for other coordinate systems, e.g. over the earth or on a sphere
- between a point and a line or between other geometry combinations
- in higher precision than double
- avoiding the square root: often we dont want to do that because it is a relatively expensive function, and for comparing distances it is not necessary.
@@ -56,7 +55,7 @@
\section par2 Using templates
-The distance function can be changed into a template function. This is trivial and allows calculating the distance between other point types than just mypoint. We add two template parameters, allowing input of two different point types.
+The distance function can be changed into a template function. This is trivial and allows calculating the distance between other point types than just \b mypoint. We add two template parameters, allowing input of two different point types.
\code
template <typename P1, typename P2>
@@ -95,7 +94,7 @@
}
\endcode
-which is then specialized for our mypoint type, implementing a static method called get:
+which is then specialized for our \b mypoint type, implementing a static method called get:
\code
namespace traits
{
@@ -112,9 +111,9 @@
}
\endcode
-Calling traits::access<point, 0>::get(a) now returns us our x-coordinate. Nice? It is too verbose for a function like this, used so often in the library. We can shorten the syntax by adding an extra function:
-template <int D, typename P>
+Calling traits::access<mypoint, 0>::get(a) now returns us our x-coordinate. Nice? It is too verbose for a function like this, used so often in the library. We can shorten the syntax by adding an extra \b free \b function:
\code
+template <int D, typename P>
inline double get(P const& p)
{
return traits::access<P, D>::get(p);
@@ -147,26 +146,22 @@
\section par4 Dimension agnosticism
Now we can calculate the distance between points in 2D, points of any structure or class. However, we wanted to have 3D as well. So we have to make it dimension agnostic.
-This complicates our distance function. We can use a for-loop to walk through dimensions, but for loops have another performance than the addition which was there originally. However, we can make more usage of templates and make the distance algorithm as following, more complex but attractive for template fans:
+This complicates our distance function. We can use a for-loop to walk through dimensions, but for loops have another performance than the straightforward coordinate addition which was there originally. However, we can make more usage of templates and make the distance algorithm as following, more complex but attractive for template fans:
\code
template <typename P1, typename P2, int D>
struct pythagoras
{
- static double apply(P1 const& a,
- P2 const& b)
+ static double apply(P1 const& a, P2 const& b)
{
double d = get<D-1>(a) - get<D-1>(b);
- return d * d + pythagoras
- <P1, P2, D-1>
- ::apply(a, b);
+ return d * d + pythagoras<P1, P2, D-1>::apply(a, b);
}
};
template <typename P1, typename P2 >
struct pythagoras<P1, P2, 0>
{
- static double apply(P1 const&,
- P2 const&)
+ static double apply(P1 const&, P2 const&)
{
return 0;
}
@@ -178,13 +173,9 @@
template <typename P1, typename P2>
double distance(P1 const& a, P2 const& b)
{
- BOOST_STATIC_ASSERT((
- dimension<P1>::value
- == dimension<P2>::value ));
-
- return sqrt(pythagoras
- <P1, P2, dimension<P1>::value>
- :: apply(a, b));
+ BOOST_STATIC_ASSERT(( dimension<P1>::value == dimension<P2>::value ));
+
+ return sqrt(pythagoras<P1, P2, dimension<P1>::value>::apply(a, b));
}
\endcode
@@ -197,7 +188,7 @@
}
\endcode
-which has to be specialized again for the struct mypoint. Because it only has to publish a value, we conveniently derive it from the Boost Meta-Programming Library (MPL) class boost::mpl::int_:
+which has to be specialized again for the struct \b mypoint. Because it only has to publish a value, we conveniently derive it from the Boost Meta-Programming Library (MPL) class boost::mpl::int_:
\code
namespace traits
{
@@ -262,14 +253,10 @@
typename coordinate_type<P2>::type
>::type computation_type;
- static computation_type apply(
- P1 const& a, P2 const& b)
+ static computation_type apply(P1 const& a, P2 const& b)
{
- computation_type d
- = get<D-1>(a) - get<D-1>(b);
- return d * d + pythagoras
- <P1, P2, D-1>
- ::apply(a, b);
+ computation_type d = get<D-1>(a) - get<D-1>(b);
+ return d * d + pythagoras <P1, P2, D-1> ::apply(a, b);
}
};
\endcode
@@ -279,13 +266,12 @@
\section par6 Different geometries
-Weve designed a dimension agnostic system supporting any point-type of any coordinate type. There are still some tweaks but they will be worked out later.
+Weve designed a dimension agnostic system supporting any point type of any coordinate type. There are still some tweaks but they will be worked out later.
Now we will see how we calculate the distance between a point and a polygon, or between a point and a line-segment. These formulae are more complex, and the influence on design is even larger.
We dont want to add a function with another name:
\code
template <typename P, typename S>
-double distance_point_segment(P const& p,
- S const& s)
+double distance_point_segment(P const& p, S const& s)
\endcode
We want to be generic, the distance function has to be called from code not knowing the type of geometry it handles, so it has to be named distance. We also cannot create an overload because that would be ambiguous, having the same template signature.
@@ -342,8 +328,7 @@
template <typename P1, typename P2>
struct distance < point_tag, point_tag, P1, P2 >
{
- static double apply(P1 const& a,
- P2 const& b)
+ static double apply(P1 const& a, P2 const& b)
{
// here we call pythagoras
// exactly like we did before
@@ -357,8 +342,7 @@
point_tag, segment_tag, P, S
>
{
- static double apply(P const& p,
- S const& s)
+ static double apply(P const& p, S const& s)
{
// here we refer to another function
// implementing point-segment
@@ -393,21 +377,20 @@
\section par7 Kernel revisited
-We described above that we had a traits class coordinate_type, defined in namespace traits, and defined a separate coordinate_type class as well. This was actually not really necessary before, because the only difference was namespace clause. But now that we have another geometry type, a segment in this case, it is essential. We can call the coordinate_type meta-function for any geometry type, point, segment, polygon, etc, implemented again by tag dispatching:
+We described above that we had a traits class coordinate_type, defined in namespace traits, and defined a separate coordinate_type class as well. This was actually not really necessary before, because the only difference was the namespace clause. But now that we have another geometry type, a segment in this case, it is essential. We can call the coordinate_type meta-function for any geometry type, point, segment, polygon, etc, implemented again by tag dispatching:
\code
template <typename G>
struct coordinate_type
{
- typedef typename
- dispatch::coordinate_type
+ typedef typename dispatch::coordinate_type
<
typename tag<G>::type, G
>::type type;
};
\endcode
-Inside the dispatch namespace this meta-function is implemented twice: a generic version and one specialization for points. The specialization for points calls the traits class. The generic version calls the point-specialization, as a sort of recursive meta-function definition:
+Inside the dispatch namespace this meta-function is implemented twice: a generic version and one specialization for points. The specialization for points calls the traits class. The generic version calls the point specialization, as a sort of recursive meta-function definition:
\code
namespace dispatch
@@ -448,7 +431,7 @@
\section par8 Coordinate system
Until here we assumed a Cartesian system. But we know that the Earth is not flat. Calculating a distance between two GPS-points with the system above would result in nonsense. So we again extend our design. We define for each point type a coordinate system type, using the traits system again. Then we make the calculation dependant on that coordinate system.
-Coordinate system is similar to coordinate type, a meta-function, calling a dispatch function to have it for any geometry-type, forwarding to its point-specialization, and finally calling a traits class, defining a typedef type with a coordinate system. We dont show that all here again. We only show the definition of a few coordinate systems:
+Coordinate system is similar to coordinate type, a meta-function, calling a dispatch function to have it for any geometry-type, forwarding to its point specialization, and finally calling a traits class, defining a typedef type with a coordinate system. We dont show that all here again. We only show the definition of a few coordinate systems:
\code
struct cartesian {};
@@ -459,9 +442,9 @@
};
\endcode
-So Cartesian is simple, for geographic we can also select if its coordinates stored in degrees or in radians.
+So Cartesian is simple, for geographic we can also select if its coordinates are stored in degrees or in radians.
-The distance function now will change: it will select the computation method for the corresponding coordinate system and then call the dispatch struct for distance. We call the computation method specialized for coordinate systems a \b strategy. So the new version of the distance function is:
+The distance function will now change: it will select the computation method for the corresponding coordinate system and then call the dispatch struct for distance. We call the computation method specialized for coordinate systems a \b strategy. So the new version of the distance function is:
\code
template <typename G1, typename G2>
@@ -503,7 +486,7 @@
So here is our Pythagoras again, now defined as a strategy. The distance dispatch function just calls its apply method.
-So this is an important step: for spherical or geographical coordinate systems, another strategy (computation method) can be implemented. For spherical coordinate systems we have the haversine formula. So it is specialized like this
+So this is an important step: for spherical or geographical coordinate systems, another strategy (computation method) can be implemented. For spherical coordinate systems we have the haversine formula. So the dispatching traits struct is specialized like this
\code
template <typename P1, typename P2,
int D = 2>
@@ -516,10 +499,10 @@
// is omitted here
\endcode
-For geography, we have some alternatives for distance calculation. There is the Andoyer method[*], fast and precise, and there is the Vincenty method[*], slower and more precise, and there are some less precise approaches as well.
+For geography, we have some alternatives for distance calculation. There is the Andoyer method, fast and precise, and there is the Vincenty method, slower and more precise, and there are some less precise approaches as well.
Per coordinate system, one strategy is defined as the default strategy.
-To be able to use any strategy, we modify our design again and add an overload for the distance algorithm, taking a strategy. That enables us to call distance with another strategy.
+To be able to use another strategy as well, we modify our design again and add an overload for the distance algorithm, taking a strategy object as a third parameter.
This new overload distance function also has the advantage that the strategy can be constructed outside the distance function. Because it was constructed inside above, it could not have construction parameters. But for Andoyer or Vincenty, or the haversine formula, it certainly makes sense to have a constructor taking the radius of the earth as a parameter.
So the distance overloaded function is:
@@ -537,7 +520,7 @@
}
\endcode
-The strategy has to have a method apply taking two points as argument (for points). It is not required that it is a static method. A strategy
+The strategy has to have a method \b apply taking two points as arguments (for points). It is not required that it is a static method. A strategy
might define a constructor, where a configuration value is passed and stored as a member variable. In those cases a static
method would be inconvenient. It can be implemented as a normal method (with the const qualifier).
@@ -577,7 +560,7 @@
- a specialization for traits::dimension
- a specialization for traits::access
-The last one is a class, containing a function, the first four are meta-functions.
+The last one is a class, containing the method \b get and the (optional) method \b set, the first four are meta-functions, either defining \b type or declaring \b value (conform MPL conventions).
So we now have agnosticism for the number of dimensions, agnosticism for coordinate systems, our design can handle any coordinate type, and it can handle different geometry types.
Furthermore we can specify our own strategies, the code will not compile in case of two points with different dimensions (because of the assertion), and it will not compile for two points with different coordinate systems (because there is no specialization).
We still have the distance function returning double. Next paragraph will solve that.
@@ -587,14 +570,13 @@
\section par10 Return type
We promised that calling sqrt was not always necessary. So we define a distance result struct that contains the squared value and is convertible to a double value.
This, however, only has to be done for Pythagoras. The spherical distance functions do not take the square root so for them it is not necessary to avoid the expensive square root call; they can just return their distance.
-So the distance result struct is dependant on strategy, therefore made a member type of the strategy, looking like this:
+So the distance result struct is dependant on strategy, therefore made a member type of the strategy. The result struct looks like this:
\code
template<typename T = double>
struct cartesian_distance
{
T sq;
- explicit cartesian_distance(T const& v)
- : sq (v) {}
+ explicit cartesian_distance(T const& v) : sq (v) {}
inline operator T() const
{
@@ -604,10 +586,11 @@
\endcode
It also has operators defined to compare itself to other results without taking the square root.
+
Each strategy should define its return type, within the strategy class, e.g.:
\code
- typedef cartesian_distance<T> return_type;
+ typedef cartesian_distance<T> return_type;
\endcode
or:
@@ -634,7 +617,8 @@
<
typename cs_tag<P1>::type,
typename cs_tag<P2>::type,
- P1, P2>::type S;
+ P1, P2
+ >::type S;
typedef typename S::return_type type;
};
@@ -643,12 +627,11 @@
and modify our distance function:
\code
template <typename G1, typename G2>
-inline typename distance_result
- <G1, G2>::type
- distance(G1 const& G1, G2 const& G2)
+inline typename distance_result<G1, G2>::type distance(G1 const& G1, G2 const& G2)
+{ ... }
\endcode
-Of course also the apply functions in the dispatch specializations will return a result like this, they have a strategy as a template parameter everywhere, making the less verbose version possible.
+Of course also the apply functions in the dispatch specializations will return a result like this. They have a strategy as a template parameter everywhere, making the less verbose version possible.
@@ -661,11 +644,12 @@
Then we add a meta-function reverse_dispatch:
\code
template <typename G1, typename G2>
-struct reverse_dispatch : detail::reverse_dispatch
-<
- geometry_id<G1>::type::value,
- geometry_id<G2>::type::value
-> {};
+struct reverse_dispatch : detail::reverse_dispatch
+ <
+ geometry_id<G1>::type::value,
+ geometry_id<G2>::type::value
+ >
+{};
\endcode
Because of the order in geometry_id, we can arrange (template) parameters in that order, in specializations. So the detail structure looks like:
@@ -673,13 +657,13 @@
namespace detail
{
template <int Id1, int Id2>
- struct reverse_dispatch
- : boost::mpl::if_c
+ struct reverse_dispatch : boost::mpl::if_c
<
(Id1 > Id2),
boost::true_type,
boost::false_type
- > {};
+ >
+ {};
\endcode
And our distance function will be modified again with some template meta-programming:
@@ -735,21 +719,21 @@
template <>
struct is_multi<multi_polygon_tag> : boost::true_type {};
-
-
-
} // namespace dispatch
\endcode
Now we can specialize on is_multi, so we add two boolean IsMulti's, one for each geometry type, to our distance dispatch struct and make the call to them in the distance function:
-// specialization:
-
\code
-template <typename GeometryTag1, typename GeometryTag2,
- typename G1, typename G2, typename Strategy>
-struct distance<GeometryTag1, GeometryTag2, G1, G2, strategy_tag_distance_point_point, Strategy, false, true>
+// specialization:
+template <typename GeometryTag1, typename GeometryTag2, typename G1, typename G2, typename Strategy>
+struct distance
+ <
+ GeometryTag1, GeometryTag2, G1, G2, Strategy,
+ false, // G1 is_multi
+ true // G2 is_multi
+ >
: detail::distance::distance_single_to_multi<G1, G2, Strategy>
{};
\endcode
@@ -795,7 +779,7 @@
-\section par14 Sfinae
+\section par14 SFINAE
Instead of tag dispatching we alternatively could have chosen for SFINAE, mentioned above. With SFINAE (Substitution Failure Is Not An Error) we add optional parameters to the distance function, which sole use is to make an overload invalid for other geometry types than specified. So like:
\code
template <typename P1, typename P2>
@@ -813,13 +797,11 @@
- can be done on functions but not on structs (meta-functions). So the coordinate_type meta-function would still have to use tag dispatching
- gives often compiler troubles and headaches: if a user makes an error somewhere, the compiler will not select any of the methods, and/or it will give completely incomprehensible error listings, just because of this SFINAE
- does not support partial specializations because it is a function. The tag-dispatching function is of course also not supporting that, but it forwards its call to the dispatch struct where partial specializations (and member template functions) are possible. The SFINAE could do that as well but then: why not just add one tag more and have tag dispatching instead?
-- is a trick to deceive the compiler. As a language behavior it was designed to avoid programs becoming ill-formed [2], while tag dispatching is based on specialization, a core feature of C++
+- is a trick to deceive the compiler. As a language behavior it was designed to avoid programs becoming ill-formed (http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error), while tag dispatching is based on specialization, a core feature of C++
- looks more ugly
- is simply not necessary because we have tag dispatching :-)
-
-
*/
#endif // _DOXYGEN_DESIGN_RATIONALE_HPP
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_c_strategy_rationale.hpp
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_c_strategy_rationale.hpp (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_c_strategy_rationale.hpp 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -43,20 +43,19 @@
In most cases, there is an additional method \b result which returns the calculated result. That result-method is a also non-static const method, and the state is passed.
Note that the methods might be non-static const, but they might also be static. That is not checked by the concept-checker.
-A strategy for a specific algorithm has a concept. The distance-strategy should follow the distance-strategy-concept. The point-in-polygon strategy should follow the point-in-polygon-strategy-concept. Those concepts are not modelled as traits classes (contrary to the geomtries). The reason for this is that it seems not necessary to directly legacy classes as concepts, without modification. A wrapper can than be built. So the strategies should have a method apply and should define some types.
+A strategy for a specific algorithm has a concept. The distance-strategy should follow the distance-strategy-concept. The point-in-polygon strategy should follow the point-in-polygon-strategy-concept. Those concepts are not modelled as traits classes (contrary to the geometries). The reason for this is that it seems not necessary to use legacy classes as concepts, without modification. A wrapper can be built. So the strategies should have a method \b apply and should define some types.
-Which types, and which additional methods (often a method \b result), is thus dependant on the algorithm.
+Which types, and which additional methods (often a method \b result), is dependant on the algorithm / type of strategy.
Strategies are checked by a strategy-concept-checker. For this checker (and sometimes for checking alone), they should define some types. Because if no types are defined, the methods cannot be checked at compile time... The strategy-concept-checkers are thus implemented per algorithm and they use the Boost Concept Check Library for checking.
-\section strpar3 Alternative designs
-
-So as explained above, the essention of the current design is:
+So as explained above, the essention of the design is:
- function determines default-strategy, or is called with specified strategy
-- function calls dispatch (on geometry_tag)
+- function calls dispatch (dispatching is done on geometry_tag)
- dispatch calls implementation (in namespace detail), which can be shared for different geometry types and for single/multi
- implementation calls strategy (if applicable), with the smallest common (geometric) element applicable for all calculation method, the common denominator
+\section strpar3 Alternative designs
Some calculations (strategies) might need to take the whole geometry, instead of working on point-per-point or segment-per-segment base. This would bypass the dispatch functionality. Because all strategies would take the whole geometry, it is not necessary to dispatch per geometry type. In fact this dispatching on geometry-type is moved to the strategy_traits class (which are specialized per coordinate system in the current design). So in this alternative design, the strategy traits class specializes on both geometry-tag and coordinate-system-tag, to select the default strategy.
For the default strategy, this move from "dispatch" to another dispatch called "strategy_XXX" (XXX is the algorithm) might make sense. However, if library users would call the overloaded function and specify a strategy, the only thing what would happen is that that specified strategy is called. So, for example:
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_mainpage.hpp
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_mainpage.hpp (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_mainpage.hpp 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -23,7 +23,7 @@
</em>
\section intro Introduction
-The Generic Geometry Library, GGL (currently in "Formal Review Request") defines \ref concepts "concepts" for geometries and implements some algorithms on such geometries.
+The Generic Geometry Library, GGL, currently in \b Formal \b Review, defines \ref concepts "concepts" for geometries and implements some algorithms on such geometries.
GGL contains a dimension-agnostic, coordinate-system-agnostic and scalable kernel, based on concepts, meta-functions and tag- dispatching.
On top of that kernel, algorithms are built: area, length, perimeter, centroid, convex hull, intersection (clipping), within (point in polygon), distance, envelope (bounding box), simplify, transform, convert, and more. The library is also designed to support high precision arithmetic numbers, such as GMP.
@@ -39,11 +39,13 @@
- conventions from the std library
- conventions and names from one of the OGC standards on Geometry
-This Generic Geometry Library (ggl) is now being proposed to the Boost Library Collection
+This Generic Geometry Library (ggl) is now being reviewed by the Boost Community
The library can be downloaded from the Boost Sandbox,
go to the \ref download "Download page" for more information.
+A (recently started) GGL Wiki is here: http://trac.osgeo.org/ggl/wiki
+
\section quickstart Quick start
It is not possible to show the whole library at a glance. A few very small examples are shown below.
@@ -82,7 +84,7 @@
\skip QRect
\until }
-Many more examples are on the page \b Examples
+More examples are on the page \b Examples
*/
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_pages.hpp
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_pages.hpp (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_pages.hpp 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -21,7 +21,7 @@
to use the algorithms. Nothing has to be linked.
The Generic Geometry Library is only dependant on (header only) Boost libraries. Download the Boost
-Library Collection from www.boost.org, adapt include path to include Boost.
+Library Collection from www.boost.org, adapt the include path to include Boost.
\section platforms Platforms
@@ -40,7 +40,7 @@
\section convenient_includes Convenient includes
-This section concentrates on how to include the Generic Geometry Library.
+This section concentrates on how to include GGL.
The most convenient headerfile including all algorithms and strategies is ggl.hpp:
- \#include <ggl/ggl.hpp> It is recommended to include this file.
@@ -60,8 +60,8 @@
etc. Using this headerfile the library seems to be a non-template library, so it is convenient for users that
are not so into the template world.
-
-
+For users using multi-geometries:
+- \#include <ggl/multi/multi.hpp>
\section advanced_includes Advanced includes
@@ -77,16 +77,34 @@
- \#include <ggl/geometries/adapted/std_as_linestring.hpp> allows you to use things like \c std::vector<point_2d>
and put them as parameters into algorithms.
-
If you are using boost tuples and want to handle them as Cartesian points
- \#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+\section extension_includes Extensions
+The GGL is currently (since 0.5) split into the kernel and several extensions. As this split is relatively new,
+there are not yet umbrella-include files, but most things below will do:
+
+If you want to use the \b geographic coordinate system:
+- the tag is already included in the kernel
+- \#include <ggl/extensions/gis/geographic/strategies/andoyer.hpp> for Andoyer distance calculations
+- \#include <ggl/extensions/gis/geographic/strategies/vincenty.hpp> for Vincenty distance calculations
+
+If you want to use the \b projections:
+- \#include <ggl/extensions/gis/projections/parameters.hpp>
+- \#include <ggl/extensions/gis/projections/projection.hpp>
+- \#include <ggl/extensions/gis/projections/factory.hpp>
+
+If you want to use the \b circle (n-sphere)
+- \#include <ggl/extensions/nsphere/...> <i>Several headerfiles, there is not yet a common include</i>
+
+
+
\section performance Performance finetuning
The enumeration below is not exhaustive but can contain hints to improve the performance
- For Microsoft, set the define _SECURE_SCL=0
- For Microsoft, set the define _HAS_ITERATOR_DEBUGGING=0
-- measurements indicate that MSVC 2005 generates faster code than MSVC 2008
+- our measurements indicate that MSVC 2005 generates faster code than MSVC 2008
- Using StlPort results in significant faster code than Microsoft's standard library
- Of course turn on compiler optimizations, compile in release mode
@@ -178,8 +196,7 @@
<em>Note that this definition is different from several other polygon definitions and libraries,
where polygons are not allowed to have holes. These polygons are comparable to the linear_ring above</em>
-The following geometries were in the first preview, because they are defined in OGC, but not in the current preview
-(they will be added again).
+And multi-geometries:
- \ref ggl::multi_point "multi_point": collection of points
- \ref ggl::multi_linestring "multi_linestring": collection of linestrings
- \ref ggl::multi_polygon "multi_polygon": collection of polygons
@@ -292,6 +309,8 @@
resulting in modifying geometries. Functions using an output iterator are called _inserter,
so convex_hull_inserter inserts points (the hull) into something.
- many headerfiles are moved and/or renamed
+- strategies now define a method \b apply, in previous versions this was \b operator()
+ <i>this only influences your code if you've made strategies yourself</i>
- ...
@@ -310,7 +329,7 @@
to make the library more generic and to define clear concepts.
It is now called Generic Geometry Library, abbreviated to GGL.
From 2009 Mateusz Loskot, an active member of Geospatial Open Source communities,
-joined and helped with reviewing code, guidelines, WKB, iterators, and the Wiki and ticket system
+joined and helped with reviewing code, guidelines, WKB, iterators, and the Wiki and ticket system (http://trac.osgeo.org/ggl)
The library is now called Generic Geometry Library, abbreviated to GGL.
The Generic Geometry Library is Open Source and is proposed to the Boost community.
@@ -328,14 +347,10 @@
The command
-<tt>svn co https://svn.boost.org/svn/boost/sandbox/ggl ggl</tt>
+<tt>svn co https://svn.boost.org/svn/boost/sandbox/ggl/formal_review ggl</tt>
will download the library to your machine.
-Current \b Formal \b Review version is here:
-https://svn.boost.org/svn/boost/sandbox/ggl/formal_review
-
-
*/
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.cpp
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.cpp (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.cpp 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -6,7 +6,9 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// Doxygen Examples, for email formal review
+// Doxygen Examples, for e.g. email formal review
+
+#include <boost/foreach.hpp>
#include <ggl/ggl.hpp>
#include <ggl/geometries/adapted/tuple_cartesian.hpp>
@@ -45,6 +47,21 @@
<< std::endl;
}
+void example_less()
+{
+ typedef boost::tuple<double, double> P;
+ std::vector<P> line;
+ line.push_back(boost::make_tuple(8.1, 1.9));
+ line.push_back(boost::make_tuple(4.2, 7.5));
+ line.push_back(boost::make_tuple(2.3, 3.6));
+ std::sort(line.begin(), line.end(), ggl::less<P>());
+
+ // Display ordered points
+ BOOST_FOREACH(P const& p, line)
+ {
+ std::cout << ggl::dsv(p) << std::endl;
+ }
+}
@@ -53,5 +70,6 @@
example_distance();
example_length1();
example_length2();
+ example_less();
return 0;
}
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/02__linestring__example_8cpp-example.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/02__linestring__example_8cpp-example.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/02__linestring__example_8cpp-example.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -196,8 +196,8 @@
{
<a class="code" href="classggl_1_1linestring.html" title="A linestring (named so by OGC) is a collection (default a vector) of points.">linestring_2d</a> lscopy = ls;
std::for_each(lscopy.begin(), lscopy.end(), translate_function<point_2d>);
- <a name="a13"></a><a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a>(lscopy, scale_functor<point_2d>());
- <a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a>(lscopy, translate_function<point_2d>);
+ <a name="a13"></a><a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a>(lscopy, scale_functor<point_2d>());
+ <a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a>(lscopy, translate_function<point_2d>);
std::cout << <span class="stringliteral">"modified line: "</span> << <a class="code" href="group__utility.html#g9419e5dd6f98468153ca14a35763bfd7" title="Main DSV-streaming function.">ggl::dsv</a>(lscopy) << std::endl;
}
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2for__each_8hpp.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2for__each_8hpp.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2for__each_8hpp.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -50,21 +50,21 @@
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#66bf40f0ee4dc883d9d3b621aeb2e81d">ggl::for_each_point</a> (Geometry &geometry, Functor f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g66bf40f0ee4dc883d9d3b621aeb2e81d">ggl::for_each_point</a> (Geometry &geometry, Functor f)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f">ggl::for_each_point</a> (Geometry const &geometry, Functor f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f">ggl::for_each_point</a> (Geometry const &geometry, Functor f)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#529f5655aa7702e9f143263b484ff91b">ggl::for_each_segment</a> (Geometry &geometry, Functor f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g529f5655aa7702e9f143263b484ff91b">ggl::for_each_segment</a> (Geometry &geometry, Functor f)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e">ggl::for_each_segment</a> (Geometry const &geometry, Functor f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e">ggl::for_each_segment</a> (Geometry const &geometry, Functor f)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
</table>
</div>
<hr size="1">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2for__each_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2for__each_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2for__each_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -226,29 +226,29 @@
<a name="l00193"></a>00193 <span class="keyword">typename</span> Functor,
<a name="l00194"></a>00194 <span class="keywordtype">bool</span> IsConst
<a name="l00195"></a>00195 >
-<a name="l00196"></a>00196 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a> {};
+<a name="l00196"></a>00196 <span class="keyword">struct </span><a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a> {};
<a name="l00197"></a>00197
<a name="l00198"></a>00198
<a name="l00199"></a>00199 <span class="keyword">template</span> <<span class="keyword">typename</span> Po<span class="keywordtype">int</span>, <span class="keyword">typename</span> Functor, <span class="keywordtype">bool</span> IsConst>
-<a name="l00200"></a>00200 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><point_tag, false, Point, Functor, IsConst>
+<a name="l00200"></a>00200 <span class="keyword">struct </span><a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><point_tag, false, Point, Functor, IsConst>
<a name="l00201"></a>00201 : detail::for_each::fe_point_per_point<Point, Functor, IsConst>
<a name="l00202"></a>00202 {};
<a name="l00203"></a>00203
<a name="l00204"></a>00204
<a name="l00205"></a>00205 <span class="keyword">template</span> <<span class="keyword">typename</span> Line<span class="keywordtype">string</span>, <span class="keyword">typename</span> Functor, <span class="keywordtype">bool</span> IsConst>
-<a name="l00206"></a>00206 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><linestring_tag, false, Linestring, Functor, IsConst>
+<a name="l00206"></a>00206 <span class="keyword">struct </span><a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><linestring_tag, false, Linestring, Functor, IsConst>
<a name="l00207"></a>00207 : detail::for_each::fe_range_per_point<Linestring, Functor, IsConst>
<a name="l00208"></a>00208 {};
<a name="l00209"></a>00209
<a name="l00210"></a>00210
<a name="l00211"></a>00211 <span class="keyword">template</span> <<span class="keyword">typename</span> Ring, <span class="keyword">typename</span> Functor, <span class="keywordtype">bool</span> IsConst>
-<a name="l00212"></a>00212 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><ring_tag, false, Ring, Functor, IsConst>
+<a name="l00212"></a>00212 <span class="keyword">struct </span><a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><ring_tag, false, Ring, Functor, IsConst>
<a name="l00213"></a>00213 : detail::for_each::fe_range_per_point<Ring, Functor, IsConst>
<a name="l00214"></a>00214 {};
<a name="l00215"></a>00215
<a name="l00216"></a>00216
<a name="l00217"></a>00217 <span class="keyword">template</span> <<span class="keyword">typename</span> Polygon, <span class="keyword">typename</span> Functor, <span class="keywordtype">bool</span> IsConst>
-<a name="l00218"></a>00218 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><polygon_tag, false, Polygon, Functor, IsConst>
+<a name="l00218"></a>00218 <span class="keyword">struct </span><a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><polygon_tag, false, Polygon, Functor, IsConst>
<a name="l00219"></a>00219 : detail::for_each::fe_polygon_per_point<Polygon, Functor, IsConst>
<a name="l00220"></a>00220 {};
<a name="l00221"></a>00221
@@ -261,28 +261,28 @@
<a name="l00228"></a>00228 <span class="keyword">typename</span> Functor,
<a name="l00229"></a>00229 <span class="keywordtype">bool</span> IsConst
<a name="l00230"></a>00230 >
-<a name="l00231"></a>00231 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a> {};
+<a name="l00231"></a>00231 <span class="keyword">struct </span><a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a> {};
<a name="l00232"></a>00232
<a name="l00233"></a>00233 <span class="keyword">template</span> <<span class="keyword">typename</span> Po<span class="keywordtype">int</span>, <span class="keyword">typename</span> Functor, <span class="keywordtype">bool</span> IsConst>
-<a name="l00234"></a>00234 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><point_tag, false, Point, Functor, IsConst>
+<a name="l00234"></a>00234 <span class="keyword">struct </span><a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><point_tag, false, Point, Functor, IsConst>
<a name="l00235"></a>00235 : detail::for_each::fe_point_per_segment<Point, Functor, IsConst>
<a name="l00236"></a>00236 {};
<a name="l00237"></a>00237
<a name="l00238"></a>00238
<a name="l00239"></a>00239 <span class="keyword">template</span> <<span class="keyword">typename</span> Line<span class="keywordtype">string</span>, <span class="keyword">typename</span> Functor, <span class="keywordtype">bool</span> IsConst>
-<a name="l00240"></a>00240 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><linestring_tag, false, Linestring, Functor, IsConst>
+<a name="l00240"></a>00240 <span class="keyword">struct </span><a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><linestring_tag, false, Linestring, Functor, IsConst>
<a name="l00241"></a>00241 : detail::for_each::fe_range_per_segment<Linestring, Functor, IsConst>
<a name="l00242"></a>00242 {};
<a name="l00243"></a>00243
<a name="l00244"></a>00244
<a name="l00245"></a>00245 <span class="keyword">template</span> <<span class="keyword">typename</span> Ring, <span class="keyword">typename</span> Functor, <span class="keywordtype">bool</span> IsConst>
-<a name="l00246"></a>00246 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><ring_tag, false, Ring, Functor, IsConst>
+<a name="l00246"></a>00246 <span class="keyword">struct </span><a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><ring_tag, false, Ring, Functor, IsConst>
<a name="l00247"></a>00247 : detail::for_each::fe_range_per_segment<Ring, Functor, IsConst>
<a name="l00248"></a>00248 {};
<a name="l00249"></a>00249
<a name="l00250"></a>00250
<a name="l00251"></a>00251 <span class="keyword">template</span> <<span class="keyword">typename</span> Polygon, <span class="keyword">typename</span> Functor, <span class="keywordtype">bool</span> IsConst>
-<a name="l00252"></a>00252 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><polygon_tag, false, Polygon, Functor, IsConst>
+<a name="l00252"></a>00252 <span class="keyword">struct </span><a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><polygon_tag, false, Polygon, Functor, IsConst>
<a name="l00253"></a>00253 : detail::for_each::fe_polygon_per_segment<Polygon, Functor, IsConst>
<a name="l00254"></a>00254 {};
<a name="l00255"></a>00255
@@ -292,11 +292,11 @@
<a name="l00259"></a>00259 <span class="preprocessor"></span>
<a name="l00260"></a>00260
<a name="l00268"></a>00268 <span class="keyword">template</span><<span class="keyword">typename</span> Geometry, <span class="keyword">typename</span> Functor>
-<a name="l00269"></a><a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f">00269</a> <span class="keyword">inline</span> Functor <a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a>(Geometry <span class="keyword">const</span>& geometry, Functor f)
+<a name="l00269"></a><a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f">00269</a> <span class="keyword">inline</span> Functor <a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a>(Geometry <span class="keyword">const</span>& geometry, Functor f)
<a name="l00270"></a>00270 {
<a name="l00271"></a>00271 concept::check<const Geometry>();
<a name="l00272"></a>00272
-<a name="l00273"></a>00273 <span class="keywordflow">return</span> <a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">dispatch::for_each_point</a>
+<a name="l00273"></a>00273 <span class="keywordflow">return</span> <a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">dispatch::for_each_point</a>
<a name="l00274"></a>00274 <
<a name="l00275"></a>00275 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry>::type</a>,
<a name="l00276"></a>00276 <a class="code" href="structggl_1_1is__multi.html" title="Meta-function defining &quot;true&quot; for multi geometries (multi_point, etc).">is_multi<Geometry>::type::value</a>,
@@ -308,11 +308,11 @@
<a name="l00282"></a>00282
<a name="l00283"></a>00283
<a name="l00291"></a>00291 <span class="keyword">template</span><<span class="keyword">typename</span> Geometry, <span class="keyword">typename</span> Functor>
-<a name="l00292"></a><a class="code" href="namespaceggl.html#66bf40f0ee4dc883d9d3b621aeb2e81d">00292</a> <span class="keyword">inline</span> Functor <a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a>(Geometry& geometry, Functor f)
+<a name="l00292"></a><a class="code" href="group__for__each.html#g66bf40f0ee4dc883d9d3b621aeb2e81d">00292</a> <span class="keyword">inline</span> Functor <a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a>(Geometry& geometry, Functor f)
<a name="l00293"></a>00293 {
<a name="l00294"></a>00294 concept::check<Geometry>();
<a name="l00295"></a>00295
-<a name="l00296"></a>00296 <span class="keywordflow">return</span> <a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">dispatch::for_each_point</a>
+<a name="l00296"></a>00296 <span class="keywordflow">return</span> <a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">dispatch::for_each_point</a>
<a name="l00297"></a>00297 <
<a name="l00298"></a>00298 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry>::type</a>,
<a name="l00299"></a>00299 <a class="code" href="structggl_1_1is__multi.html" title="Meta-function defining &quot;true&quot; for multi geometries (multi_point, etc).">is_multi<Geometry>::type::value</a>,
@@ -324,11 +324,11 @@
<a name="l00305"></a>00305
<a name="l00306"></a>00306
<a name="l00315"></a>00315 <span class="keyword">template</span><<span class="keyword">typename</span> Geometry, <span class="keyword">typename</span> Functor>
-<a name="l00316"></a><a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e">00316</a> <span class="keyword">inline</span> Functor <a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a>(Geometry <span class="keyword">const</span>& geometry, Functor f)
+<a name="l00316"></a><a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e">00316</a> <span class="keyword">inline</span> Functor <a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a>(Geometry <span class="keyword">const</span>& geometry, Functor f)
<a name="l00317"></a>00317 {
<a name="l00318"></a>00318 concept::check<const Geometry>();
<a name="l00319"></a>00319
-<a name="l00320"></a>00320 <span class="keywordflow">return</span> <a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">dispatch::for_each_segment</a>
+<a name="l00320"></a>00320 <span class="keywordflow">return</span> <a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">dispatch::for_each_segment</a>
<a name="l00321"></a>00321 <
<a name="l00322"></a>00322 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry>::type</a>,
<a name="l00323"></a>00323 <a class="code" href="structggl_1_1is__multi.html" title="Meta-function defining &quot;true&quot; for multi geometries (multi_point, etc).">is_multi<Geometry>::type::value</a>,
@@ -340,11 +340,11 @@
<a name="l00329"></a>00329
<a name="l00330"></a>00330
<a name="l00338"></a>00338 <span class="keyword">template</span><<span class="keyword">typename</span> Geometry, <span class="keyword">typename</span> Functor>
-<a name="l00339"></a><a class="code" href="namespaceggl.html#529f5655aa7702e9f143263b484ff91b">00339</a> <span class="keyword">inline</span> Functor <a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a>(Geometry& geometry, Functor f)
+<a name="l00339"></a><a class="code" href="group__for__each.html#g529f5655aa7702e9f143263b484ff91b">00339</a> <span class="keyword">inline</span> Functor <a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a>(Geometry& geometry, Functor f)
<a name="l00340"></a>00340 {
<a name="l00341"></a>00341 concept::check<Geometry>();
<a name="l00342"></a>00342
-<a name="l00343"></a>00343 <span class="keywordflow">return</span> <a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">dispatch::for_each_segment</a>
+<a name="l00343"></a>00343 <span class="keywordflow">return</span> <a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">dispatch::for_each_segment</a>
<a name="l00344"></a>00344 <
<a name="l00345"></a>00345 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry>::type</a>,
<a name="l00346"></a>00346 <a class="code" href="structggl_1_1is__multi.html" title="Meta-function defining &quot;true&quot; for multi geometries (multi_point, etc).">is_multi<Geometry>::type::value</a>,
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2intersection_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2intersection_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/algorithms_2intersection_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -135,7 +135,7 @@
<a name="l00147"></a>00147 <span class="keywordflow">if</span> (v[i].index_of_parent == -1)
<a name="l00148"></a>00148 {
<a name="l00149"></a>00149 <span class="keyword">typename</span> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">ggl::point_type<GeometryOut>::type</a> point;
-<a name="l00150"></a>00150 <a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(holes[v[i].index], point);
+<a name="l00150"></a>00150 <a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(holes[v[i].index], point);
<a name="l00151"></a>00151 <span class="keywordflow">if</span> (<a class="code" href="group__within.html#g599c2aa76cf2037eb40514e449ace28d" title="Within, examine if a geometry is within another geometry.">ggl::within</a>(point, geometry))
<a name="l00152"></a>00152 {
<a name="l00153"></a>00153 <span class="keyword">typename</span> ring_type<GeometryOut>::type hole;
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/annotated.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/annotated.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/annotated.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -148,9 +148,6 @@
<tr><td class="indexkey"><a class="el" href="classggl_1_1strategy_1_1centroid___1_1bashein__detmer.html">ggl::strategy::centroid_::bashein_detmer< Point, PointOfSegment, CalculationType ></a></td><td class="indexvalue">Centroid calculation using algorith Bashein / Detmer </td></tr>
<tr><td class="indexkey"><a class="el" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html">ggl::strategy::compare::circular_comparator< CoordinateType, Units, Compare ></a></td><td class="indexvalue">Compare (in one direction) <a class="el" href="namespaceggl_1_1strategy.html">strategy</a> for spherical coordinates </td></tr>
<tr><td class="indexkey"><a class="el" href="structggl_1_1strategy_1_1compare_1_1default__strategy.html">ggl::strategy::compare::default_strategy</a></td><td class="indexvalue">Default <a class="el" href="namespaceggl_1_1strategy.html">strategy</a>, indicates the default <a class="el" href="namespaceggl_1_1strategy.html">strategy</a> for comparisons </td></tr>
- <tr><td class="indexkey"><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">ggl::strategy::compare::detail::shift< Units ></a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html">ggl::strategy::compare::detail::shift< degree ></a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html">ggl::strategy::compare::detail::shift< radian ></a></td><td class="indexvalue"></td></tr>
<tr><td class="indexkey"><a class="el" href="classggl_1_1strategy_1_1convex__hull_1_1graham__andrew.html">ggl::strategy::convex_hull::graham_andrew< InputGeometry, OutputPoint ></a></td><td class="indexvalue">Graham scan <a class="el" href="namespaceggl_1_1strategy.html">strategy</a> to calculate convex hull </td></tr>
<tr><td class="indexkey"><a class="el" href="classggl_1_1strategy_1_1distance_1_1cross__track.html">ggl::strategy::distance::cross_track< Point, PointOfSegment ></a></td><td class="indexvalue">Strategy functor for <a class="el" href="namespaceggl_1_1strategy_1_1distance.html">distance</a> <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> to <a class="el" href="classggl_1_1segment.html" title="Class segment: small class containing two (templatized) point references.">segment</a> calculation </td></tr>
<tr><td class="indexkey"><a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html">ggl::strategy::distance::haversine< Point1, Point2 ></a></td><td class="indexvalue">Distance calculation for spherical coordinates on a perfect sphere using <a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html" title="Distance calculation for spherical coordinates on a perfect sphere using haversine...">haversine</a> </td></tr>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/assemble_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/assemble_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/assemble_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -116,7 +116,7 @@
<a name="l00075"></a>00075 )
<a name="l00076"></a>00076 {
<a name="l00077"></a>00077 <span class="keyword">typename</span> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">ggl::point_type<Geometry1>::type</a> point;
-<a name="l00078"></a>00078 <a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(geometry1, point);
+<a name="l00078"></a>00078 <a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(geometry1, point);
<a name="l00079"></a>00079 <span class="keywordflow">if</span> (<a class="code" href="group__within.html#g599c2aa76cf2037eb40514e449ace28d" title="Within, examine if a geometry is within another geometry.">ggl::within</a>(point, geometry2))
<a name="l00080"></a>00080 {
<a name="l00081"></a>00081 take_if_1_is_in_2
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/classes.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/classes.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/classes.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -45,25 +45,25 @@
<h1>Class Index</h1><p><div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_H">H</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_P">P</a> | <a class="qindex" href="#letter_R">R</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_U">U</a> | <a class="qindex" href="#letter_W">W</a> | <a class="qindex" href="#
letter_X">X</a></div><p>
<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
<tr><td><a name="letter_A"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> A </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1from__cartesian__3__to__spherical__3.html">from_cartesian_3_to_spherical_3</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_ring.html">Ring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1access.html">access</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1from__spherical__2__to__cartesian__3.html">from_spherical_2_to_cartesian_3</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1ring__tag.html">ring_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="str
uctggl_1_1traits_1_1access_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_00_01_dimension_01_4.html">access< ggl::detail::intersection::intersection_point< P >, Dimension ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1from__spherical__3__to__cartesian__3.html">from_spherical_3_to_cartesian_3</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1traits_1_1ring__type.html">ring_type</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td></tr><tr><td><a class="el" href="structggl_1_1add__const__if__c.html">add_const_if_c</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> G </div></td><
/tr></table>
-</td><td><a class="el" href="structggl_1_1ring__type.html">ring_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1append__point.html">append_point</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1cs_1_1geographic.html">geographic</a> (<a class="el" href="namespaceggl_1_1cs.html">ggl::cs</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1rotate__transformer.html">rotate_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1area__result.html">area_result</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1geographic__tag.html">geographic_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name
="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> S </div></td></tr></table>
-</td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_area_strategy.html">AreaStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1geometry__collection__tag.html">geometry_collection_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1scale__transformer.html">scale_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a name="letter_B"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> B </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1geometry__id.html">geometry_id</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1scale__transformer_3_01_p1_00_01_p2_00_012_00_012_01_4.html">scale_transformer< P1, P2, 2, 2 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1centroid___1_1bashein__detmer.html">bashein_detmer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1centroid__.html">ggl::strategy::centroid_</a>) </td><td><a class="el" href="structggl_1_1geometry__not__recognized__tag.html">geometry_not_recognized_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1scale__transformer_3_01_p1_00_01_p2_00_013_00_013_01_4.html">scale_transformer< P1, P2, 3, 3 ></a> (<a class="el" h
ref="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_box.html">Box</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1convex__hull_1_1graham__andrew.html">graham_andrew</a> (<a class="el" href="namespaceggl_1_1strategy_1_1convex__hull.html">ggl::strategy::convex_hull</a>) </td><td><a class="el" href="structggl_1_1section.html">section</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1box.html">box</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1greater.html">greater</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1sections.html">sections</a> (<a class="el" href="namespaceggl.html">ggl</a>) &nbs
p;</td></tr><tr><td><a class="el" href="structggl_1_1box__tag.html">box_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_H"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> H </div></td></tr></table>
-</td><td><a class="el" href="classggl_1_1segment.html">segment</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1area_1_1by__triangles.html">by_triangles</a> (<a class="el" href="namespaceggl_1_1strategy_1_1area.html">ggl::strategy::area</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html">haversine</a> (<a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_segment.html">Segment</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td></tr><tr><td><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> C </div></td></tr></table>
-</td><td><a class="el" href="classggl_1_1strategy_1_1area_1_1huiller.html">huiller</a> (<a class="el" href="namespaceggl_1_1strategy_1_1area.html">ggl::strategy::area</a>) </td><td><a class="el" href="structggl_1_1segment__identifier.html">segment_identifier</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1cs_1_1cartesian.html">cartesian</a> (<a class="el" href="namespaceggl_1_1cs.html">ggl::cs</a>) </td><td><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> I </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1segment__intersection__points.html">segment_intersection_points</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1cartesian__distance.html">cartesian_distance</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1indexed__access.html">indexed_access</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1segment__iterator.html">segment_iterator</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1cartesian__tag.html">cartesian_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1interior__rings.html">interior_rings</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class
="el" href="structggl_1_1segment__tag.html">segment_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1centroid__exception.html">centroid_exception</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1interior__type.html">interior_type</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1policies_1_1relate_1_1segments__direction.html">segments_direction</a> (<a class="el" href="namespaceggl_1_1policies_1_1relate.html">ggl::policies::relate</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_centroid_strategy.html">CentroidStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1interior__type.html">interior_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) &nbs
p;</td><td><a class="el" href="structggl_1_1policies_1_1relate_1_1segments__intersection__points.html">segments_intersection_points</a> (<a class="el" href="namespaceggl_1_1policies_1_1relate.html">ggl::policies::relate</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html">circular_comparator</a> (<a class="el" href="namespaceggl_1_1strategy_1_1compare.html">ggl::strategy::compare</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1inverse__transformer.html">inverse_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1policies_1_1relate_1_1segments__tupled.html">segments_tupled</a> (<a class="el" href="namespaceggl_1_1policies_1_1relate.html">ggl::policies::relate</a>) </td></tr><tr><td><a class="el" href="structggl_1_1circular__iterator.html">circular_iterator</a> (<a cla
ss="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1is__linear.html">is_linear</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1select__calculation__type.html">select_calculation_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1clear.html">clear</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1is__multi.html">is_multi</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1select__coordinate__type.html">select_coordinate_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_box.html">ConstBox</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><
a class="el" href="structggl_1_1is__radian.html">is_radian</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1select__most__precise.html">select_most_precise</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_linestring.html">ConstLinestring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> L </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">shift</a> (<a class="el" href="namespaceggl_1_1strategy_1_1compare_1_1detail.html">ggl::strategy::compare::detail</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_multi_linestring.html">ConstMultiLinestring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1length__result.html">length_result</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html">shift< degree ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1compare_1_1detail.html">ggl::strategy::compare::detail</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_multi_point.html">ConstMultiPoint</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </t
d><td><a class="el" href="structggl_1_1less.html">less</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html">shift< radian ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1compare_1_1detail.html">ggl::strategy::compare::detail</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_multi_polygon.html">ConstMultiPolygon</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1intersection_1_1liang__barsky.html">liang_barsky</a> (<a class="el" href="namespaceggl_1_1strategy_1_1intersection.html">ggl::strategy::intersection</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1side_1_1side__by__triangle.html">side_by_triangle</a> (<a class="el" href="namespaceggl_1_1strategy_1_1side.html">ggl::strategy::side</a>) </td></tr><tr
><td><a class="el" href="classggl_1_1concept_1_1_const_point.html">ConstPoint</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1linear__ring.html">linear_ring</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1concept_1_1_simplify_strategy.html">SimplifyStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_polygon.html">ConstPolygon</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1linestring.html">linestring</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1single__tag.html">single_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_c
onst_ring.html">ConstRing</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_linestring.html">Linestring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1cs_1_1spherical.html">spherical</a> (<a class="el" href="namespaceggl_1_1cs.html">ggl::cs</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_segment.html">ConstSegment</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1linestring__tag.html">linestring_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1spherical__tag.html">spherical_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_convex_hull_strategy.html">ConvexHullSt
rategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> M </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1strategy__area.html">strategy_area</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1coordinate__system.html">coordinate_system</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1map__transformer.html">map_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1strategy__centroid.html">strategy_centroid</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1coordinate__system.html">coordinate_system</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1multi__linestring.html">multi_linestring</a> (<a class="el" href="namespaceggl.html">ggl</a>) &
nbsp; </td><td><a class="el" href="structggl_1_1strategy__compare.html">strategy_compare</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1coordinate__system_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_01_4.html">coordinate_system< ggl::detail::intersection::intersection_point< P > ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1multi__linestring__tag.html">multi_linestring_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__convex__hull.html">strategy_convex_hull</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1coordinate__type.html">coordinate_type</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a cla
ss="el" href="structggl_1_1multi__point.html">multi_point</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__distance.html">strategy_distance</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1coordinate__type.html">coordinate_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1multi__point__tag.html">multi_point_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__distance__segment.html">strategy_distance_segment</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1coordinate__type_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_01_4.html">coordinate_type< ggl::detail::intersection::intersection_point< P > ></a> (<a class="e
l" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1multi__polygon.html">multi_polygon</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__parse.html">strategy_parse</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1copy__direct.html">copy_direct</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1multi__polygon__tag.html">multi_polygon_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__side.html">strategy_side</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1copy__per__coordinate.html">copy_per_coordinate</a> (
<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_multi_linestring.html">MultiLinestring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy__tag.html">strategy_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1distance_1_1cross__track.html">cross_track</a> (<a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_multi_point.html">MultiPoint</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy__tag_3_01strategy_1_1distance_1_1pythagoras_3_01_point1_00_01_point2_01_4_01_4.html">strategy_tag< strategy::distance::pythagoras< Point1
, Point2 > ></a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1within_1_1crossings__multiply.html">crossings_multiply</a> (<a class="el" href="namespaceggl_1_1strategy_1_1within.html">ggl::strategy::within</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_multi_polygon.html">MultiPolygon</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy__tag_3_01strategy_1_1distance_1_1xy__point__segment_3_01_point_00_01_point44a0bc328e7ec9bd6c5d771967a8f024.html">strategy_tag< strategy::distance::xy_point_segment< Point, PointOfSegment, PPStrategy > ></a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1cs__tag.html">cs_tag</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a name="letter_
N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> N </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1strategy__tag__distance__point__point.html">strategy_tag_distance_point_point</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1cs__tag.html">cs_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1not__implemented.html">not_implemented</a> (<a class="el" href="namespaceggl_1_1strategy.html">ggl::strategy</a>) </td><td><a class="el" href="structggl_1_1strategy__tag__distance__point__segment.html">strategy_tag_distance_point_segment</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> D </div></td></tr></table>
-</td><td><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> P </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1strategy__tag__unknown.html">strategy_tag_unknown</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1de9im.html">de9im</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1point.html">point</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__transform.html">strategy_transform</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1de9im__segment.html">de9im_segment</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_point.html">Point</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy__within.html">strategy_within</a> (<a class="el" href="namespaceggl
.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1compare_1_1default__strategy.html">default_strategy</a> (<a class="el" href="namespaceggl_1_1strategy_1_1compare.html">ggl::strategy::compare</a>) </td><td><a class="el" href="structggl_1_1traits_1_1point__order.html">point_order</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="classggl_1_1svg__manipulator.html">svg_manipulator</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1degree.html">degree</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1point__order.html">point_order</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> T </div></td></tr></table>
-</td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1degree__radian__vv.html">degree_radian_vv</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1point__tag.html">point_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1tag.html">tag</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1degree__radian__vv__3.html">degree_radian_vv_3</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1traits_1_1point__type.html">point_type</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1tag.html">tag</a> (<a class="el" href="namesp
aceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1dimension.html">dimension</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1point__type.html">point_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1tag_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_01_4.html">tag< ggl::detail::intersection::intersection_point< P > ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td></tr><tr><td><a class="el" href="structggl_1_1dimension.html">dimension</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1point__xy.html">point_xy</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1topological__dimension.html">topological_dimensio
n</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classcore__dispatch_1_1dimension.html">core_dispatch::dimension</a> </td><td><a class="el" href="structggl_1_1concept_1_1_point_distance_strategy.html">PointDistanceStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1translate__transformer.html">translate_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1dimension_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_01_4.html">dimension< ggl::detail::intersection::intersection_point< P > ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="class_point_list.html">PointList</a>
</td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1translate__transformer_3_01_p1_00_01_p2_00_012_00_012_01_4.html">translate_transformer< P1, P2, 2, 2 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1policies_1_1relate_1_1direction__type.html">direction_type</a> (<a class="el" href="namespaceggl_1_1policies_1_1relate.html">ggl::policies::relate</a>) </td><td><a class="el" href="structggl_1_1concept_1_1_point_segment_distance_strategy.html">PointSegmentDistanceStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1translate__transformer_3_01_p1_00_01_p2_00_013_00_013_01_4.html">translate_transformer< P1, P2, 3, 3 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></t
r><tr><td><a class="el" href="structggl_1_1distance__result.html">distance_result</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1cs_1_1polar.html">polar</a> (<a class="el" href="namespaceggl_1_1cs.html">ggl::cs</a>) </td><td><a name="letter_U"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> U </div></td></tr></table>
-</td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1simplify_1_1douglas__peucker.html">douglas_peucker</a> (<a class="el" href="namespaceggl_1_1strategy_1_1simplify.html">ggl::strategy::simplify</a>) </td><td><a class="el" href="classggl_1_1polygon.html">polygon</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1transform_1_1ublas__transformer.html">ublas_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> E </div></td></tr></table>
-</td><td><a class="el" href="classggl_1_1concept_1_1_polygon.html">Polygon</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1transform_1_1ublas__transformer_3_01_p1_00_01_p2_00_012_00_012_01_4.html">ublas_transformer< P1, P2, 2, 2 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1equal__to.html">equal_to</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1polygon__tag.html">polygon_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1ublas__transformer_3_01_p1_00_01_p2_00_013_00_012_01_4.html">ublas_transformer< P1, P2, 3, 2 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) <
/td></tr><tr><td><a class="el" href="structggl_1_1ever__circling__iterator.html">ever_circling_iterator</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1distance_1_1pythagoras.html">pythagoras</a> (<a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1transform_1_1ublas__transformer_3_01_p1_00_01_p2_00_013_00_013_01_4.html">ublas_transformer< P1, P2, 3, 3 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1exception.html">exception</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_R"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> R </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1traits_1_1use__std.html">use_std</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1area_1_1huiller_1_1excess__sum.html">huiller::excess_sum</a> (<a class="el" href="namespaceggl_1_1strategy_1_1area.html">ggl::strategy::area</a>) </td><td><a class="el" href="classggl_1_1radian.html">radian</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_W"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> W </div></td></tr></table>
-</td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1exterior__ring.html">exterior_ring</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1range__iterator__const__if__c.html">range_iterator_const_if_c</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1within_1_1winding.html">winding</a> (<a class="el" href="namespaceggl_1_1strategy_1_1within.html">ggl::strategy::within</a>) </td></tr><tr><td><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> F </div></td></tr></table>
-</td><td><a class="el" href="structggl_1_1range__type.html">range_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_within_strategy.html">WithinStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1within_1_1franklin.html">franklin</a> (<a class="el" href="namespaceggl_1_1strategy_1_1within.html">ggl::strategy::within</a>) </td><td><a class="el" href="structggl_1_1replace__point__type.html">replace_point_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_X"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> X </div></td></tr></table>
-</td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1from__cartesian__3__to__spherical__2.html">from_cartesian_3_to_spherical_2</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1reverse__dispatch.html">reverse_dispatch</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1distance_1_1xy__point__segment.html">xy_point_segment</a> (<a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a>) </td></tr></table><p><div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" hre
f="#letter_G">G</a> | <a class="qindex" href="#letter_H">H</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_P">P</a> | <a class="qindex" href="#letter_R">R</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_U">U</a> | <a class="qindex" href="#letter_W">W</a> | <a class="qindex" href="#letter_X">X</a></div><p>
+</td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1from__cartesian__3__to__spherical__2.html">from_cartesian_3_to_spherical_2</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1replace__point__type.html">replace_point_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1access.html">access</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1from__cartesian__3__to__spherical__3.html">from_cartesian_3_to_spherical_3</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1reverse__dispatch.html">reverse_dispatch</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class
="el" href="structggl_1_1traits_1_1access_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_00_01_dimension_01_4.html">access< ggl::detail::intersection::intersection_point< P >, Dimension ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1from__spherical__2__to__cartesian__3.html">from_spherical_2_to_cartesian_3</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_ring.html">Ring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td></tr><tr><td><a class="el" href="structggl_1_1add__const__if__c.html">add_const_if_c</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1from__spherical__3__to__cartesian__3.html">from_spherical_3_to_cartes
ian_3</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1ring__tag.html">ring_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1append__point.html">append_point</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> G </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1traits_1_1ring__type.html">ring_type</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td></tr><tr><td><a class="el" href="structggl_1_1area__result.html">area_result</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1cs_1_1geographic.html">geographic</a> (<a class="el" href="namespaceggl_1_1cs.html">ggl::cs</a>) </td><td><a class="el" href="structggl_1_1ring__type.html">ring_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_area_strategy.html">AreaStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1geographic__tag.html">geographic_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1rotate_
_transformer.html">rotate_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a name="letter_B"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> B </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1geometry__collection__tag.html">geometry_collection_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> S </div></td></tr></table>
+</td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1centroid___1_1bashein__detmer.html">bashein_detmer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1centroid__.html">ggl::strategy::centroid_</a>) </td><td><a class="el" href="structggl_1_1geometry__id.html">geometry_id</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1scale__transformer.html">scale_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_box.html">Box</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1geometry__not__recognized__tag.html">geometry_not_recognized_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1scale__transf
ormer_3_01_p1_00_01_p2_00_012_00_012_01_4.html">scale_transformer< P1, P2, 2, 2 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="classggl_1_1box.html">box</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1convex__hull_1_1graham__andrew.html">graham_andrew</a> (<a class="el" href="namespaceggl_1_1strategy_1_1convex__hull.html">ggl::strategy::convex_hull</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1scale__transformer_3_01_p1_00_01_p2_00_013_00_013_01_4.html">scale_transformer< P1, P2, 3, 3 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1box__tag.html">box_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="str
uctggl_1_1greater.html">greater</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1section.html">section</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1area_1_1by__triangles.html">by_triangles</a> (<a class="el" href="namespaceggl_1_1strategy_1_1area.html">ggl::strategy::area</a>) </td><td><a name="letter_H"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> H </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1sections.html">sections</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> C </div></td></tr></table>
+</td><td><a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html">haversine</a> (<a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a>) </td><td><a class="el" href="classggl_1_1segment.html">segment</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1cs_1_1cartesian.html">cartesian</a> (<a class="el" href="namespaceggl_1_1cs.html">ggl::cs</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1area_1_1huiller.html">huiller</a> (<a class="el" href="namespaceggl_1_1strategy_1_1area.html">ggl::strategy::area</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_segment.html">Segment</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td></tr><tr><td><a class="el" href="structggl_1_1cartesian__distance.html">cartesian_distance</a> (<a class="el" href="namespaceggl.html">ggl</a>) <
/td><td><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> I </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1segment__identifier.html">segment_identifier</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1cartesian__tag.html">cartesian_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1indexed__access.html">indexed_access</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1segment__intersection__points.html">segment_intersection_points</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1centroid__exception.html">centroid_exception</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1interior__rings.html">interior_rings</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a cl
ass="el" href="structggl_1_1segment__iterator.html">segment_iterator</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_centroid_strategy.html">CentroidStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1traits_1_1interior__type.html">interior_type</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1segment__tag.html">segment_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html">circular_comparator</a> (<a class="el" href="namespaceggl_1_1strategy_1_1compare.html">ggl::strategy::compare</a>) </td><td><a class="el" href="structggl_1_1interior__type.html">interior_type</a> (<a class="el" href="namespaceggl.html">ggl</a>)  
; </td><td><a class="el" href="structggl_1_1policies_1_1relate_1_1segments__direction.html">segments_direction</a> (<a class="el" href="namespaceggl_1_1policies_1_1relate.html">ggl::policies::relate</a>) </td></tr><tr><td><a class="el" href="structggl_1_1circular__iterator.html">circular_iterator</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1inverse__transformer.html">inverse_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1policies_1_1relate_1_1segments__intersection__points.html">segments_intersection_points</a> (<a class="el" href="namespaceggl_1_1policies_1_1relate.html">ggl::policies::relate</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1clear.html">clear</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) &n
bsp;</td><td><a class="el" href="structggl_1_1is__linear.html">is_linear</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1policies_1_1relate_1_1segments__tupled.html">segments_tupled</a> (<a class="el" href="namespaceggl_1_1policies_1_1relate.html">ggl::policies::relate</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_box.html">ConstBox</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1is__multi.html">is_multi</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1select__calculation__type.html">select_calculation_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_linestring.html">ConstLinestring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>)
</td><td><a class="el" href="structggl_1_1is__radian.html">is_radian</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1select__coordinate__type.html">select_coordinate_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_multi_linestring.html">ConstMultiLinestring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> L </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1select__most__precise.html">select_most_precise</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_multi_point.html">ConstMultiPoint</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1length__result.html">length_result</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1side_1_1side__by__triangle.html">side_by_triangle</a> (<a class="el" href="namespaceggl_1_1strategy_1_1side.html">ggl::strategy::side</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_multi_polygon.html">ConstMultiPolygon</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1less.html">less</a> (<a class="el" href="namespaceggl.html">ggl</a>) &
nbsp; </td><td><a class="el" href="structggl_1_1concept_1_1_simplify_strategy.html">SimplifyStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_point.html">ConstPoint</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1intersection_1_1liang__barsky.html">liang_barsky</a> (<a class="el" href="namespaceggl_1_1strategy_1_1intersection.html">ggl::strategy::intersection</a>) </td><td><a class="el" href="structggl_1_1single__tag.html">single_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_polygon.html">ConstPolygon</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1linear__ring.html">linear_ring</a> (<a class="el" href=
"namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1cs_1_1spherical.html">spherical</a> (<a class="el" href="namespaceggl_1_1cs.html">ggl::cs</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_ring.html">ConstRing</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1linestring.html">linestring</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1spherical__tag.html">spherical_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_const_segment.html">ConstSegment</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_linestring.html">Linestring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </
td><td><a class="el" href="structggl_1_1strategy__area.html">strategy_area</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1concept_1_1_convex_hull_strategy.html">ConvexHullStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1linestring__tag.html">linestring_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__centroid.html">strategy_centroid</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1coordinate__system.html">coordinate_system</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> M </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1strategy__compare.html">strategy_compare</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1coordinate__system.html">coordinate_system</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1map__transformer.html">map_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1strategy__convex__hull.html">strategy_convex_hull</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1coordinate__system_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_01_4.html">coordinate_system< ggl::detail::intersection::intersection_point< P > ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) &
nbsp; </td><td><a class="el" href="structggl_1_1multi__linestring.html">multi_linestring</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__distance.html">strategy_distance</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1coordinate__type.html">coordinate_type</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1multi__linestring__tag.html">multi_linestring_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__distance__segment.html">strategy_distance_segment</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1coordinate__type.html">coordinate_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el"
href="structggl_1_1multi__point.html">multi_point</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__parse.html">strategy_parse</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1coordinate__type_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_01_4.html">coordinate_type< ggl::detail::intersection::intersection_point< P > ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1multi__point__tag.html">multi_point_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__side.html">strategy_side</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1copy__direct.html">copy_direct</a> (<a class="el"
href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1multi__polygon.html">multi_polygon</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__tag.html">strategy_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1copy__per__coordinate.html">copy_per_coordinate</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1multi__polygon__tag.html">multi_polygon_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy__tag_3_01strategy_1_1distance_1_1pythagoras_3_01_point1_00_01_point2_01_4_01_4.html">strategy_tag< strategy::distance::pythagoras< Point1, Point2 > ></a> (<a class="el" href="
namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1distance_1_1cross__track.html">cross_track</a> (<a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_multi_linestring.html">MultiLinestring</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy__tag_3_01strategy_1_1distance_1_1xy__point__segment_3_01_point_00_01_point44a0bc328e7ec9bd6c5d771967a8f024.html">strategy_tag< strategy::distance::xy_point_segment< Point, PointOfSegment, PPStrategy > ></a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1within_1_1crossings__multiply.html">crossings_multiply</a> (<a class="el" href="namespaceggl_1_1strategy_1_1within.html">ggl::strategy::within</a>) </td><td><a cl
ass="el" href="classggl_1_1concept_1_1_multi_point.html">MultiPoint</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy__tag__distance__point__point.html">strategy_tag_distance_point_point</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1cs__tag.html">cs_tag</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_multi_polygon.html">MultiPolygon</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy__tag__distance__point__segment.html">strategy_tag_distance_point_segment</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1cs__tag.html">cs_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>)  
; </td><td><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> N </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1strategy__tag__unknown.html">strategy_tag_unknown</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> D </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1strategy_1_1not__implemented.html">not_implemented</a> (<a class="el" href="namespaceggl_1_1strategy.html">ggl::strategy</a>) </td><td><a class="el" href="structggl_1_1strategy__transform.html">strategy_transform</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1de9im.html">de9im</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> P </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1strategy__within.html">strategy_within</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1de9im__segment.html">de9im_segment</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1point.html">point</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1svg__manipulator.html">svg_manipulator</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1compare_1_1default__strategy.html">default_strategy</a> (<a class="el" href="namespaceggl_1_1strategy_1_1compare.html">ggl::strategy::compare</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_point.html">Point</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a name="letter_T"></a><table border="0
" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> T </div></td></tr></table>
+</td></tr><tr><td><a class="el" href="classggl_1_1degree.html">degree</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1point__order.html">point_order</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1traits_1_1tag.html">tag</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1degree__radian__vv.html">degree_radian_vv</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1point__order.html">point_order</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1tag.html">tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1str
ategy_1_1transform_1_1degree__radian__vv__3.html">degree_radian_vv_3</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td><td><a class="el" href="structggl_1_1point__tag.html">point_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1tag_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_01_4.html">tag< ggl::detail::intersection::intersection_point< P > ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1dimension.html">dimension</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1traits_1_1point__type.html">point_type</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1topological__dimens
ion.html">topological_dimension</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td></tr><tr><td><a class="el" href="structggl_1_1dimension.html">dimension</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1point__type.html">point_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1translate__transformer.html">translate_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="classcore__dispatch_1_1dimension.html">core_dispatch::dimension</a> </td><td><a class="el" href="classggl_1_1point__xy.html">point_xy</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1translate__transformer_3_01_p1_00_01_p2_00_012_00_012_01_4.html">translat
e_transformer< P1, P2, 2, 2 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1dimension_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_01_4.html">dimension< ggl::detail::intersection::intersection_point< P > ></a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="structggl_1_1concept_1_1_point_distance_strategy.html">PointDistanceStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1translate__transformer_3_01_p1_00_01_p2_00_013_00_013_01_4.html">translate_transformer< P1, P2, 3, 3 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1policies_1_1relat
e_1_1direction__type.html">direction_type</a> (<a class="el" href="namespaceggl_1_1policies_1_1relate.html">ggl::policies::relate</a>) </td><td><a class="el" href="class_point_list.html">PointList</a> </td><td><a name="letter_U"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> U </div></td></tr></table>
+</td></tr><tr><td><a class="el" href="structggl_1_1distance__result.html">distance_result</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1concept_1_1_point_segment_distance_strategy.html">PointSegmentDistanceStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1transform_1_1ublas__transformer.html">ublas_transformer</a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1simplify_1_1douglas__peucker.html">douglas_peucker</a> (<a class="el" href="namespaceggl_1_1strategy_1_1simplify.html">ggl::strategy::simplify</a>) </td><td><a class="el" href="structggl_1_1cs_1_1polar.html">polar</a> (<a class="el" href="namespaceggl_1_1cs.html">ggl::cs</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1
transform_1_1ublas__transformer_3_01_p1_00_01_p2_00_012_00_012_01_4.html">ublas_transformer< P1, P2, 2, 2 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> E </div></td></tr></table>
+</td><td><a class="el" href="classggl_1_1polygon.html">polygon</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1transform_1_1ublas__transformer_3_01_p1_00_01_p2_00_013_00_012_01_4.html">ublas_transformer< P1, P2, 3, 2 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><tr><td><a class="el" href="structggl_1_1equal__to.html">equal_to</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_polygon.html">Polygon</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td><td><a class="el" href="classggl_1_1strategy_1_1transform_1_1ublas__transformer_3_01_p1_00_01_p2_00_013_00_013_01_4.html">ublas_transformer< P1, P2, 3, 3 ></a> (<a class="el" href="namespaceggl_1_1strategy_1_1transform.html">ggl::strategy::transform</a>) </td></tr><
tr><td><a class="el" href="structggl_1_1ever__circling__iterator.html">ever_circling_iterator</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1polygon__tag.html">polygon_tag</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1traits_1_1use__std.html">use_std</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td></tr><tr><td><a class="el" href="structggl_1_1exception.html">exception</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1distance_1_1pythagoras.html">pythagoras</a> (<a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a>) </td><td><a name="letter_W"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> W </div></td></tr></table>
+</td></tr><tr><td><a class="el" href="structggl_1_1strategy_1_1area_1_1huiller_1_1excess__sum.html">huiller::excess_sum</a> (<a class="el" href="namespaceggl_1_1strategy_1_1area.html">ggl::strategy::area</a>) </td><td><a name="letter_R"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> R </div></td></tr></table>
+</td><td><a class="el" href="classggl_1_1strategy_1_1within_1_1winding.html">winding</a> (<a class="el" href="namespaceggl_1_1strategy_1_1within.html">ggl::strategy::within</a>) </td></tr><tr><td><a class="el" href="structggl_1_1traits_1_1exterior__ring.html">exterior_ring</a> (<a class="el" href="namespaceggl_1_1traits.html">ggl::traits</a>) </td><td><a class="el" href="classggl_1_1radian.html">radian</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="classggl_1_1concept_1_1_within_strategy.html">WithinStrategy</a> (<a class="el" href="namespaceggl_1_1concept.html">ggl::concept</a>) </td></tr><tr><td><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> F </div></td></tr></table>
+</td><td><a class="el" href="structggl_1_1range__iterator__const__if__c.html">range_iterator_const_if_c</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a name="letter_X"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> X </div></td></tr></table>
+</td></tr><tr><td><a class="el" href="classggl_1_1strategy_1_1within_1_1franklin.html">franklin</a> (<a class="el" href="namespaceggl_1_1strategy_1_1within.html">ggl::strategy::within</a>) </td><td><a class="el" href="structggl_1_1range__type.html">range_type</a> (<a class="el" href="namespaceggl.html">ggl</a>) </td><td><a class="el" href="structggl_1_1strategy_1_1distance_1_1xy__point__segment.html">xy_point_segment</a> (<a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a>) </td></tr></table><p><div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_B">B</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_H">H</a>&
nbsp;| <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_P">P</a> | <a class="qindex" href="#letter_R">R</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_U">U</a> | <a class="qindex" href="#letter_W">W</a> | <a class="qindex" href="#letter_X">X</a></div><p>
</div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compare__circular_8hpp.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compare__circular_8hpp.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compare__circular_8hpp.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -49,12 +49,6 @@
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html">ggl::strategy::compare::circular_comparator< CoordinateType, Units, Compare ></a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Compare (in one direction) <a class="el" href="namespaceggl_1_1strategy.html">strategy</a> for spherical coordinates. More...<br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">ggl::strategy::compare::detail::shift< Units ></a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html">ggl::strategy::compare::detail::shift< degree ></a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html">ggl::strategy::compare::detail::shift< radian ></a></td></tr>
-
<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceggl.html">ggl</a></td></tr>
@@ -62,8 +56,6 @@
<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceggl_1_1strategy_1_1compare.html">ggl::strategy::compare</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceggl_1_1strategy_1_1compare_1_1detail.html">ggl::strategy::compare::detail</a></td></tr>
-
</table>
</div>
<hr size="1">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compare__circular_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compare__circular_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compare__circular_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -63,130 +63,132 @@
<a name="l00022"></a>00022 <span class="keyword">namespace </span>strategy { <span class="keyword">namespace </span>compare {
<a name="l00023"></a>00023
<a name="l00024"></a>00024
-<a name="l00025"></a><a class="code" href="namespaceggl_1_1strategy_1_1compare_1_1detail.html">00025</a> <span class="keyword">namespace </span>detail {
-<a name="l00026"></a>00026
+<a name="l00025"></a>00025 <span class="preprocessor">#ifndef DOXYGEN_NO_DETAIL</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="keyword">namespace </span>detail {
<a name="l00027"></a>00027
-<a name="l00028"></a>00028 <span class="keyword">template</span> <<span class="keyword">typename</span> Units>
-<a name="l00029"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">00029</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">shift</a>
-<a name="l00030"></a>00030 {
-<a name="l00031"></a>00031 };
-<a name="l00032"></a>00032
+<a name="l00028"></a>00028
+<a name="l00029"></a>00029 <span class="keyword">template</span> <<span class="keyword">typename</span> Units>
+<a name="l00030"></a>00030 <span class="keyword">struct </span>shift
+<a name="l00031"></a>00031 {
+<a name="l00032"></a>00032 };
<a name="l00033"></a>00033
-<a name="l00034"></a>00034 <span class="keyword">template</span> <>
-<a name="l00035"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html">00035</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">shift</a><<a class="code" href="classggl_1_1degree.html" title="Unit of plane angle: Degrees.">degree</a>>
-<a name="l00036"></a>00036 {
-<a name="l00037"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html#89aaf17e4a37d3caaae92ea50c206650">00037</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html#89aaf17e4a37d3caaae92ea50c206650">full</a>() { <span class="keywordflow">return</span> 360.0; }
-<a name="l00038"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html#7d730334d5abee1c79b70d55218254fe">00038</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html#7d730334d5abee1c79b70d55218254fe">half</a>() { <span class="keywordflow">return</span> 180.0; }
-<a name="l00039"></a>00039 };
-<a name="l00040"></a>00040
-<a name="l00041"></a>00041 <span class="keyword">template</span> <>
-<a name="l00042"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html">00042</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">shift</a><<a class="code" href="classggl_1_1radian.html" title="Unit of plane angle: Radians.">radian</a>>
-<a name="l00043"></a>00043 {
-<a name="l00044"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html#cff2d5794ce8da0b82dcbde9b31bc9d6">00044</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html#cff2d5794ce8da0b82dcbde9b31bc9d6">full</a>() { <span class="keywordflow">return</span> <a class="code" href="namespaceggl_1_1math.html#48e76b75db9d3d5685245cfbfd1c821e">ggl::math::two_pi</a>; }
-<a name="l00045"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html#a9c874a9c8e2e05246b2e2ca53335fea">00045</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html#a9c874a9c8e2e05246b2e2ca53335fea">half</a>() { <span class="keywordflow">return</span> <a class="code" href="namespaceggl_1_1math.html#54fc384779fa97a61e07149d880a599c">ggl::math::pi</a>; }
-<a name="l00046"></a>00046 };
-<a name="l00047"></a>00047
-<a name="l00048"></a>00048 } <span class="comment">// namespace detail</span>
-<a name="l00049"></a>00049
-<a name="l00056"></a>00056 <span class="keyword">template</span> <<span class="keyword">typename</span> CoordinateType, <span class="keyword">typename</span> Units, <span class="keyword">typename</span> Compare>
-<a name="l00057"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html">00057</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html" title="Compare (in one direction) strategy for spherical coordinates.">circular_comparator</a>
-<a name="l00058"></a>00058 {
-<a name="l00059"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">00059</a> <span class="keyword">static</span> <span class="keyword">inline</span> CoordinateType <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(CoordinateType <span class="keyword">const</span>& c,
-<a name="l00060"></a>00060 <span class="keywordtype">double</span> min_border, <span class="keywordtype">double</span> max_border)
-<a name="l00061"></a>00061 {
-<a name="l00062"></a>00062 CoordinateType value = c;
-<a name="l00063"></a>00063 <span class="keywordflow">while</span> (value < min_border)
-<a name="l00064"></a>00064 {
-<a name="l00065"></a>00065 value += <a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">detail::shift<Units>::full</a>();
-<a name="l00066"></a>00066 }
-<a name="l00067"></a>00067 <span class="keywordflow">while</span> (value > max_border)
-<a name="l00068"></a>00068 {
-<a name="l00069"></a>00069 value -= <a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">detail::shift<Units>::full</a>();
-<a name="l00070"></a>00070 }
-<a name="l00071"></a>00071 <span class="keywordflow">return</span> value;
-<a name="l00072"></a>00072 }
-<a name="l00073"></a>00073
-<a name="l00074"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#5b8088b02c2bdcd2b49e0e95668cc65f">00074</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#5b8088b02c2bdcd2b49e0e95668cc65f">operator()</a>(CoordinateType <span class="keyword">const</span>& c1, CoordinateType <span class="keyword">const</span>& c2)<span class="keyword"> const</span>
-<a name="l00075"></a>00075 <span class="keyword"> </span>{
-<a name="l00076"></a>00076 Compare compare;
-<a name="l00077"></a>00077
-<a name="l00078"></a>00078 <span class="comment">// Check situation that one of them is e.g. std::numeric_limits.</span>
-<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> full = <a class="code" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">detail::shift<Units>::full</a>();
-<a name="l00080"></a>00080 <span class="keywordtype">double</span> mx = 10.0 * full;
-<a name="l00081"></a>00081 <span class="keywordflow">if</span> (c1 < -mx || c1 > mx || c2 < -mx || c2 > mx)
-<a name="l00082"></a>00082 {
-<a name="l00083"></a>00083 <span class="comment">// do normal comparison, using circular is not useful</span>
-<a name="l00084"></a>00084 <span class="keywordflow">return</span> compare(c1, c2);
-<a name="l00085"></a>00085 }
-<a name="l00086"></a>00086
-<a name="l00087"></a>00087 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> half = full / 2.0;
-<a name="l00088"></a>00088 CoordinateType v1 = <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(c1, -half, half);
-<a name="l00089"></a>00089 CoordinateType v2 = <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(c2, -half, half);
-<a name="l00090"></a>00090
-<a name="l00091"></a>00091 <span class="comment">// Two coordinates on a circle are</span>
-<a name="l00092"></a>00092 <span class="comment">// at max <= half a circle away from each other.</span>
-<a name="l00093"></a>00093 <span class="comment">// So if it is more, shift origin.</span>
-<a name="l00094"></a>00094 CoordinateType diff = std::abs(v1 - v2);
-<a name="l00095"></a>00095 <span class="keywordflow">if</span> (diff > half)
-<a name="l00096"></a>00096 {
-<a name="l00097"></a>00097 v1 = <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(v1, 0, full);
-<a name="l00098"></a>00098 v2 = <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(v2, 0, full);
-<a name="l00099"></a>00099 }
-<a name="l00100"></a>00100
-<a name="l00101"></a>00101 <span class="keywordflow">return</span> compare(v1, v2);
-<a name="l00102"></a>00102 }
-<a name="l00103"></a>00103 };
-<a name="l00104"></a>00104
-<a name="l00105"></a>00105
-<a name="l00106"></a>00106 }} <span class="comment">// namespace strategy::compare</span>
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="keyword">template</span> <>
+<a name="l00036"></a>00036 <span class="keyword">struct </span>shift<degree>
+<a name="l00037"></a>00037 {
+<a name="l00038"></a>00038 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> full() { <span class="keywordflow">return</span> 360.0; }
+<a name="l00039"></a>00039 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> half() { <span class="keywordflow">return</span> 180.0; }
+<a name="l00040"></a>00040 };
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="keyword">template</span> <>
+<a name="l00043"></a>00043 <span class="keyword">struct </span>shift<radian>
+<a name="l00044"></a>00044 {
+<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> full() { <span class="keywordflow">return</span> <a class="code" href="namespaceggl_1_1math.html#48e76b75db9d3d5685245cfbfd1c821e">ggl::math::two_pi</a>; }
+<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> half() { <span class="keywordflow">return</span> <a class="code" href="namespaceggl_1_1math.html#54fc384779fa97a61e07149d880a599c">ggl::math::pi</a>; }
+<a name="l00047"></a>00047 };
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 } <span class="comment">// namespace detail</span>
+<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>
+<a name="l00058"></a>00058 <span class="keyword">template</span> <<span class="keyword">typename</span> CoordinateType, <span class="keyword">typename</span> Units, <span class="keyword">typename</span> Compare>
+<a name="l00059"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html">00059</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html" title="Compare (in one direction) strategy for spherical coordinates.">circular_comparator</a>
+<a name="l00060"></a>00060 {
+<a name="l00061"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">00061</a> <span class="keyword">static</span> <span class="keyword">inline</span> CoordinateType <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(CoordinateType <span class="keyword">const</span>& c,
+<a name="l00062"></a>00062 <span class="keywordtype">double</span> min_border, <span class="keywordtype">double</span> max_border)
+<a name="l00063"></a>00063 {
+<a name="l00064"></a>00064 CoordinateType value = c;
+<a name="l00065"></a>00065 <span class="keywordflow">while</span> (value < min_border)
+<a name="l00066"></a>00066 {
+<a name="l00067"></a>00067 value += detail::shift<Units>::full();
+<a name="l00068"></a>00068 }
+<a name="l00069"></a>00069 <span class="keywordflow">while</span> (value > max_border)
+<a name="l00070"></a>00070 {
+<a name="l00071"></a>00071 value -= detail::shift<Units>::full();
+<a name="l00072"></a>00072 }
+<a name="l00073"></a>00073 <span class="keywordflow">return</span> value;
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075
+<a name="l00076"></a><a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#5b8088b02c2bdcd2b49e0e95668cc65f">00076</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#5b8088b02c2bdcd2b49e0e95668cc65f">operator()</a>(CoordinateType <span class="keyword">const</span>& c1, CoordinateType <span class="keyword">const</span>& c2)<span class="keyword"> const</span>
+<a name="l00077"></a>00077 <span class="keyword"> </span>{
+<a name="l00078"></a>00078 Compare compare;
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 <span class="comment">// Check situation that one of them is e.g. std::numeric_limits.</span>
+<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> full = detail::shift<Units>::full();
+<a name="l00082"></a>00082 <span class="keywordtype">double</span> mx = 10.0 * full;
+<a name="l00083"></a>00083 <span class="keywordflow">if</span> (c1 < -mx || c1 > mx || c2 < -mx || c2 > mx)
+<a name="l00084"></a>00084 {
+<a name="l00085"></a>00085 <span class="comment">// do normal comparison, using circular is not useful</span>
+<a name="l00086"></a>00086 <span class="keywordflow">return</span> compare(c1, c2);
+<a name="l00087"></a>00087 }
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> half = full / 2.0;
+<a name="l00090"></a>00090 CoordinateType v1 = <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(c1, -half, half);
+<a name="l00091"></a>00091 CoordinateType v2 = <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(c2, -half, half);
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093 <span class="comment">// Two coordinates on a circle are</span>
+<a name="l00094"></a>00094 <span class="comment">// at max <= half a circle away from each other.</span>
+<a name="l00095"></a>00095 <span class="comment">// So if it is more, shift origin.</span>
+<a name="l00096"></a>00096 CoordinateType diff = std::abs(v1 - v2);
+<a name="l00097"></a>00097 <span class="keywordflow">if</span> (diff > half)
+<a name="l00098"></a>00098 {
+<a name="l00099"></a>00099 v1 = <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(v1, 0, full);
+<a name="l00100"></a>00100 v2 = <a class="code" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html#8c4e91fde0a7ef149e5905d19b0fb56c">put_in_range</a>(v2, 0, full);
+<a name="l00101"></a>00101 }
+<a name="l00102"></a>00102
+<a name="l00103"></a>00103 <span class="keywordflow">return</span> compare(v1, v2);
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105 };
+<a name="l00106"></a>00106
<a name="l00107"></a>00107
-<a name="l00108"></a>00108
-<a name="l00109"></a>00109 <span class="preprocessor">#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span>
-<a name="l00111"></a>00111 <span class="comment">// Specialize for the longitude (dim 0)</span>
-<a name="l00112"></a>00112 <span class="keyword">template</span>
-<a name="l00113"></a>00113 <
-<a name="l00114"></a>00114 <span class="keyword">typename</span> Point,
-<a name="l00115"></a>00115 <span class="keyword">template</span><<span class="keyword">typename</span>> <span class="keyword">class </span>CoordinateSystem,
-<a name="l00116"></a>00116 <span class="keyword">typename</span> Units
-<a name="l00117"></a>00117 >
-<a name="l00118"></a>00118 <span class="keyword">struct </span>strategy_compare<spherical_tag, 1, Point, CoordinateSystem<Units>, 0>
-<a name="l00119"></a>00119 {
-<a name="l00120"></a>00120 <span class="keyword">typedef</span> <span class="keyword">typename</span> coordinate_type<Point>::type coordinate_type;
-<a name="l00121"></a>00121 <span class="keyword">typedef</span> strategy::compare::circular_comparator
-<a name="l00122"></a>00122 <
-<a name="l00123"></a>00123 coordinate_type,
-<a name="l00124"></a>00124 Units,
-<a name="l00125"></a>00125 std::less<coordinate_type>
-<a name="l00126"></a>00126 > <a class="code" href="structggl_1_1strategy__compare.html#b894dd4bfbeed15d0ded5e09a6cab35d">type</a>;
-<a name="l00127"></a>00127 };
-<a name="l00128"></a>00128
-<a name="l00129"></a>00129 <span class="keyword">template</span>
-<a name="l00130"></a>00130 <
-<a name="l00131"></a>00131 <span class="keyword">typename</span> Point,
-<a name="l00132"></a>00132 <span class="keyword">template</span><<span class="keyword">typename</span>> <span class="keyword">class </span>CoordinateSystem,
-<a name="l00133"></a>00133 <span class="keyword">typename</span> Units
-<a name="l00134"></a>00134 >
-<a name="l00135"></a>00135 <span class="keyword">struct </span>strategy_compare<spherical_tag, -1, Point, CoordinateSystem<Units>, 0>
-<a name="l00136"></a>00136 {
-<a name="l00137"></a>00137 <span class="keyword">typedef</span> <span class="keyword">typename</span> coordinate_type<Point>::type coordinate_type;
-<a name="l00138"></a>00138 <span class="keyword">typedef</span> strategy::compare::circular_comparator
-<a name="l00139"></a>00139 <
-<a name="l00140"></a>00140 coordinate_type,
-<a name="l00141"></a>00141 Units,
-<a name="l00142"></a>00142 std::greater<coordinate_type>
-<a name="l00143"></a>00143 > <a class="code" href="structggl_1_1strategy__compare.html#b894dd4bfbeed15d0ded5e09a6cab35d">type</a>;
-<a name="l00144"></a>00144 };
-<a name="l00145"></a>00145
-<a name="l00146"></a>00146
+<a name="l00108"></a>00108 }} <span class="comment">// namespace strategy::compare</span>
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110
+<a name="l00111"></a>00111 <span class="preprocessor">#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span>
+<a name="l00113"></a>00113 <span class="comment">// Specialize for the longitude (dim 0)</span>
+<a name="l00114"></a>00114 <span class="keyword">template</span>
+<a name="l00115"></a>00115 <
+<a name="l00116"></a>00116 <span class="keyword">typename</span> Point,
+<a name="l00117"></a>00117 <span class="keyword">template</span><<span class="keyword">typename</span>> <span class="keyword">class </span>CoordinateSystem,
+<a name="l00118"></a>00118 <span class="keyword">typename</span> Units
+<a name="l00119"></a>00119 >
+<a name="l00120"></a>00120 <span class="keyword">struct </span>strategy_compare<spherical_tag, 1, Point, CoordinateSystem<Units>, 0>
+<a name="l00121"></a>00121 {
+<a name="l00122"></a>00122 <span class="keyword">typedef</span> <span class="keyword">typename</span> coordinate_type<Point>::type coordinate_type;
+<a name="l00123"></a>00123 <span class="keyword">typedef</span> strategy::compare::circular_comparator
+<a name="l00124"></a>00124 <
+<a name="l00125"></a>00125 coordinate_type,
+<a name="l00126"></a>00126 Units,
+<a name="l00127"></a>00127 std::less<coordinate_type>
+<a name="l00128"></a>00128 > <a class="code" href="structggl_1_1strategy__compare.html#b894dd4bfbeed15d0ded5e09a6cab35d">type</a>;
+<a name="l00129"></a>00129 };
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keyword">template</span>
+<a name="l00132"></a>00132 <
+<a name="l00133"></a>00133 <span class="keyword">typename</span> Point,
+<a name="l00134"></a>00134 <span class="keyword">template</span><<span class="keyword">typename</span>> <span class="keyword">class </span>CoordinateSystem,
+<a name="l00135"></a>00135 <span class="keyword">typename</span> Units
+<a name="l00136"></a>00136 >
+<a name="l00137"></a>00137 <span class="keyword">struct </span>strategy_compare<spherical_tag, -1, Point, CoordinateSystem<Units>, 0>
+<a name="l00138"></a>00138 {
+<a name="l00139"></a>00139 <span class="keyword">typedef</span> <span class="keyword">typename</span> coordinate_type<Point>::type coordinate_type;
+<a name="l00140"></a>00140 <span class="keyword">typedef</span> strategy::compare::circular_comparator
+<a name="l00141"></a>00141 <
+<a name="l00142"></a>00142 coordinate_type,
+<a name="l00143"></a>00143 Units,
+<a name="l00144"></a>00144 std::greater<coordinate_type>
+<a name="l00145"></a>00145 > <a class="code" href="structggl_1_1strategy__compare.html#b894dd4bfbeed15d0ded5e09a6cab35d">type</a>;
+<a name="l00146"></a>00146 };
<a name="l00147"></a>00147
-<a name="l00148"></a>00148 <span class="preprocessor">#endif</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span>
-<a name="l00150"></a>00150
-<a name="l00151"></a>00151 } <span class="comment">// namespace ggl</span>
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149
+<a name="l00150"></a>00150 <span class="preprocessor">#endif</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>
<a name="l00152"></a>00152
-<a name="l00153"></a>00153
-<a name="l00154"></a>00154 <span class="preprocessor">#endif // GGL_STRATEGIES_SPHERICAL_COMPARE_SPHERICAL_HPP</span>
+<a name="l00153"></a>00153 } <span class="comment">// namespace ggl</span>
+<a name="l00154"></a>00154
+<a name="l00155"></a>00155
+<a name="l00156"></a>00156 <span class="preprocessor">#endif // GGL_STRATEGIES_SPHERICAL_COMPARE_SPHERICAL_HPP</span>
</pre></div></div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compiling.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compiling.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/compiling.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -38,7 +38,7 @@
<h1><a class="anchor" name="compiling">Compiling </a></h1><h2><a class="anchor" name="compiling_intro">
Compiling the Generic Geometry Library</a></h2>
The Generic Geometry Library is a Header Only library. So just including the headerfiles is enough to use the algorithms. Nothing has to be linked.<p>
-The Generic Geometry Library is only dependant on (header only) Boost libraries. Download the Boost Library Collection from www.boost.org, adapt include path to include Boost.<h2><a class="anchor" name="platforms">
+The Generic Geometry Library is only dependant on (header only) Boost libraries. Download the Boost Library Collection from www.boost.org, adapt the include path to include Boost.<h2><a class="anchor" name="platforms">
Platforms</a></h2>
The library currently compiles successfully on the following platforms:<ul>
<li>MS Visual Studio 2008 (Express Edition)</li><li>MS Visual Studio 2005 (Express Edition)</li><li>gcc version 3.4</li><li>gcc version 4 (tested are 4.1, 4.2, 4.4)</li></ul>
@@ -47,7 +47,7 @@
The test and example folders contain also Jam-files for bjam / boost-build<p>
For gcc, the flag -Wno-long-long can be used (surpressing warnings originating from Boost)<h2><a class="anchor" name="convenient_includes">
Convenient includes</a></h2>
-This section concentrates on how to include the Generic Geometry Library.<p>
+This section concentrates on how to include GGL.<p>
The most convenient headerfile including all algorithms and strategies is ggl.hpp:<ul>
<li>#include <ggl/ggl.hpp> It is recommended to include this file. Alternatively, it is possible to include GGL headerfiles separately. However, this is inconvenient as files might be renamed or moved occasionaly.</li></ul>
<p>
@@ -56,6 +56,9 @@
<p>
For users using only Cartesian points, with floating point coordinates (double), in 2D or 3D, you can use instead:<ul>
<li>#include <<a class="el" href="cartesian2d_8hpp.html">ggl/geometries/cartesian2d.hpp</a>> This includes all 2D Cartesian geometries: point_2d, linestring_2d, etc. Using this headerfile the library seems to be a non-template library, so it is convenient for users that are not so into the template world.</li></ul>
+<p>
+For users using multi-geometries:<ul>
+<li>#include <ggl/multi/multi.hpp></li></ul>
<h2><a class="anchor" name="advanced_includes">
Advanced includes</a></h2>
This section is for users who have their own geometries and want to use algorithms from the Generic Geometry Library.<p>
@@ -67,10 +70,21 @@
<p>
If you are using boost tuples and want to handle them as Cartesian points<ul>
<li>#include <<a class="el" href="tuple__cartesian_8hpp.html">ggl/geometries/adapted/tuple_cartesian.hpp</a>></li></ul>
+<h2><a class="anchor" name="extension_includes">
+Extensions</a></h2>
+The GGL is currently (since 0.5) split into the kernel and several extensions. As this split is relatively new, there are not yet umbrella-include files, but most things below will do:<p>
+If you want to use the <b>geographic</b> coordinate system:<ul>
+<li>the tag is already included in the kernel</li><li>#include <ggl/extensions/gis/geographic/strategies/andoyer.hpp> for Andoyer distance calculations</li><li>#include <ggl/extensions/gis/geographic/strategies/vincenty.hpp> for Vincenty distance calculations</li></ul>
+<p>
+If you want to use the <b>projections:</b> <ul>
+<li>#include <ggl/extensions/gis/projections/parameters.hpp></li><li>#include <ggl/extensions/gis/projections/projection.hpp></li><li>#include <ggl/extensions/gis/projections/factory.hpp></li></ul>
+<p>
+If you want to use the <b>circle</b> (n-sphere)<ul>
+<li>#include <ggl/extensions/nsphere/...> <em>Several headerfiles, there is not yet a common include</em></li></ul>
<h2><a class="anchor" name="performance">
Performance</a></h2>
The enumeration below is not exhaustive but can contain hints to improve the performance<ul>
-<li>For Microsoft, set the define _SECURE_SCL=0</li><li>For Microsoft, set the define _HAS_ITERATOR_DEBUGGING=0</li><li>measurements indicate that MSVC 2005 generates faster code than MSVC 2008</li><li>Using StlPort results in significant faster code than Microsoft's standard library</li><li>Of course turn on compiler optimizations, compile in release mode</li></ul>
+<li>For Microsoft, set the define _SECURE_SCL=0</li><li>For Microsoft, set the define _HAS_ITERATOR_DEBUGGING=0</li><li>our measurements indicate that MSVC 2005 generates faster code than MSVC 2008</li><li>Using StlPort results in significant faster code than Microsoft's standard library</li><li>Of course turn on compiler optimizations, compile in release mode</li></ul>
<h2><a class="anchor" name="intellisense">
Intellisense issues</a></h2>
Microsoft Visual Studio (Express) 2005 and 2008 can hang typing in a bracket or angle bracket. This is not directly related to GGL, but caused by heavy templated libraries such as Boost and GGL. If this is inconvenient, intellisense can easily be turned off:<p>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/design.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/design.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/design.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -43,19 +43,18 @@
<span class="keywordtype">double</span> x, y;
};
</pre></div><p>
-And a function, containing the algorithm: <div class="fragment"><pre class="fragment"><span class="keywordtype">double</span> <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(mypoint <span class="keyword">const</span>& a,
- mypoint <span class="keyword">const</span>& b)
+And a function, containing the algorithm: <div class="fragment"><pre class="fragment"><span class="keywordtype">double</span> <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(mypoint <span class="keyword">const</span>& a, mypoint <span class="keyword">const</span>& b)
{
<span class="keywordtype">double</span> dx = a.x - b.x;
<span class="keywordtype">double</span> dy = a.y - b.y;
<span class="keywordflow">return</span> sqrt(dx * dx + dy * dy);
}
</pre></div><p>
-Quite simple, and it is usable, but not generic. For a library it has to be designed way further. The design above can only be used for 2D points, for the struct point (and no other struct), in a Cartesian coordinate system. A generic library should be able to calculate the distance:<ul>
-<li>for any point class or struct, not on just this mypoint type</li><li>in more than two dimensions</li><li>for other coordinate systems, e.g. over the earth or over a sphere</li><li>between a point and a line or between other geometry combinations</li><li>in higher precision than double</li><li>avoiding the square root: often we dont want to do that because it is a relatively expensive function, and for comparing distances it is not necessary. In this page we will make the design step by step more generic.</li></ul>
+Quite simple, and it is usable, but not generic. For a library it has to be designed way further. The design above can only be used for 2D points, for the struct <b>mypoint</b> (and no other struct), in a Cartesian coordinate system. A generic library should be able to calculate the distance:<ul>
+<li>for any point class or struct, not on just this <b>mypoint</b> type</li><li>in more than two dimensions</li><li>for other coordinate systems, e.g. over the earth or on a sphere</li><li>between a point and a line or between other geometry combinations</li><li>in higher precision than double</li><li>avoiding the square root: often we dont want to do that because it is a relatively expensive function, and for comparing distances it is not necessary. In this page we will make the design step by step more generic.</li></ul>
<h2><a class="anchor" name="par2">
Using templates</a></h2>
-The distance function can be changed into a template function. This is trivial and allows calculating the distance between other point types than just mypoint. We add two template parameters, allowing input of two different point types.<p>
+The distance function can be changed into a template function. This is trivial and allows calculating the distance between other point types than just <b>mypoint</b>. We add two template parameters, allowing input of two different point types.<p>
<div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2>
<span class="keywordtype">double</span> <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(P1 <span class="keyword">const</span>& a, P2 <span class="keyword">const</span>& b)
{
@@ -80,7 +79,7 @@
<span class="keyword">struct </span>access {};
}
</pre></div><p>
-which is then specialized for our mypoint type, implementing a static method called get: <div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>traits
+which is then specialized for our <b>mypoint</b> type, implementing a static method called get: <div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>traits
{
<span class="keyword">template</span> <>
<span class="keyword">struct </span>access<mypoint, 0>
@@ -94,7 +93,8 @@
...
}
</pre></div><p>
-Calling traits::access<point, 0>::get(a) now returns us our x-coordinate. Nice? It is too verbose for a function like this, used so often in the library. We can shorten the syntax by adding an extra function: template <int D, typename P> <div class="fragment"><pre class="fragment"><span class="keyword">inline</span> <span class="keywordtype">double</span> <span class="keyword">get</span>(P <span class="keyword">const</span>& p)
+Calling traits::access<mypoint, 0>::get(a) now returns us our x-coordinate. Nice? It is too verbose for a function like this, used so often in the library. We can shorten the syntax by adding an extra <b>free</b> <b>function:</b> <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keywordtype">int</span> D, <span class="keyword">typename</span> P>
+<span class="keyword">inline</span> <span class="keywordtype">double</span> <span class="keyword">get</span>(P <span class="keyword">const</span>& p)
{
<span class="keywordflow">return</span> <a class="code" href="group__access.html#gce53c5555841f90ccf60767c26e20499" title="get coordinate value of a Point ( / Sphere)">traits::access<P, D>::get</a>(p);
}
@@ -113,24 +113,20 @@
</pre></div><p>
This alternative gives in the end the same functionality, either using an if-clause (slower), or adding another level of indirection.<h2><a class="anchor" name="par4">
Dimension agnosticism</a></h2>
-Now we can calculate the distance between points in 2D, points of any structure or class. However, we wanted to have 3D as well. So we have to make it dimension agnostic. This complicates our distance function. We can use a for-loop to walk through dimensions, but for loops have another performance than the addition which was there originally. However, we can make more usage of templates and make the distance algorithm as following, more complex but attractive for template fans: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2, <span class="keywordtype">int</span> D>
+Now we can calculate the distance between points in 2D, points of any structure or class. However, we wanted to have 3D as well. So we have to make it dimension agnostic. This complicates our distance function. We can use a for-loop to walk through dimensions, but for loops have another performance than the straightforward coordinate addition which was there originally. However, we can make more usage of templates and make the distance algorithm as following, more complex but attractive for template fans: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2, <span class="keywordtype">int</span> D>
<span class="keyword">struct </span>pythagoras
{
- <span class="keyword">static</span> <span class="keywordtype">double</span> apply(P1 <span class="keyword">const</span>& a,
- P2 <span class="keyword">const</span>& b)
+ <span class="keyword">static</span> <span class="keywordtype">double</span> apply(P1 <span class="keyword">const</span>& a, P2 <span class="keyword">const</span>& b)
{
<span class="keywordtype">double</span> d = <span class="keyword">get</span><D-1>(a) - get<D-1>(b);
- <span class="keywordflow">return</span> d * d + pythagoras
- <P1, P2, D-1>
- ::apply(a, b);
+ <span class="keywordflow">return</span> d * d + pythagoras<P1, P2, D-1>::apply(a, b);
}
};
<span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2 >
<span class="keyword">struct </span>pythagoras<P1, P2, 0>
{
- <span class="keyword">static</span> <span class="keywordtype">double</span> apply(P1 <span class="keyword">const</span>&,
- P2 <span class="keyword">const</span>&)
+ <span class="keyword">static</span> <span class="keywordtype">double</span> apply(P1 <span class="keyword">const</span>&, P2 <span class="keyword">const</span>&)
{
<span class="keywordflow">return</span> 0;
}
@@ -139,13 +135,9 @@
The distance function is calling that pythagoras struct, specifying the number of dimensions: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2>
<span class="keywordtype">double</span> <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(P1 <span class="keyword">const</span>& a, P2 <span class="keyword">const</span>& b)
{
- BOOST_STATIC_ASSERT((
- <a class="code" href="classcore__dispatch_1_1dimension.html">dimension<P1>::value</a>
- == <a class="code" href="classcore__dispatch_1_1dimension.html">dimension<P2>::value</a> ));
-
- <span class="keywordflow">return</span> sqrt(pythagoras
- <P1, P2, <a class="code" href="classcore__dispatch_1_1dimension.html">dimension<P1>::value</a>>
- :: apply(a, b));
+ BOOST_STATIC_ASSERT(( <a class="code" href="classcore__dispatch_1_1dimension.html">dimension<P1>::value</a> == <a class="code" href="classcore__dispatch_1_1dimension.html">dimension<P2>::value</a> ));
+
+ <span class="keywordflow">return</span> sqrt(pythagoras<P1, P2, <a class="code" href="classcore__dispatch_1_1dimension.html">dimension<P1>::value</a>>::apply(a, b));
}
</pre></div><p>
The dimension which is referred to is defined using another traits class: <div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>traits
@@ -154,7 +146,7 @@
<span class="keyword">struct </span><a class="code" href="classcore__dispatch_1_1dimension.html">dimension</a> {};
}
</pre></div><p>
-which has to be specialized again for the struct mypoint. Because it only has to publish a value, we conveniently derive it from the Boost Meta-Programming Library (MPL) class boost::mpl::int_: <div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>traits
+which has to be specialized again for the struct <b>mypoint</b>. Because it only has to publish a value, we conveniently derive it from the Boost Meta-Programming Library (MPL) class boost::mpl::int_: <div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>traits
{
<span class="keyword">template</span> <>
<span class="keyword">struct </span><a class="code" href="classcore__dispatch_1_1dimension.html">dimension</a><mypoint>
@@ -194,21 +186,16 @@
<span class="keyword">typename</span> coordinate_type<P2>::type
>::type computation_type;
- <span class="keyword">static</span> computation_type apply(
- P1 <span class="keyword">const</span>& a, P2 <span class="keyword">const</span>& b)
+ <span class="keyword">static</span> computation_type apply(P1 <span class="keyword">const</span>& a, P2 <span class="keyword">const</span>& b)
{
- computation_type d
- = <span class="keyword">get</span><D-1>(a) - get<D-1>(b);
- <span class="keywordflow">return</span> d * d + pythagoras
- <P1, P2, D-1>
- ::apply(a, b);
+ computation_type d = <span class="keyword">get</span><D-1>(a) - get<D-1>(b);
+ <span class="keywordflow">return</span> d * d + pythagoras <P1, P2, D-1> ::apply(a, b);
}
};
</pre></div><h2><a class="anchor" name="par6">
Different geometries</a></h2>
-Weve designed a dimension agnostic system supporting any point-type of any coordinate type. There are still some tweaks but they will be worked out later. Now we will see how we calculate the distance between a point and a polygon, or between a point and a line-segment. These formulae are more complex, and the influence on design is even larger. We dont want to add a function with another name: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P, <span class="keyword">typename</span> S>
-<span class="keywordtype">double</span> distance_point_segment(P <span class="keyword">const</span>& p,
- S <span class="keyword">const</span>& s)
+Weve designed a dimension agnostic system supporting any point type of any coordinate type. There are still some tweaks but they will be worked out later. Now we will see how we calculate the distance between a point and a polygon, or between a point and a line-segment. These formulae are more complex, and the influence on design is even larger. We dont want to add a function with another name: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P, <span class="keyword">typename</span> S>
+<span class="keywordtype">double</span> distance_point_segment(P <span class="keyword">const</span>& p, S <span class="keyword">const</span>& s)
</pre></div><p>
We want to be generic, the distance function has to be called from code not knowing the type of geometry it handles, so it has to be named distance. We also cannot create an overload because that would be ambiguous, having the same template signature. There are two solutions:<ul>
<li>tag dispatching</li><li>SFINAE</li></ul>
@@ -249,8 +236,7 @@
<span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2>
<span class="keyword">struct </span><a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a> < point_tag, point_tag, P1, P2 >
{
- <span class="keyword">static</span> <span class="keywordtype">double</span> apply(P1 <span class="keyword">const</span>& a,
- P2 <span class="keyword">const</span>& b)
+ <span class="keyword">static</span> <span class="keywordtype">double</span> apply(P1 <span class="keyword">const</span>& a, P2 <span class="keyword">const</span>& b)
{
<span class="comment">// here we call pythagoras</span>
<span class="comment">// exactly like we did before</span>
@@ -264,8 +250,7 @@
point_tag, segment_tag, P, S
>
{
- <span class="keyword">static</span> <span class="keywordtype">double</span> apply(P <span class="keyword">const</span>& p,
- S <span class="keyword">const</span>& s)
+ <span class="keyword">static</span> <span class="keywordtype">double</span> apply(P <span class="keyword">const</span>& p, S <span class="keyword">const</span>& s)
{
<span class="comment">// here we refer to another function</span>
<span class="comment">// implementing point-segment</span>
@@ -290,18 +275,17 @@
std::cout << <span class="stringliteral">"color distance: "</span> << <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(red, orange) << std::endl;
</pre></div><h2><a class="anchor" name="par7">
Kernel revisited</a></h2>
-We described above that we had a traits class coordinate_type, defined in namespace traits, and defined a separate coordinate_type class as well. This was actually not really necessary before, because the only difference was namespace clause. But now that we have another geometry type, a segment in this case, it is essential. We can call the coordinate_type meta-function for any geometry type, point, segment, polygon, etc, implemented again by tag dispatching:<p>
+We described above that we had a traits class coordinate_type, defined in namespace traits, and defined a separate coordinate_type class as well. This was actually not really necessary before, because the only difference was the namespace clause. But now that we have another geometry type, a segment in this case, it is essential. We can call the coordinate_type meta-function for any geometry type, point, segment, polygon, etc, implemented again by tag dispatching:<p>
<div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> G>
<span class="keyword">struct </span>coordinate_type
{
- <span class="keyword">typedef</span> <span class="keyword">typename</span>
- dispatch::coordinate_type
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> dispatch::coordinate_type
<
<span class="keyword">typename</span> tag<G>::type, G
>::type type;
};
</pre></div><p>
-Inside the dispatch namespace this meta-function is implemented twice: a generic version and one specialization for points. The specialization for points calls the traits class. The generic version calls the point-specialization, as a sort of recursive meta-function definition:<p>
+Inside the dispatch namespace this meta-function is implemented twice: a generic version and one specialization for points. The specialization for points calls the traits class. The generic version calls the point specialization, as a sort of recursive meta-function definition:<p>
<div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>dispatch
{
@@ -331,7 +315,7 @@
The same applies for the meta-function dimension and for the upcoming meta-function coordinate system.<h2><a class="anchor" name="par8">
Coordinate system</a></h2>
Until here we assumed a Cartesian system. But we know that the Earth is not flat. Calculating a distance between two GPS-points with the system above would result in nonsense. So we again extend our design. We define for each point type a coordinate system type, using the traits system again. Then we make the calculation dependant on that coordinate system.<p>
-Coordinate system is similar to coordinate type, a meta-function, calling a dispatch function to have it for any geometry-type, forwarding to its point-specialization, and finally calling a traits class, defining a typedef type with a coordinate system. We dont show that all here again. We only show the definition of a few coordinate systems: <div class="fragment"><pre class="fragment"><span class="keyword">struct </span>cartesian {};
+Coordinate system is similar to coordinate type, a meta-function, calling a dispatch function to have it for any geometry-type, forwarding to its point specialization, and finally calling a traits class, defining a typedef type with a coordinate system. We dont show that all here again. We only show the definition of a few coordinate systems: <div class="fragment"><pre class="fragment"><span class="keyword">struct </span>cartesian {};
<span class="keyword">template</span><<span class="keyword">typename</span> DegreeOrRadian>
<span class="keyword">struct </span>geographic
@@ -339,8 +323,8 @@
<span class="keyword">typedef</span> DegreeOrRadian units;
};
</pre></div><p>
-So Cartesian is simple, for geographic we can also select if its coordinates stored in degrees or in radians.<p>
-The distance function now will change: it will select the computation method for the corresponding coordinate system and then call the dispatch struct for distance. We call the computation method specialized for coordinate systems a <b>strategy</b>. So the new version of the distance function is:<p>
+So Cartesian is simple, for geographic we can also select if its coordinates are stored in degrees or in radians.<p>
+The distance function will now change: it will select the computation method for the corresponding coordinate system and then call the dispatch struct for distance. We call the computation method specialized for coordinate systems a <b>strategy</b>. So the new version of the distance function is:<p>
<div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> G1, <span class="keyword">typename</span> G2>
<span class="keywordtype">double</span> <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(G1 <span class="keyword">const</span>& g1, G2 <span class="keyword">const</span>& g2)
{
@@ -375,7 +359,7 @@
};
</pre></div><p>
So here is our Pythagoras again, now defined as a strategy. The distance dispatch function just calls its apply method.<p>
-So this is an important step: for spherical or geographical coordinate systems, another strategy (computation method) can be implemented. For spherical coordinate systems we have the haversine formula. So it is specialized like this <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2,
+So this is an important step: for spherical or geographical coordinate systems, another strategy (computation method) can be implemented. For spherical coordinate systems we have the haversine formula. So the dispatching traits struct is specialized like this <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2,
<span class="keywordtype">int</span> D = 2>
<span class="keyword">struct </span>strategy_distance<spherical, spherical, P1, P2, D>
{
@@ -385,8 +369,8 @@
<span class="comment">// struct haversine with apply function</span>
<span class="comment">// is omitted here</span>
</pre></div><p>
-For geography, we have some alternatives for distance calculation. There is the Andoyer method[*], fast and precise, and there is the Vincenty method[*], slower and more precise, and there are some less precise approaches as well.<p>
-Per coordinate system, one strategy is defined as the default strategy. To be able to use any strategy, we modify our design again and add an overload for the distance algorithm, taking a strategy. That enables us to call distance with another strategy.<p>
+For geography, we have some alternatives for distance calculation. There is the Andoyer method, fast and precise, and there is the Vincenty method, slower and more precise, and there are some less precise approaches as well.<p>
+Per coordinate system, one strategy is defined as the default strategy. To be able to use another strategy as well, we modify our design again and add an overload for the distance algorithm, taking a strategy object as a third parameter.<p>
This new overload distance function also has the advantage that the strategy can be constructed outside the distance function. Because it was constructed inside above, it could not have construction parameters. But for Andoyer or Vincenty, or the haversine formula, it certainly makes sense to have a constructor taking the radius of the earth as a parameter. So the distance overloaded function is:<p>
<div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> G1, <span class="keyword">typename</span> G2, <span class="keyword">typename</span> S>
<span class="keywordtype">double</span> <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(G1 <span class="keyword">const</span>& g1, G2 <span class="keyword">const</span>& g2, S <span class="keyword">const</span>& strategy)
@@ -399,7 +383,7 @@
>::apply(g1, g2, strategy);
}
</pre></div><p>
-The strategy has to have a method apply taking two points as argument (for points). It is not required that it is a static method. A strategy might define a constructor, where a configuration value is passed and stored as a member variable. In those cases a static method would be inconvenient. It can be implemented as a normal method (with the const qualifier).<p>
+The strategy has to have a method <b>apply</b> taking two points as arguments (for points). It is not required that it is a static method. A strategy might define a constructor, where a configuration value is passed and stored as a member variable. In those cases a static method would be inconvenient. It can be implemented as a normal method (with the const qualifier).<p>
We do not list all implementations here, Vincenty would cover half a page of mathematics, but you will understand the idea. We can call distance like this: <div class="fragment"><pre class="fragment"><a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(c1, c2)
</pre></div><p>
where c1,c2 are Cartesian points, or like this:<p>
@@ -413,14 +397,13 @@
The five traits classes mentioned in the paragraphs above form together the Point Concept. Any point type for which specializations are implemented in the traits namespace should be handled correctly by the library. So the Point concept consists of:<ul>
<li>a specialization for traits::tag</li><li>a specialization for traits::coordinate_system</li><li>a specialization for traits::coordinate_type</li><li>a specialization for traits::dimension</li><li>a specialization for traits::access</li></ul>
<p>
-The last one is a class, containing a function, the first four are meta-functions. So we now have agnosticism for the number of dimensions, agnosticism for coordinate systems, our design can handle any coordinate type, and it can handle different geometry types. Furthermore we can specify our own strategies, the code will not compile in case of two points with different dimensions (because of the assertion), and it will not compile for two points with different coordinate systems (because there is no specialization). We still have the distance function returning double. Next paragraph will solve that.<h2><a class="anchor" name="par10">
+The last one is a class, containing the method <b>get</b> and the (optional) method <b>set</b>, the first four are meta-functions, either defining <b>type</b> or declaring <b>value</b> (conform MPL conventions). So we now have agnosticism for the number of dimensions, agnosticism for coordinate systems, our design can handle any coordinate type, and it can handle different geometry types. Furthermore we can specify our own strategies, the code will not compile in case of two points with different dimensions (because of the assertion), and it will not compile for two points with different coordinate systems (because there is no specialization). We still have the distance function returning double. Next paragraph will solve that.<h2><a class="anchor" name="par10">
Return type</a></h2>
-We promised that calling sqrt was not always necessary. So we define a distance result struct that contains the squared value and is convertible to a double value. This, however, only has to be done for Pythagoras. The spherical distance functions do not take the square root so for them it is not necessary to avoid the expensive square root call; they can just return their distance. So the distance result struct is dependant on strategy, therefore made a member type of the strategy, looking like this: <div class="fragment"><pre class="fragment"><span class="keyword">template</span><<span class="keyword">typename</span> T = <span class="keywordtype">double</span>>
+We promised that calling sqrt was not always necessary. So we define a distance result struct that contains the squared value and is convertible to a double value. This, however, only has to be done for Pythagoras. The spherical distance functions do not take the square root so for them it is not necessary to avoid the expensive square root call; they can just return their distance. So the distance result struct is dependant on strategy, therefore made a member type of the strategy. The result struct looks like this: <div class="fragment"><pre class="fragment"><span class="keyword">template</span><<span class="keyword">typename</span> T = <span class="keywordtype">double</span>>
<span class="keyword">struct </span>cartesian_distance
{
T sq;
- <span class="keyword">explicit</span> cartesian_distance(T <span class="keyword">const</span>& v)
- : sq (v) {}
+ <span class="keyword">explicit</span> cartesian_distance(T <span class="keyword">const</span>& v) : sq (v) {}
<span class="keyword">inline</span> operator T()<span class="keyword"> const</span>
<span class="keyword"> </span>{
@@ -428,8 +411,9 @@
}
};
</pre></div><p>
-It also has operators defined to compare itself to other results without taking the square root. Each strategy should define its return type, within the strategy class, e.g.:<p>
-<div class="fragment"><pre class="fragment"> <span class="keyword">typedef</span> cartesian_distance<T> return_type;
+It also has operators defined to compare itself to other results without taking the square root.<p>
+Each strategy should define its return type, within the strategy class, e.g.:<p>
+<div class="fragment"><pre class="fragment"> <span class="keyword">typedef</span> cartesian_distance<T> return_type;
</pre></div> or:<p>
<div class="fragment"><pre class="fragment"> <span class="keyword">typedef</span> <span class="keywordtype">double</span> return_type
</pre></div><p>
@@ -446,36 +430,37 @@
<
<span class="keyword">typename</span> cs_tag<P1>::type,
<span class="keyword">typename</span> cs_tag<P2>::type,
- P1, P2>::type S;
+ P1, P2
+ >::type S;
<span class="keyword">typedef</span> <span class="keyword">typename</span> S::return_type type;
};
</pre></div><p>
and modify our distance function: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> G1, <span class="keyword">typename</span> G2>
-<span class="keyword">inline</span> <span class="keyword">typename</span> distance_result
- <G1, G2>::type
- <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(G1 <span class="keyword">const</span>& G1, G2 <span class="keyword">const</span>& G2)
+<span class="keyword">inline</span> <span class="keyword">typename</span> distance_result<G1, G2>::type <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(G1 <span class="keyword">const</span>& G1, G2 <span class="keyword">const</span>& G2)
+{ ... }
</pre></div><p>
-Of course also the apply functions in the dispatch specializations will return a result like this, they have a strategy as a template parameter everywhere, making the less verbose version possible.<h2><a class="anchor" name="par11">
+Of course also the apply functions in the dispatch specializations will return a result like this. They have a strategy as a template parameter everywhere, making the less verbose version possible.<h2><a class="anchor" name="par11">
Reversibility</a></h2>
Our dispatch::distance class was specialized for <point_tag, segment_tag>. Library users can also call the distance function with a segment and a point, in that order. Actually, there are many geometry types (polygon, box, linestring), how to implement all those without duplicating all tag dispatching functions? The answer is that we automatically reverse the arguments, if appropriate. For distance it is appropriate because distance is a commutative function. We add a meta-function geometry_id, which has specializations for each geometry type, just derived from boost::mpl::int_, such that it can be ordered. Point is 1, segment is e.g. 2.<p>
Then we add a meta-function reverse_dispatch: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> G1, <span class="keyword">typename</span> G2>
-<span class="keyword">struct </span>reverse_dispatch : detail::reverse_dispatch
-<
- geometry_id<G1>::type::value,
- geometry_id<G2>::type::value
-> {};
+<span class="keyword">struct </span>reverse_dispatch : detail::reverse_dispatch
+ <
+ geometry_id<G1>::type::value,
+ geometry_id<G2>::type::value
+ >
+{};
</pre></div><p>
Because of the order in geometry_id, we can arrange (template) parameters in that order, in specializations. So the detail structure looks like: <div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>detail
{
<span class="keyword">template</span> <<span class="keywordtype">int</span> Id1, <span class="keywordtype">int</span> Id2>
- <span class="keyword">struct </span>reverse_dispatch
- : boost::mpl::if_c
+ <span class="keyword">struct </span>reverse_dispatch : boost::mpl::if_c
<
(Id1 > Id2),
boost::true_type,
boost::false_type
- > {};
+ >
+ {};
</pre></div><p>
And our distance function will be modified again with some template meta-programming: We get <div class="fragment"><pre class="fragment"><span class="keywordflow">return</span> boost::mpl::if_c
<
@@ -521,16 +506,17 @@
<span class="keyword">template</span> <>
<span class="keyword">struct </span>is_multi<multi_polygon_tag> : boost::true_type {};
-
-
-
} <span class="comment">// namespace dispatch</span>
</pre></div><p>
Now we can specialize on is_multi, so we add two boolean IsMulti's, one for each geometry type, to our distance dispatch struct and make the call to them in the distance function:<p>
-specialization:<p>
-<div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> GeometryTag1, <span class="keyword">typename</span> GeometryTag2,
- <span class="keyword">typename</span> G1, <span class="keyword">typename</span> G2, <span class="keyword">typename</span> Strategy>
-<span class="keyword">struct </span><a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a><GeometryTag1, GeometryTag2, G1, G2, strategy_tag_distance_point_point, Strategy, false, true>
+<div class="fragment"><pre class="fragment"><span class="comment">// specialization:</span>
+<span class="keyword">template</span> <<span class="keyword">typename</span> GeometryTag1, <span class="keyword">typename</span> GeometryTag2, <span class="keyword">typename</span> G1, <span class="keyword">typename</span> G2, <span class="keyword">typename</span> Strategy>
+<span class="keyword">struct </span><a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>
+ <
+ GeometryTag1, GeometryTag2, G1, G2, Strategy,
+ false, <span class="comment">// G1 is_multi</span>
+ true <span class="comment">// G2 is_multi</span>
+ >
: detail::<a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>::distance_single_to_multi<G1, G2, Strategy>
{};
</pre></div><p>
@@ -564,7 +550,7 @@
};
</pre></div><p>
which iterates over a collection of multi-shapes, and returns the shortest distance. Another function can implement the multi-to-multi function. Note that because of reversibility we don't have to implement the multi-to-single version (as long as multi's always have an higher ID than single's).<h2><a class="anchor" name="par14">
-Sfinae</a></h2>
+SFINAE</a></h2>
Instead of tag dispatching we alternatively could have chosen for SFINAE, mentioned above. With SFINAE (Substitution Failure Is Not An Error) we add optional parameters to the distance function, which sole use is to make an overload invalid for other geometry types than specified. So like: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2>
<span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__distance.html#g22a618786d2601e9201896a8346c161b" title="Calculate distance between two geometries with a specified strategy.">distance</a>(P1 <span class="keyword">const</span>& p1, P2 <span class="keyword">const</span>& p2
, <span class="keyword">typename</span> boost::enable_if <is_point<P1> >::type* = 0
@@ -575,7 +561,7 @@
}
</pre></div><p>
There would then be overloads for point-segment, point-polygon, etc. This SFINAE:<ul>
-<li>can be done on functions but not on structs (meta-functions). So the coordinate_type meta-function would still have to use tag dispatching</li><li>gives often compiler troubles and headaches: if a user makes an error somewhere, the compiler will not select any of the methods, and/or it will give completely incomprehensible error listings, just because of this SFINAE</li><li>does not support partial specializations because it is a function. The tag-dispatching function is of course also not supporting that, but it forwards its call to the dispatch struct where partial specializations (and member template functions) are possible. The SFINAE could do that as well but then: why not just add one tag more and have tag dispatching instead?</li><li>is a trick to deceive the compiler. As a language behavior it was designed to avoid programs becoming ill-formed [2], while tag dispatching is based on specialization, a core feature of C++</li><li>looks more ugly</li><li>is simply not necessary because we have tag
dispatching :-) </li></ul>
+<li>can be done on functions but not on structs (meta-functions). So the coordinate_type meta-function would still have to use tag dispatching</li><li>gives often compiler troubles and headaches: if a user makes an error somewhere, the compiler will not select any of the methods, and/or it will give completely incomprehensible error listings, just because of this SFINAE</li><li>does not support partial specializations because it is a function. The tag-dispatching function is of course also not supporting that, but it forwards its call to the dispatch struct where partial specializations (and member template functions) are possible. The SFINAE could do that as well but then: why not just add one tag more and have tag dispatching instead?</li><li>is a trick to deceive the compiler. As a language behavior it was designed to avoid programs becoming ill-formed (http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error), whi
le tag dispatching is based on specialization, a core feature of C++</li><li>looks more ugly</li><li>is simply not necessary because we have tag dispatching :-) </li></ul>
</div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/disjoint_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/disjoint_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/disjoint_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -102,14 +102,14 @@
<a name="l00077"></a>00077 <span class="comment">// If there is no intersection of segments, they might ly</span>
<a name="l00078"></a>00078 <span class="comment">// inside each other</span>
<a name="l00079"></a>00079 point_type p1;
-<a name="l00080"></a>00080 <a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(geometry1, p1);
+<a name="l00080"></a>00080 <a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(geometry1, p1);
<a name="l00081"></a>00081 <span class="keywordflow">if</span> (<a class="code" href="group__within.html#g599c2aa76cf2037eb40514e449ace28d" title="Within, examine if a geometry is within another geometry.">ggl::within</a>(p1, geometry2))
<a name="l00082"></a>00082 {
<a name="l00083"></a>00083 <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keyword">typename</span> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">ggl::point_type<Geometry1>::type</a> p2;
-<a name="l00087"></a>00087 <a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(geometry2, p2);
+<a name="l00087"></a>00087 <a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(geometry2, p2);
<a name="l00088"></a>00088 <span class="keywordflow">if</span> (<a class="code" href="group__within.html#g599c2aa76cf2037eb40514e449ace28d" title="Within, examine if a geometry is within another geometry.">ggl::within</a>(p2, geometry1))
<a name="l00089"></a>00089 {
<a name="l00090"></a>00090 <span class="keywordflow">return</span> <span class="keyword">false</span>;
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/download.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/download.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/download.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -37,9 +37,8 @@
<div class="contents">
<h1><a class="anchor" name="download">Download the Generic Geometry Library </a></h1>The library can be downloaded from Boost SVN. There is anonymous SVN access.<p>
The command<p>
-<code>svn co https://svn.boost.org/svn/boost/sandbox/ggl <a class="el" href="namespaceggl.html">ggl</a></code><p>
-will download the library to your machine.<p>
-Current <b>Formal</b> <b>Review</b> version is here: https://svn.boost.org/svn/boost/sandbox/ggl/formal_review </div>
+<code>svn co https://svn.boost.org/svn/boost/sandbox/ggl/formal_review <a class="el" href="namespaceggl.html">ggl</a></code><p>
+will download the library to your machine. </div>
<hr size="1">
<table width="100%">
<tbody>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__a__design__rationale_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__a__design__rationale_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__a__design__rationale_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -53,7 +53,7 @@
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
<a name="l00014"></a>00014
-<a name="l00825"></a>00825 <span class="preprocessor">#endif // _DOXYGEN_DESIGN_RATIONALE_HPP</span>
+<a name="l00807"></a>00807 <span class="preprocessor">#endif // _DOXYGEN_DESIGN_RATIONALE_HPP</span>
</pre></div></div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__c__strategy__rationale_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__c__strategy__rationale_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__c__strategy__rationale_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -53,7 +53,7 @@
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
<a name="l00014"></a>00014
-<a name="l00080"></a>00080 <span class="preprocessor">#endif // _DOXYGEN_STRATEGY_RATIONALE_HPP</span>
+<a name="l00079"></a>00079 <span class="preprocessor">#endif // _DOXYGEN_STRATEGY_RATIONALE_HPP</span>
</pre></div></div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__mainpage_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__mainpage_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__mainpage_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -51,7 +51,7 @@
<a name="l00010"></a>00010 <span class="preprocessor"></span><span class="preprocessor">#define _DOXYGEN_MAINPAGE_HPP</span>
<a name="l00011"></a>00011 <span class="preprocessor"></span>
<a name="l00012"></a>00012
-<a name="l00094"></a>00094 <span class="preprocessor">#endif // _DOXYGEN_MAINPAGE_HPP</span>
+<a name="l00096"></a>00096 <span class="preprocessor">#endif // _DOXYGEN_MAINPAGE_HPP</span>
</pre></div></div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__pages_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__pages_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/doxygen__pages_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -53,18 +53,18 @@
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
<a name="l00014"></a>00014
-<a name="l00108"></a>00108 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
-<a name="l00109"></a>00109
-<a name="l00136"></a>00136 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
-<a name="l00137"></a>00137
-<a name="l00148"></a>00148 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
-<a name="l00149"></a>00149
-<a name="l00150"></a>00150
-<a name="l00230"></a>00230 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
-<a name="l00231"></a>00231
-<a name="l00322"></a>00322 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
-<a name="l00323"></a>00323
-<a name="l00345"></a>00345 <span class="preprocessor">#endif // _DOXYGEN_PAGES_HPP</span>
+<a name="l00126"></a>00126 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
+<a name="l00127"></a>00127
+<a name="l00154"></a>00154 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
+<a name="l00155"></a>00155
+<a name="l00166"></a>00166 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
+<a name="l00167"></a>00167
+<a name="l00168"></a>00168
+<a name="l00247"></a>00247 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
+<a name="l00248"></a>00248
+<a name="l00341"></a>00341 <span class="comment">//---------------------------------------------------------------------------------------------------</span>
+<a name="l00342"></a>00342
+<a name="l00360"></a>00360 <span class="preprocessor">#endif // _DOXYGEN_PAGES_HPP</span>
</pre></div></div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/equals_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/equals_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/equals_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -50,296 +50,296 @@
<a name="l00009"></a>00009 <span class="preprocessor">#ifndef GGL_ALGORITHMS_EQUALS_HPP</span>
<a name="l00010"></a>00010 <span class="preprocessor"></span><span class="preprocessor">#define GGL_ALGORITHMS_EQUALS_HPP</span>
<a name="l00011"></a>00011 <span class="preprocessor"></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#include <cstddef></span>
-<a name="l00022"></a>00022 <span class="preprocessor">#include <deque></span>
-<a name="l00023"></a>00023
-<a name="l00024"></a>00024 <span class="preprocessor">#include <boost/static_assert.hpp></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <boost/range/functions.hpp></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <boost/range/metafunctions.hpp></span>
-<a name="l00027"></a>00027
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="access_8hpp.html">ggl/core/access.hpp</a>></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="coordinate__dimension_8hpp.html">ggl/core/coordinate_dimension.hpp</a>></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="core_2is__multi_8hpp.html">ggl/core/is_multi.hpp</a>></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="interior__rings_8hpp.html">ggl/core/interior_rings.hpp</a>></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include <cstddef></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include <deque></span>
<a name="l00032"></a>00032
-<a name="l00033"></a>00033 <span class="preprocessor">#include <<a class="code" href="detail_2disjoint_8hpp.html">ggl/algorithms/detail/disjoint.hpp</a>></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <<a class="code" href="not_8hpp.html">ggl/algorithms/detail/not.hpp</a>></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <<a class="code" href="algorithms_2area_8hpp.html">ggl/algorithms/area.hpp</a>></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <<a class="code" href="get__intersection__points_8hpp.html">ggl/algorithms/overlay/get_intersection_points.hpp</a>></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <<a class="code" href="merge__intersection__points_8hpp.html">ggl/algorithms/overlay/merge_intersection_points.hpp</a>></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <<a class="code" href="geometries_2concepts_2check_8hpp.html">ggl/geometries/concepts/check.hpp</a>></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <<a class="code" href="math_8hpp.html">ggl/util/math.hpp</a>></span>
-<a name="l00040"></a>00040
+<a name="l00033"></a>00033 <span class="preprocessor">#include <boost/static_assert.hpp></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include <boost/range/functions.hpp></span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include <boost/range/metafunctions.hpp></span>
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037 <span class="preprocessor">#include <<a class="code" href="access_8hpp.html">ggl/core/access.hpp</a>></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include <<a class="code" href="coordinate__dimension_8hpp.html">ggl/core/coordinate_dimension.hpp</a>></span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include <<a class="code" href="core_2is__multi_8hpp.html">ggl/core/is_multi.hpp</a>></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include <<a class="code" href="interior__rings_8hpp.html">ggl/core/interior_rings.hpp</a>></span>
<a name="l00041"></a>00041
-<a name="l00042"></a>00042
-<a name="l00043"></a>00043 <span class="keyword">namespace </span>ggl
-<a name="l00044"></a>00044 {
-<a name="l00045"></a>00045
-<a name="l00046"></a>00046 <span class="preprocessor">#ifndef DOXYGEN_NO_DETAIL</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="keyword">namespace </span>detail { <span class="keyword">namespace </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a> {
-<a name="l00048"></a>00048
+<a name="l00042"></a>00042 <span class="preprocessor">#include <<a class="code" href="detail_2disjoint_8hpp.html">ggl/algorithms/detail/disjoint.hpp</a>></span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include <<a class="code" href="not_8hpp.html">ggl/algorithms/detail/not.hpp</a>></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include <<a class="code" href="algorithms_2area_8hpp.html">ggl/algorithms/area.hpp</a>></span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include <<a class="code" href="get__intersection__points_8hpp.html">ggl/algorithms/overlay/get_intersection_points.hpp</a>></span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include <<a class="code" href="merge__intersection__points_8hpp.html">ggl/algorithms/overlay/merge_intersection_points.hpp</a>></span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include <<a class="code" href="geometries_2concepts_2check_8hpp.html">ggl/geometries/concepts/check.hpp</a>></span>
+<a name="l00048"></a>00048 <span class="preprocessor">#include <<a class="code" href="math_8hpp.html">ggl/util/math.hpp</a>></span>
<a name="l00049"></a>00049
-<a name="l00050"></a>00050 <span class="keyword">template</span>
-<a name="l00051"></a>00051 <
-<a name="l00052"></a>00052 <span class="keyword">typename</span> Box1,
-<a name="l00053"></a>00053 <span class="keyword">typename</span> Box2,
-<a name="l00054"></a>00054 std::size_t Dimension,
-<a name="l00055"></a>00055 std::size_t DimensionCount
-<a name="l00056"></a>00056 >
-<a name="l00057"></a>00057 <span class="keyword">struct </span>box_box
-<a name="l00058"></a>00058 {
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Box1 <span class="keyword">const</span>& box1, Box2 <span class="keyword">const</span>& box2)
-<a name="l00060"></a>00060 {
-<a name="l00061"></a>00061 <span class="keywordflow">if</span> (!<a class="code" href="group__utility.html#gd90ba94c2d65876e9485b2bbd10def34" title="returns true if both arguments are equal.">ggl::math::equals</a>(get<min_corner, Dimension>(box1), get<min_corner, Dimension>(box2))
-<a name="l00062"></a>00062 || !<a class="code" href="group__utility.html#gd90ba94c2d65876e9485b2bbd10def34" title="returns true if both arguments are equal.">ggl::math::equals</a>(get<max_corner, Dimension>(box1), get<max_corner, Dimension>(box2)))
-<a name="l00063"></a>00063 {
-<a name="l00064"></a>00064 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00065"></a>00065 }
-<a name="l00066"></a>00066 <span class="keywordflow">return</span> box_box<Box1, Box2, Dimension + 1, DimensionCount>::apply(box1, box2);
-<a name="l00067"></a>00067 }
-<a name="l00068"></a>00068 };
-<a name="l00069"></a>00069
-<a name="l00070"></a>00070 <span class="keyword">template</span> <<span class="keyword">typename</span> Box1, <span class="keyword">typename</span> Box2, std::<span class="keywordtype">size_t</span> DimensionCount>
-<a name="l00071"></a>00071 <span class="keyword">struct </span>box_box<Box1, Box2, DimensionCount, DimensionCount>
-<a name="l00072"></a>00072 {
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Box1 <span class="keyword">const</span>& , Box2 <span class="keyword">const</span>& )
-<a name="l00074"></a>00074 {
-<a name="l00075"></a>00075 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051
+<a name="l00052"></a>00052 <span class="keyword">namespace </span>ggl
+<a name="l00053"></a>00053 {
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="preprocessor">#ifndef DOXYGEN_NO_DETAIL</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="keyword">namespace </span>detail { <span class="keyword">namespace </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a> {
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="keyword">template</span>
+<a name="l00060"></a>00060 <
+<a name="l00061"></a>00061 <span class="keyword">typename</span> Box1,
+<a name="l00062"></a>00062 <span class="keyword">typename</span> Box2,
+<a name="l00063"></a>00063 std::size_t Dimension,
+<a name="l00064"></a>00064 std::size_t DimensionCount
+<a name="l00065"></a>00065 >
+<a name="l00066"></a>00066 <span class="keyword">struct </span>box_box
+<a name="l00067"></a>00067 {
+<a name="l00068"></a>00068 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Box1 <span class="keyword">const</span>& box1, Box2 <span class="keyword">const</span>& box2)
+<a name="l00069"></a>00069 {
+<a name="l00070"></a>00070 <span class="keywordflow">if</span> (!<a class="code" href="group__utility.html#gd90ba94c2d65876e9485b2bbd10def34" title="returns true if both arguments are equal.">ggl::math::equals</a>(get<min_corner, Dimension>(box1), get<min_corner, Dimension>(box2))
+<a name="l00071"></a>00071 || !<a class="code" href="group__utility.html#gd90ba94c2d65876e9485b2bbd10def34" title="returns true if both arguments are equal.">ggl::math::equals</a>(get<max_corner, Dimension>(box1), get<max_corner, Dimension>(box2)))
+<a name="l00072"></a>00072 {
+<a name="l00073"></a>00073 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075 <span class="keywordflow">return</span> box_box<Box1, Box2, Dimension + 1, DimensionCount>::apply(box1, box2);
<a name="l00076"></a>00076 }
<a name="l00077"></a>00077 };
<a name="l00078"></a>00078
-<a name="l00079"></a>00079
-<a name="l00080"></a>00080 <span class="keyword">template</span> <<span class="keyword">typename</span> Ring1, <span class="keyword">typename</span> Ring2>
-<a name="l00081"></a>00081 <span class="keyword">struct </span>ring_ring
-<a name="l00082"></a>00082 {
-<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Ring1 <span class="keyword">const</span>& ring1, Ring2 <span class="keyword">const</span>& ring2, <span class="keywordtype">bool</span> check_area = <span class="keyword">true</span>)
-<a name="l00084"></a>00084 {
-<a name="l00085"></a>00085 <span class="comment">// Note: this implementation makes use of getting interections</span>
-<a name="l00086"></a>00086 <span class="comment">// and merge them. If all IP's disappear, the ring should be the same</span>
-<a name="l00087"></a>00087 <span class="comment">// (because merging removes collinear or non-collinear</span>
-<a name="l00088"></a>00088 <span class="comment">// IP's following the same path)</span>
-<a name="l00089"></a>00089 <span class="comment">// However, this implementation should be redone using</span>
-<a name="l00090"></a>00090 <span class="comment">// a linear time algorithm (getting left-most points of both</span>
-<a name="l00091"></a>00091 <span class="comment">// and follow them using circular iterator and distance/side)</span>
-<a name="l00092"></a>00092
-<a name="l00093"></a>00093 <span class="comment">// obvious check, area's should be the same.</span>
-<a name="l00094"></a>00094 <span class="keywordflow">if</span> (check_area && <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">ggl::area</a>(ring1) != <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">ggl::area</a>(ring2))
-<a name="l00095"></a>00095 {
-<a name="l00096"></a>00096 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00097"></a>00097 }
-<a name="l00098"></a>00098 <span class="comment">// We could check more (perimeter,centroid,envelope)</span>
-<a name="l00099"></a>00099 <span class="comment">// For now we go directly to intersection points</span>
-<a name="l00100"></a>00100
-<a name="l00101"></a>00101 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">ggl::point_type<Ring1>::type</a> point_type;
-<a name="l00102"></a>00102 <span class="keyword">typedef</span> detail::intersection::intersection_point<point_type> ip_type;
-<a name="l00103"></a>00103 <span class="keyword">typedef</span> std::deque<ip_type> container_type;
-<a name="l00104"></a>00104
-<a name="l00105"></a>00105 container_type ips;
-<a name="l00106"></a>00106
-<a name="l00107"></a>00107
-<a name="l00108"></a>00108 <span class="keywordtype">bool</span> trivial = <a class="code" href="group__overlay.html#g9b41efeface4cb10fbce39c8bcc8bec9" title="Calculate intersection points of two geometries.">ggl::get_intersection_points</a>(ring1, ring2, ips);
-<a name="l00109"></a>00109 <span class="keywordflow">if</span> (trivial || ips.size() == 0)
-<a name="l00110"></a>00110 {
-<a name="l00111"></a>00111 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00112"></a>00112 }
-<a name="l00113"></a>00113 <a class="code" href="group__overlay.html#gc1dcd7471f802810f7d48b36eea24d0f" title="Merges intersection points such that points at the same location will be merged,...">ggl::merge_intersection_points</a>(ips);
-<a name="l00114"></a>00114 <span class="keywordflow">if</span> (ips.size() == 0)
-<a name="l00115"></a>00115 {
-<a name="l00116"></a>00116 <span class="comment">// All IP's are merged. Meaning collinear / path can be followed</span>
-<a name="l00117"></a>00117 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00118"></a>00118 }
-<a name="l00119"></a>00119
-<a name="l00120"></a>00120 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00121"></a>00121 }
-<a name="l00122"></a>00122 };
-<a name="l00123"></a>00123
-<a name="l00124"></a>00124
-<a name="l00125"></a>00125 <span class="keyword">template</span> <<span class="keyword">typename</span> Polygon1, <span class="keyword">typename</span> Polygon2>
-<a name="l00126"></a>00126 <span class="keyword">struct </span>polygon_polygon
-<a name="l00127"></a>00127 {
+<a name="l00079"></a>00079 <span class="keyword">template</span> <<span class="keyword">typename</span> Box1, <span class="keyword">typename</span> Box2, std::<span class="keywordtype">size_t</span> DimensionCount>
+<a name="l00080"></a>00080 <span class="keyword">struct </span>box_box<Box1, Box2, DimensionCount, DimensionCount>
+<a name="l00081"></a>00081 {
+<a name="l00082"></a>00082 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Box1 <span class="keyword">const</span>& , Box2 <span class="keyword">const</span>& )
+<a name="l00083"></a>00083 {
+<a name="l00084"></a>00084 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00085"></a>00085 }
+<a name="l00086"></a>00086 };
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keyword">template</span> <<span class="keyword">typename</span> Ring1, <span class="keyword">typename</span> Ring2>
+<a name="l00090"></a>00090 <span class="keyword">struct </span>ring_ring
+<a name="l00091"></a>00091 {
+<a name="l00092"></a>00092 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Ring1 <span class="keyword">const</span>& ring1, Ring2 <span class="keyword">const</span>& ring2, <span class="keywordtype">bool</span> check_area = <span class="keyword">true</span>)
+<a name="l00093"></a>00093 {
+<a name="l00094"></a>00094 <span class="comment">// Note: this implementation makes use of getting interections</span>
+<a name="l00095"></a>00095 <span class="comment">// and merge them. If all IP's disappear, the ring should be the same</span>
+<a name="l00096"></a>00096 <span class="comment">// (because merging removes collinear or non-collinear</span>
+<a name="l00097"></a>00097 <span class="comment">// IP's following the same path)</span>
+<a name="l00098"></a>00098 <span class="comment">// However, this implementation should be redone using</span>
+<a name="l00099"></a>00099 <span class="comment">// a linear time algorithm (getting left-most points of both</span>
+<a name="l00100"></a>00100 <span class="comment">// and follow them using circular iterator and distance/side)</span>
+<a name="l00101"></a>00101
+<a name="l00102"></a>00102 <span class="comment">// obvious check, area's should be the same.</span>
+<a name="l00103"></a>00103 <span class="keywordflow">if</span> (check_area && <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">ggl::area</a>(ring1) != <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">ggl::area</a>(ring2))
+<a name="l00104"></a>00104 {
+<a name="l00105"></a>00105 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00106"></a>00106 }
+<a name="l00107"></a>00107 <span class="comment">// We could check more (perimeter,centroid,envelope)</span>
+<a name="l00108"></a>00108 <span class="comment">// For now we go directly to intersection points</span>
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">ggl::point_type<Ring1>::type</a> point_type;
+<a name="l00111"></a>00111 <span class="keyword">typedef</span> detail::intersection::intersection_point<point_type> ip_type;
+<a name="l00112"></a>00112 <span class="keyword">typedef</span> std::deque<ip_type> container_type;
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 container_type ips;
+<a name="l00115"></a>00115
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 <span class="keywordtype">bool</span> trivial = <a class="code" href="group__overlay.html#g9b41efeface4cb10fbce39c8bcc8bec9" title="Calculate intersection points of two geometries.">ggl::get_intersection_points</a>(ring1, ring2, ips);
+<a name="l00118"></a>00118 <span class="keywordflow">if</span> (trivial || ips.size() == 0)
+<a name="l00119"></a>00119 {
+<a name="l00120"></a>00120 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00121"></a>00121 }
+<a name="l00122"></a>00122 <a class="code" href="group__overlay.html#gc1dcd7471f802810f7d48b36eea24d0f" title="Merges intersection points such that points at the same location will be merged,...">ggl::merge_intersection_points</a>(ips);
+<a name="l00123"></a>00123 <span class="keywordflow">if</span> (ips.size() == 0)
+<a name="l00124"></a>00124 {
+<a name="l00125"></a>00125 <span class="comment">// All IP's are merged. Meaning collinear / path can be followed</span>
+<a name="l00126"></a>00126 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00127"></a>00127 }
<a name="l00128"></a>00128
-<a name="l00129"></a>00129 <span class="keyword">struct </span>sortable
-<a name="l00130"></a>00130 {
-<a name="l00131"></a>00131 <span class="keywordtype">int</span> index;
-<a name="l00132"></a>00132 <span class="keywordtype">double</span> <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">area</a>;
-<a name="l00133"></a>00133 <span class="keywordtype">bool</span> counterpart_found;
-<a name="l00134"></a>00134 <span class="keyword">inline</span> sortable(<span class="keywordtype">int</span> i, <span class="keywordtype">double</span> a)
-<a name="l00135"></a>00135 : index(i)
-<a name="l00136"></a>00136 , <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">area</a>(a)
-<a name="l00137"></a>00137 , counterpart_found(false)
-<a name="l00138"></a>00138 {}
-<a name="l00139"></a>00139
-<a name="l00140"></a>00140 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(sortable <span class="keyword">const</span>& other)<span class="keyword"> const</span>
-<a name="l00141"></a>00141 <span class="keyword"> </span>{
-<a name="l00142"></a>00142 <span class="keywordflow">return</span> <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">area</a> < other.area;
-<a name="l00143"></a>00143 }
-<a name="l00144"></a>00144 };
-<a name="l00145"></a>00145
-<a name="l00146"></a>00146
-<a name="l00147"></a>00147 <span class="keyword">template</span> <<span class="keyword">typename</span> Poly>
-<a name="l00148"></a>00148 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> fill_sortable(Poly <span class="keyword">const</span>& polygon, std::vector<sortable>& v)
-<a name="l00149"></a>00149 {
-<a name="l00150"></a>00150 <span class="keywordtype">int</span> i = 0;
-<a name="l00151"></a>00151 <span class="keywordflow">for</span> (<span class="keyword">typename</span> boost::range_const_iterator
-<a name="l00152"></a>00152 <
-<a name="l00153"></a>00153 <span class="keyword">typename</span> interior_type<Poly>::type
-<a name="l00154"></a>00154 >::type it = boost::begin(<a class="code" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">interior_rings</a>(polygon));
-<a name="l00155"></a>00155 it != boost::end(<a class="code" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">interior_rings</a>(polygon));
-<a name="l00156"></a>00156 ++it, ++i)
-<a name="l00157"></a>00157 {
-<a name="l00158"></a>00158 v.push_back(sortable(i, <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">ggl::area</a>(*it)));
-<a name="l00159"></a>00159 }
-<a name="l00160"></a>00160 std::sort(v.begin(), v.end());
-<a name="l00161"></a>00161
-<a name="l00162"></a>00162 <span class="comment">/***</span>
-<a name="l00163"></a>00163 <span class="comment"> for (typename std::vector<sortable>::iterator it = v.begin();</span>
-<a name="l00164"></a>00164 <span class="comment"> it != v.end();</span>
-<a name="l00165"></a>00165 <span class="comment"> ++it)</span>
-<a name="l00166"></a>00166 <span class="comment"> {</span>
-<a name="l00167"></a>00167 <span class="comment"> std::cout << "Ring: " << it->index << " area: " << it->area << std::endl;</span>
-<a name="l00168"></a>00168 <span class="comment"> }</span>
-<a name="l00169"></a>00169 <span class="comment"> ***/</span>
-<a name="l00170"></a>00170 }
-<a name="l00171"></a>00171
-<a name="l00172"></a>00172 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Polygon1 <span class="keyword">const</span>& polygon1, Polygon2 <span class="keyword">const</span>& polygon2)
-<a name="l00173"></a>00173 {
-<a name="l00174"></a>00174 <span class="comment">// Check number of rings (area check is done in exterior ring check)</span>
-<a name="l00175"></a>00175 <span class="keywordflow">if</span> (<a class="code" href="group__access.html#gb13419230cdc76a88bf2afb902776305" title="Function to get the number of interior rings of a polygon.">ggl::num_interior_rings</a>(polygon1) != <a class="code" href="group__access.html#gb13419230cdc76a88bf2afb902776305" title="Function to get the number of interior rings of a polygon.">ggl::num_interior_rings</a>(polygon2))
-<a name="l00176"></a>00176 {
-<a name="l00177"></a>00177 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00178"></a>00178 }
-<a name="l00179"></a>00179
-<a name="l00180"></a>00180 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1ring__type.html" title="Meta-function which defines ring type of (multi)polygon geometry.">ggl::ring_type<Polygon1>::type</a> ring_type1;
-<a name="l00181"></a>00181 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1ring__type.html" title="Meta-function which defines ring type of (multi)polygon geometry.">ggl::ring_type<Polygon2>::type</a> ring_type2;
-<a name="l00182"></a>00182 <span class="keyword">typedef</span> ring_ring<ring_type1, ring_type2> compare;
-<a name="l00183"></a>00183
-<a name="l00184"></a>00184 <span class="comment">// Check exterior ring</span>
-<a name="l00185"></a>00185 <span class="keywordflow">if</span> (! compare::apply(<a class="code" href="group__access.html#g4dd59c8603683e869f1d74bd40045b8b" title="Function to get the exterior_ring ring of a polygon.">exterior_ring</a>(polygon1), <a class="code" href="group__access.html#g4dd59c8603683e869f1d74bd40045b8b" title="Function to get the exterior_ring ring of a polygon.">exterior_ring</a>(polygon2)))
-<a name="l00186"></a>00186 {
-<a name="l00187"></a>00187 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00188"></a>00188 }
-<a name="l00189"></a>00189
-<a name="l00190"></a>00190 <span class="comment">// Check interior rings -> first sort them on area ,</span>
-<a name="l00191"></a>00191 <span class="comment">// for performance reasons (area is not re-calculated in ring-compare)</span>
-<a name="l00192"></a>00192 std::vector<sortable> int1, int2;
-<a name="l00193"></a>00193
-<a name="l00194"></a>00194 fill_sortable(polygon1, int1);
-<a name="l00195"></a>00195 fill_sortable(polygon2, int2);
-<a name="l00196"></a>00196
-<a name="l00197"></a>00197 std::size_t n = 0;
+<a name="l00129"></a>00129 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 };
+<a name="l00132"></a>00132
+<a name="l00133"></a>00133
+<a name="l00134"></a>00134 <span class="keyword">template</span> <<span class="keyword">typename</span> Polygon1, <span class="keyword">typename</span> Polygon2>
+<a name="l00135"></a>00135 <span class="keyword">struct </span>polygon_polygon
+<a name="l00136"></a>00136 {
+<a name="l00137"></a>00137
+<a name="l00138"></a>00138 <span class="keyword">struct </span>sortable
+<a name="l00139"></a>00139 {
+<a name="l00140"></a>00140 <span class="keywordtype">int</span> index;
+<a name="l00141"></a>00141 <span class="keywordtype">double</span> <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">area</a>;
+<a name="l00142"></a>00142 <span class="keywordtype">bool</span> counterpart_found;
+<a name="l00143"></a>00143 <span class="keyword">inline</span> sortable(<span class="keywordtype">int</span> i, <span class="keywordtype">double</span> a)
+<a name="l00144"></a>00144 : index(i)
+<a name="l00145"></a>00145 , <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">area</a>(a)
+<a name="l00146"></a>00146 , counterpart_found(false)
+<a name="l00147"></a>00147 {}
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(sortable <span class="keyword">const</span>& other)<span class="keyword"> const</span>
+<a name="l00150"></a>00150 <span class="keyword"> </span>{
+<a name="l00151"></a>00151 <span class="keywordflow">return</span> <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">area</a> < other.area;
+<a name="l00152"></a>00152 }
+<a name="l00153"></a>00153 };
+<a name="l00154"></a>00154
+<a name="l00155"></a>00155
+<a name="l00156"></a>00156 <span class="keyword">template</span> <<span class="keyword">typename</span> Poly>
+<a name="l00157"></a>00157 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> fill_sortable(Poly <span class="keyword">const</span>& polygon, std::vector<sortable>& v)
+<a name="l00158"></a>00158 {
+<a name="l00159"></a>00159 <span class="keywordtype">int</span> i = 0;
+<a name="l00160"></a>00160 <span class="keywordflow">for</span> (<span class="keyword">typename</span> boost::range_const_iterator
+<a name="l00161"></a>00161 <
+<a name="l00162"></a>00162 <span class="keyword">typename</span> interior_type<Poly>::type
+<a name="l00163"></a>00163 >::type it = boost::begin(<a class="code" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">interior_rings</a>(polygon));
+<a name="l00164"></a>00164 it != boost::end(<a class="code" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">interior_rings</a>(polygon));
+<a name="l00165"></a>00165 ++it, ++i)
+<a name="l00166"></a>00166 {
+<a name="l00167"></a>00167 v.push_back(sortable(i, <a class="code" href="group__area.html#gaffb471f2ef6dd4842563e533094fa0d" title="Calculate area of a geometry.">ggl::area</a>(*it)));
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169 std::sort(v.begin(), v.end());
+<a name="l00170"></a>00170
+<a name="l00171"></a>00171 <span class="comment">/***</span>
+<a name="l00172"></a>00172 <span class="comment"> for (typename std::vector<sortable>::iterator it = v.begin();</span>
+<a name="l00173"></a>00173 <span class="comment"> it != v.end();</span>
+<a name="l00174"></a>00174 <span class="comment"> ++it)</span>
+<a name="l00175"></a>00175 <span class="comment"> {</span>
+<a name="l00176"></a>00176 <span class="comment"> std::cout << "Ring: " << it->index << " area: " << it->area << std::endl;</span>
+<a name="l00177"></a>00177 <span class="comment"> }</span>
+<a name="l00178"></a>00178 <span class="comment"> ***/</span>
+<a name="l00179"></a>00179 }
+<a name="l00180"></a>00180
+<a name="l00181"></a>00181 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Polygon1 <span class="keyword">const</span>& polygon1, Polygon2 <span class="keyword">const</span>& polygon2)
+<a name="l00182"></a>00182 {
+<a name="l00183"></a>00183 <span class="comment">// Check number of rings (area check is done in exterior ring check)</span>
+<a name="l00184"></a>00184 <span class="keywordflow">if</span> (<a class="code" href="group__access.html#gb13419230cdc76a88bf2afb902776305" title="Function to get the number of interior rings of a polygon.">ggl::num_interior_rings</a>(polygon1) != <a class="code" href="group__access.html#gb13419230cdc76a88bf2afb902776305" title="Function to get the number of interior rings of a polygon.">ggl::num_interior_rings</a>(polygon2))
+<a name="l00185"></a>00185 {
+<a name="l00186"></a>00186 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00187"></a>00187 }
+<a name="l00188"></a>00188
+<a name="l00189"></a>00189 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1ring__type.html" title="Meta-function which defines ring type of (multi)polygon geometry.">ggl::ring_type<Polygon1>::type</a> ring_type1;
+<a name="l00190"></a>00190 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1ring__type.html" title="Meta-function which defines ring type of (multi)polygon geometry.">ggl::ring_type<Polygon2>::type</a> ring_type2;
+<a name="l00191"></a>00191 <span class="keyword">typedef</span> ring_ring<ring_type1, ring_type2> compare;
+<a name="l00192"></a>00192
+<a name="l00193"></a>00193 <span class="comment">// Check exterior ring</span>
+<a name="l00194"></a>00194 <span class="keywordflow">if</span> (! compare::apply(<a class="code" href="group__access.html#g4dd59c8603683e869f1d74bd40045b8b" title="Function to get the exterior_ring ring of a polygon.">exterior_ring</a>(polygon1), <a class="code" href="group__access.html#g4dd59c8603683e869f1d74bd40045b8b" title="Function to get the exterior_ring ring of a polygon.">exterior_ring</a>(polygon2)))
+<a name="l00195"></a>00195 {
+<a name="l00196"></a>00196 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00197"></a>00197 }
<a name="l00198"></a>00198
-<a name="l00199"></a>00199 <span class="keyword">typename</span> interior_type<Polygon1>::type <span class="keyword">const</span>& rings1
-<a name="l00200"></a>00200 = <a class="code" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">interior_rings</a>(polygon1);
-<a name="l00201"></a>00201 <span class="keyword">typename</span> interior_type<Polygon2>::type <span class="keyword">const</span>& rings2
-<a name="l00202"></a>00202 = <a class="code" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">interior_rings</a>(polygon2);
-<a name="l00203"></a>00203
-<a name="l00204"></a>00204 <span class="comment">// Compare all rings (having equal area)</span>
-<a name="l00205"></a>00205 <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<sortable>::iterator it1 = int1.begin();
-<a name="l00206"></a>00206 it1 != int1.end();
-<a name="l00207"></a>00207 ++it1)
-<a name="l00208"></a>00208 {
-<a name="l00209"></a>00209 <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<sortable>::iterator it2 = int2.begin();
-<a name="l00210"></a>00210 ! it1->counterpart_found
-<a name="l00211"></a>00211 && it2 != int2.end()
-<a name="l00212"></a>00212 && it2->area <= it1->area; <span class="comment">//+epsilon</span>
-<a name="l00213"></a>00213 ++it2)
-<a name="l00214"></a>00214 {
-<a name="l00215"></a>00215 <span class="keywordflow">if</span> (! it2->counterpart_found
-<a name="l00216"></a>00216 && <a class="code" href="group__utility.html#gd90ba94c2d65876e9485b2bbd10def34" title="returns true if both arguments are equal.">ggl::math::equals</a>(it1->area, it2->area))
-<a name="l00217"></a>00217 {
-<a name="l00218"></a>00218 <span class="keywordflow">if</span> (compare::apply(rings1[it1->index],
-<a name="l00219"></a>00219 rings2[it2->index], <span class="keyword">false</span>))
-<a name="l00220"></a>00220 {
-<a name="l00221"></a>00221 it1->counterpart_found = <span class="keyword">true</span>;
-<a name="l00222"></a>00222 it2->counterpart_found = <span class="keyword">true</span>;
-<a name="l00223"></a>00223 n++;
-<a name="l00224"></a>00224 }
-<a name="l00225"></a>00225 }
-<a name="l00226"></a>00226 }
-<a name="l00227"></a>00227 }
-<a name="l00228"></a>00228
-<a name="l00229"></a>00229 <span class="keywordflow">return</span> n == <a class="code" href="group__access.html#gb13419230cdc76a88bf2afb902776305" title="Function to get the number of interior rings of a polygon.">ggl::num_interior_rings</a>(polygon1);
-<a name="l00230"></a>00230 }
-<a name="l00231"></a>00231 };
-<a name="l00232"></a>00232
-<a name="l00233"></a>00233
-<a name="l00234"></a>00234 }} <span class="comment">// namespace detail::equals</span>
-<a name="l00235"></a>00235 <span class="preprocessor">#endif // DOXYGEN_NO_DETAIL</span>
-<a name="l00236"></a>00236 <span class="preprocessor"></span>
+<a name="l00199"></a>00199 <span class="comment">// Check interior rings -> first sort them on area ,</span>
+<a name="l00200"></a>00200 <span class="comment">// for performance reasons (area is not re-calculated in ring-compare)</span>
+<a name="l00201"></a>00201 std::vector<sortable> int1, int2;
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203 fill_sortable(polygon1, int1);
+<a name="l00204"></a>00204 fill_sortable(polygon2, int2);
+<a name="l00205"></a>00205
+<a name="l00206"></a>00206 std::size_t n = 0;
+<a name="l00207"></a>00207
+<a name="l00208"></a>00208 <span class="keyword">typename</span> interior_type<Polygon1>::type <span class="keyword">const</span>& rings1
+<a name="l00209"></a>00209 = <a class="code" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">interior_rings</a>(polygon1);
+<a name="l00210"></a>00210 <span class="keyword">typename</span> interior_type<Polygon2>::type <span class="keyword">const</span>& rings2
+<a name="l00211"></a>00211 = <a class="code" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">interior_rings</a>(polygon2);
+<a name="l00212"></a>00212
+<a name="l00213"></a>00213 <span class="comment">// Compare all rings (having equal area)</span>
+<a name="l00214"></a>00214 <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<sortable>::iterator it1 = int1.begin();
+<a name="l00215"></a>00215 it1 != int1.end();
+<a name="l00216"></a>00216 ++it1)
+<a name="l00217"></a>00217 {
+<a name="l00218"></a>00218 <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector<sortable>::iterator it2 = int2.begin();
+<a name="l00219"></a>00219 ! it1->counterpart_found
+<a name="l00220"></a>00220 && it2 != int2.end()
+<a name="l00221"></a>00221 && it2->area <= it1->area; <span class="comment">//+epsilon</span>
+<a name="l00222"></a>00222 ++it2)
+<a name="l00223"></a>00223 {
+<a name="l00224"></a>00224 <span class="keywordflow">if</span> (! it2->counterpart_found
+<a name="l00225"></a>00225 && <a class="code" href="group__utility.html#gd90ba94c2d65876e9485b2bbd10def34" title="returns true if both arguments are equal.">ggl::math::equals</a>(it1->area, it2->area))
+<a name="l00226"></a>00226 {
+<a name="l00227"></a>00227 <span class="keywordflow">if</span> (compare::apply(rings1[it1->index],
+<a name="l00228"></a>00228 rings2[it2->index], <span class="keyword">false</span>))
+<a name="l00229"></a>00229 {
+<a name="l00230"></a>00230 it1->counterpart_found = <span class="keyword">true</span>;
+<a name="l00231"></a>00231 it2->counterpart_found = <span class="keyword">true</span>;
+<a name="l00232"></a>00232 n++;
+<a name="l00233"></a>00233 }
+<a name="l00234"></a>00234 }
+<a name="l00235"></a>00235 }
+<a name="l00236"></a>00236 }
<a name="l00237"></a>00237
-<a name="l00238"></a>00238 <span class="preprocessor">#ifndef DOXYGEN_NO_DISPATCH</span>
-<a name="l00239"></a>00239 <span class="preprocessor"></span><span class="keyword">namespace </span>dispatch
-<a name="l00240"></a>00240 {
+<a name="l00238"></a>00238 <span class="keywordflow">return</span> n == <a class="code" href="group__access.html#gb13419230cdc76a88bf2afb902776305" title="Function to get the number of interior rings of a polygon.">ggl::num_interior_rings</a>(polygon1);
+<a name="l00239"></a>00239 }
+<a name="l00240"></a>00240 };
<a name="l00241"></a>00241
-<a name="l00242"></a>00242 <span class="keyword">template</span>
-<a name="l00243"></a>00243 <
-<a name="l00244"></a>00244 <span class="keyword">typename</span> Tag1, <span class="keyword">typename</span> Tag2,
-<a name="l00245"></a>00245 <span class="keywordtype">bool</span> IsMulti1, <span class="keywordtype">bool</span> IsMulti2,
-<a name="l00246"></a>00246 <span class="keyword">typename</span> Geometry1,
-<a name="l00247"></a>00247 <span class="keyword">typename</span> Geometry2,
-<a name="l00248"></a>00248 std::size_t DimensionCount
-<a name="l00249"></a>00249 >
-<a name="l00250"></a>00250 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>
-<a name="l00251"></a>00251 {};
-<a name="l00252"></a>00252
-<a name="l00253"></a>00253
-<a name="l00254"></a>00254 <span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2, std::<span class="keywordtype">size_t</span> DimensionCount>
-<a name="l00255"></a>00255 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a><point_tag, point_tag, false, false, P1, P2, DimensionCount>
-<a name="l00256"></a>00256 : ggl::detail::not_
-<a name="l00257"></a>00257 <
-<a name="l00258"></a>00258 P1,
-<a name="l00259"></a>00259 P2,
-<a name="l00260"></a>00260 detail::disjoint::point_point<P1, P2, 0, DimensionCount>
-<a name="l00261"></a>00261 >
-<a name="l00262"></a>00262 {};
-<a name="l00263"></a>00263
-<a name="l00264"></a>00264
-<a name="l00265"></a>00265 <span class="keyword">template</span> <<span class="keyword">typename</span> Box1, <span class="keyword">typename</span> Box2, std::<span class="keywordtype">size_t</span> DimensionCount>
-<a name="l00266"></a>00266 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a><box_tag, box_tag, false, false, Box1, Box2, DimensionCount>
-<a name="l00267"></a>00267 : detail::<a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>::box_box<Box1, Box2, 0, DimensionCount>
-<a name="l00268"></a>00268 {};
-<a name="l00269"></a>00269
-<a name="l00270"></a>00270
-<a name="l00271"></a>00271 <span class="keyword">template</span> <<span class="keyword">typename</span> Ring1, <span class="keyword">typename</span> Ring2>
-<a name="l00272"></a>00272 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a><ring_tag, ring_tag, false, false, Ring1, Ring2, 2>
-<a name="l00273"></a>00273 : detail::<a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>::ring_ring<Ring1, Ring2>
-<a name="l00274"></a>00274 {};
-<a name="l00275"></a>00275
-<a name="l00276"></a>00276 <span class="keyword">template</span> <<span class="keyword">typename</span> Polygon1, <span class="keyword">typename</span> Polygon2>
-<a name="l00277"></a>00277 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a><polygon_tag, polygon_tag, false, false, Polygon1, Polygon2, 2>
-<a name="l00278"></a>00278 : detail::<a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>::polygon_polygon<Polygon1, Polygon2>
-<a name="l00279"></a>00279 {};
-<a name="l00280"></a>00280
-<a name="l00281"></a>00281 } <span class="comment">// namespace dispatch</span>
-<a name="l00282"></a>00282 <span class="preprocessor">#endif // DOXYGEN_NO_DISPATCH</span>
-<a name="l00283"></a>00283 <span class="preprocessor"></span>
+<a name="l00242"></a>00242
+<a name="l00243"></a>00243 }} <span class="comment">// namespace detail::equals</span>
+<a name="l00244"></a>00244 <span class="preprocessor">#endif // DOXYGEN_NO_DETAIL</span>
+<a name="l00245"></a>00245 <span class="preprocessor"></span>
+<a name="l00246"></a>00246
+<a name="l00247"></a>00247 <span class="preprocessor">#ifndef DOXYGEN_NO_DISPATCH</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="keyword">namespace </span>dispatch
+<a name="l00249"></a>00249 {
+<a name="l00250"></a>00250
+<a name="l00251"></a>00251 <span class="keyword">template</span>
+<a name="l00252"></a>00252 <
+<a name="l00253"></a>00253 <span class="keyword">typename</span> Tag1, <span class="keyword">typename</span> Tag2,
+<a name="l00254"></a>00254 <span class="keywordtype">bool</span> IsMulti1, <span class="keywordtype">bool</span> IsMulti2,
+<a name="l00255"></a>00255 <span class="keyword">typename</span> Geometry1,
+<a name="l00256"></a>00256 <span class="keyword">typename</span> Geometry2,
+<a name="l00257"></a>00257 std::size_t DimensionCount
+<a name="l00258"></a>00258 >
+<a name="l00259"></a>00259 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>
+<a name="l00260"></a>00260 {};
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262
+<a name="l00263"></a>00263 <span class="keyword">template</span> <<span class="keyword">typename</span> P1, <span class="keyword">typename</span> P2, std::<span class="keywordtype">size_t</span> DimensionCount>
+<a name="l00264"></a>00264 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a><point_tag, point_tag, false, false, P1, P2, DimensionCount>
+<a name="l00265"></a>00265 : ggl::detail::not_
+<a name="l00266"></a>00266 <
+<a name="l00267"></a>00267 P1,
+<a name="l00268"></a>00268 P2,
+<a name="l00269"></a>00269 detail::disjoint::point_point<P1, P2, 0, DimensionCount>
+<a name="l00270"></a>00270 >
+<a name="l00271"></a>00271 {};
+<a name="l00272"></a>00272
+<a name="l00273"></a>00273
+<a name="l00274"></a>00274 <span class="keyword">template</span> <<span class="keyword">typename</span> Box1, <span class="keyword">typename</span> Box2, std::<span class="keywordtype">size_t</span> DimensionCount>
+<a name="l00275"></a>00275 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a><box_tag, box_tag, false, false, Box1, Box2, DimensionCount>
+<a name="l00276"></a>00276 : detail::<a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>::box_box<Box1, Box2, 0, DimensionCount>
+<a name="l00277"></a>00277 {};
+<a name="l00278"></a>00278
+<a name="l00279"></a>00279
+<a name="l00280"></a>00280 <span class="keyword">template</span> <<span class="keyword">typename</span> Ring1, <span class="keyword">typename</span> Ring2>
+<a name="l00281"></a>00281 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a><ring_tag, ring_tag, false, false, Ring1, Ring2, 2>
+<a name="l00282"></a>00282 : detail::<a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>::ring_ring<Ring1, Ring2>
+<a name="l00283"></a>00283 {};
<a name="l00284"></a>00284
-<a name="l00294"></a>00294 <span class="keyword">template</span> <<span class="keyword">typename</span> Geometry1, <span class="keyword">typename</span> Geometry2>
-<a name="l00295"></a><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5">00295</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>(Geometry1 <span class="keyword">const</span>& geometry1, Geometry2 <span class="keyword">const</span>& geometry2)
-<a name="l00296"></a>00296 {
-<a name="l00297"></a>00297 <a class="code" href="group__concepts.html#g3913efc5e63c4c6d355cda06a3422470" title="Checks, in compile-time, the concept of two geometries, and if they have equal dimensions...">concept::check_concepts_and_equal_dimensions</a>
-<a name="l00298"></a>00298 <
-<a name="l00299"></a>00299 <span class="keyword">const</span> Geometry1,
-<a name="l00300"></a>00300 <span class="keyword">const</span> Geometry2
-<a name="l00301"></a>00301 >();
-<a name="l00302"></a>00302
-<a name="l00303"></a>00303
-<a name="l00304"></a>00304 <span class="keywordflow">return</span> <a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">dispatch::equals</a>
-<a name="l00305"></a>00305 <
-<a name="l00306"></a>00306 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry1>::type</a>,
-<a name="l00307"></a>00307 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry2>::type</a>,
-<a name="l00308"></a>00308 <a class="code" href="structggl_1_1is__multi.html" title="Meta-function defining &quot;true&quot; for multi geometries (multi_point, etc).">is_multi<Geometry1>::type::value</a>,
-<a name="l00309"></a>00309 <a class="code" href="structggl_1_1is__multi.html" title="Meta-function defining &quot;true&quot; for multi geometries (multi_point, etc).">is_multi<Geometry2>::type::value</a>,
-<a name="l00310"></a>00310 Geometry1,
-<a name="l00311"></a>00311 Geometry2,
-<a name="l00312"></a>00312 <a class="code" href="structggl_1_1dimension.html" title="Meta-function which defines coordinate dimensions, i.e. the number of axes of any...">dimension<Geometry1>::type::value</a>
-<a name="l00313"></a>00313 >::apply(geometry1, geometry2);
-<a name="l00314"></a>00314 }
-<a name="l00315"></a>00315
-<a name="l00316"></a>00316 } <span class="comment">// namespace ggl</span>
-<a name="l00317"></a>00317
-<a name="l00318"></a>00318 <span class="preprocessor">#endif // GGL_ALGORITHMS_EQUALS_HPP</span>
-<a name="l00319"></a>00319 <span class="preprocessor"></span>
+<a name="l00285"></a>00285 <span class="keyword">template</span> <<span class="keyword">typename</span> Polygon1, <span class="keyword">typename</span> Polygon2>
+<a name="l00286"></a>00286 <span class="keyword">struct </span><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a><polygon_tag, polygon_tag, false, false, Polygon1, Polygon2, 2>
+<a name="l00287"></a>00287 : detail::<a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>::polygon_polygon<Polygon1, Polygon2>
+<a name="l00288"></a>00288 {};
+<a name="l00289"></a>00289
+<a name="l00290"></a>00290 } <span class="comment">// namespace dispatch</span>
+<a name="l00291"></a>00291 <span class="preprocessor">#endif // DOXYGEN_NO_DISPATCH</span>
+<a name="l00292"></a>00292 <span class="preprocessor"></span>
+<a name="l00293"></a>00293
+<a name="l00303"></a>00303 <span class="keyword">template</span> <<span class="keyword">typename</span> Geometry1, <span class="keyword">typename</span> Geometry2>
+<a name="l00304"></a><a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5">00304</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">equals</a>(Geometry1 <span class="keyword">const</span>& geometry1, Geometry2 <span class="keyword">const</span>& geometry2)
+<a name="l00305"></a>00305 {
+<a name="l00306"></a>00306 <a class="code" href="group__concepts.html#g3913efc5e63c4c6d355cda06a3422470" title="Checks, in compile-time, the concept of two geometries, and if they have equal dimensions...">concept::check_concepts_and_equal_dimensions</a>
+<a name="l00307"></a>00307 <
+<a name="l00308"></a>00308 <span class="keyword">const</span> Geometry1,
+<a name="l00309"></a>00309 <span class="keyword">const</span> Geometry2
+<a name="l00310"></a>00310 >();
+<a name="l00311"></a>00311
+<a name="l00312"></a>00312
+<a name="l00313"></a>00313 <span class="keywordflow">return</span> <a class="code" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">dispatch::equals</a>
+<a name="l00314"></a>00314 <
+<a name="l00315"></a>00315 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry1>::type</a>,
+<a name="l00316"></a>00316 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry2>::type</a>,
+<a name="l00317"></a>00317 <a class="code" href="structggl_1_1is__multi.html" title="Meta-function defining &quot;true&quot; for multi geometries (multi_point, etc).">is_multi<Geometry1>::type::value</a>,
+<a name="l00318"></a>00318 <a class="code" href="structggl_1_1is__multi.html" title="Meta-function defining &quot;true&quot; for multi geometries (multi_point, etc).">is_multi<Geometry2>::type::value</a>,
+<a name="l00319"></a>00319 Geometry1,
+<a name="l00320"></a>00320 Geometry2,
+<a name="l00321"></a>00321 <a class="code" href="structggl_1_1dimension.html" title="Meta-function which defines coordinate dimensions, i.e. the number of axes of any...">dimension<Geometry1>::type::value</a>
+<a name="l00322"></a>00322 >::apply(geometry1, geometry2);
+<a name="l00323"></a>00323 }
+<a name="l00324"></a>00324
+<a name="l00325"></a>00325 } <span class="comment">// namespace ggl</span>
+<a name="l00326"></a>00326
+<a name="l00327"></a>00327 <span class="preprocessor">#endif // GGL_ALGORITHMS_EQUALS_HPP</span>
+<a name="l00328"></a>00328 <span class="preprocessor"></span>
</pre></div></div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/files.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/files.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/files.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -234,12 +234,6 @@
<tr><td class="indexkey">c:/svn/ggl/formal_review/boost/ggl/util/<a class="el" href="select__coordinate__type_8hpp.html">select_coordinate_type.hpp</a> [code]</td><td class="indexvalue"></td></tr>
<tr><td class="indexkey">c:/svn/ggl/formal_review/boost/ggl/util/<a class="el" href="select__most__precise_8hpp.html">select_most_precise.hpp</a> [code]</td><td class="indexvalue"></td></tr>
<tr><td class="indexkey">c:/svn/ggl/formal_review/boost/ggl/util/<a class="el" href="write__dsv_8hpp.html">write_dsv.hpp</a> [code]</td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey">c:/svn/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/<a class="el" href="doxygen__a__design__rationale_8hpp.html">doxygen_a_design_rationale.hpp</a> [code]</td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey">c:/svn/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/<a class="el" href="doxygen__c__strategy__rationale_8hpp.html">doxygen_c_strategy_rationale.hpp</a> [code]</td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey">c:/svn/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/<a class="el" href="doxygen__examples_8hpp.html">doxygen_examples.hpp</a> [code]</td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey">c:/svn/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/<a class="el" href="doxygen__mainpage_8hpp.html">doxygen_mainpage.hpp</a> [code]</td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey">c:/svn/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/<a class="el" href="doxygen__pages_8hpp.html">doxygen_pages.hpp</a> [code]</td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey">c:/svn/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/<a class="el" href="doxygen__z__article09_8hpp.html">doxygen_z_article09.hpp</a> [code]</td><td class="indexvalue"></td></tr>
</table>
</div>
<hr size="1">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_0x66.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_0x66.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_0x66.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -82,11 +82,8 @@
<li>first
: <a class="el" href="classggl_1_1segment.html#76c7f18dd19699ccb7353137b8981c65">ggl::segment< ConstOrNonConstPoint ></a>
<li>first_point_type
-: <a class="el" href="structggl_1_1strategy_1_1distance_1_1pythagoras.html#84efcbf2348980d157d02dbf4d517181">ggl::strategy::distance::pythagoras< Point1, Point2, CalculationType ></a>
-, <a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html#68f55117d278c0bd7d2724a5663e81c2">ggl::strategy::distance::haversine< Point1, Point2 ></a>
-<li>full()
-: <a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html#89aaf17e4a37d3caaae92ea50c206650">ggl::strategy::compare::detail::shift< degree ></a>
-, <a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html#cff2d5794ce8da0b82dcbde9b31bc9d6">ggl::strategy::compare::detail::shift< radian ></a>
+: <a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html#68f55117d278c0bd7d2724a5663e81c2">ggl::strategy::distance::haversine< Point1, Point2 ></a>
+, <a class="el" href="structggl_1_1strategy_1_1distance_1_1pythagoras.html#84efcbf2348980d157d02dbf4d517181">ggl::strategy::distance::pythagoras< Point1, Point2, CalculationType ></a>
</ul>
</div>
<hr size="1">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_0x68.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_0x68.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_0x68.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -79,9 +79,6 @@
Here is a list of all class members with links to the classes they belong to:
<p>
<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
-<li>half()
-: <a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html#7d730334d5abee1c79b70d55218254fe">ggl::strategy::compare::detail::shift< degree ></a>
-, <a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html#a9c874a9c8e2e05246b2e2ca53335fea">ggl::strategy::compare::detail::shift< radian ></a>
<li>haversine()
: <a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html#03a6614e4565a2f091637681a994c8a2">ggl::strategy::distance::haversine< Point1, Point2 ></a>
<li>how
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_func.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_func.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/functions_func.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -56,7 +56,6 @@
<li>c</li>
<li>d</li>
<li>e</li>
- <li>f</li>
<li>g</li>
<li>h</li>
<li>i</li>
@@ -175,20 +174,12 @@
<li>excess_sum()
: <a class="el" href="structggl_1_1strategy_1_1area_1_1huiller_1_1excess__sum.html#f83d5ebe51de8b53e5e8428a4ac3b7fe">ggl::strategy::area::huiller< PointOfSegment, CalculationType >::excess_sum</a>
</ul>
-<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
-<li>full()
-: <a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html#89aaf17e4a37d3caaae92ea50c206650">ggl::strategy::compare::detail::shift< degree ></a>
-, <a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html#cff2d5794ce8da0b82dcbde9b31bc9d6">ggl::strategy::compare::detail::shift< radian ></a>
-</ul>
<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
<li>get()
: <a class="el" href="structggl_1_1traits_1_1access_3_01ggl_1_1detail_1_1intersection_1_1intersection__point_3_01_p_01_4_00_01_dimension_01_4.html#82a62232a7a2092e0a3850771871e9ee">ggl::traits::access< ggl::detail::intersection::intersection_point< P >, Dimension ></a>
, <a class="el" href="classggl_1_1point.html#1feea795639ff3f2d985cc9ca32d2f9e">ggl::point< T, D, C ></a>
</ul>
<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
-<li>half()
-: <a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html#7d730334d5abee1c79b70d55218254fe">ggl::strategy::compare::detail::shift< degree ></a>
-, <a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html#a9c874a9c8e2e05246b2e2ca53335fea">ggl::strategy::compare::detail::shift< radian ></a>
<li>haversine()
: <a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html#03a6614e4565a2f091637681a994c8a2">ggl::strategy::distance::haversine< Point1, Point2 ></a>
<li>huiller()
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__compare.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__compare.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__compare.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -49,12 +49,29 @@
<tr><td class="mdescLeft"> </td><td class="mdescRight">Less functor, to sort points in ascending order. More...<br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Useful for:<ul>
-<li>std::map (use ggl::less<P>)</li><li>std::sort (use ggl::less<P> or ggl::greater<P> or ggl::less<P, 1>)</li><li>std::unique_copy (use <a class="el" href="group__equals.html#g122b1fd835cee0742da7c97dfdda94c5" title="Detect if two geometries are spatially equal.">ggl::equals<P></a>)</li></ul>
+The compare policies enable to compare points in a way that they can be compared in many functions of the standard library.<p>
+The functors do have an optional second template argument, <b>dimension</b>. If dimension is specified, comparison is only done on that dimension.<p>
+This is useful for (a.o.):<ul>
+<li>std::sort (use ggl::less<P> or ggl::greater<P> or ggl::less<P, 1>)</li><li>std::map (use ggl::less<P>)</li><li>std::unique_copy (use ggl::equal_to<P>)</li></ul>
<p>
<dl class="user" compact><dt><b>Geometries:</b></dt><dd><ul>
<li><b>point</b> </li></ul>
</dd></dl>
+<dl class="user" compact><dt><b>Example:</b></dt><dd>Example showing how <a class="el" href="structggl_1_1less.html" title="Less functor, to sort points in ascending order.">ggl::less</a> can be used <div class="fragment"><pre class="fragment">{
+ <span class="keyword">typedef</span> boost::tuple<double, double> P;
+ std::vector<P> line;
+ line.push_back(boost::make_tuple(8.1, 1.9));
+ line.push_back(boost::make_tuple(4.2, 7.5));
+ line.push_back(boost::make_tuple(2.3, 3.6));
+ std::sort(line.begin(), line.end(), <a class="code" href="structggl_1_1less.html" title="Less functor, to sort points in ascending order.">ggl::less<P></a>());
+
+ <span class="comment">// Display ordered points</span>
+ BOOST_FOREACH(P <span class="keyword">const</span>& p, line)
+ {
+ std::cout << <a class="code" href="group__utility.html#g9419e5dd6f98468153ca14a35763bfd7" title="Main DSV-streaming function.">ggl::dsv</a>(p) << std::endl;
+ }
+</pre></div></dd></dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>There is a boolean function <a class="el" href="group__equals.html">equals</a> as well, which returns true or false if a geometry is spatially equal to another geometry. That one is defined for OGC compatibility, while these ones are defined for compatibility with the std:: library. These ones are functors, operating on the same geometry type (currently only the point-type), the equals function is a free function operating on different point types or even different geometry types (a linestring can be spatially equal to a multi-linestring). </dd></dl>
</div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__equals.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__equals.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__equals.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -44,9 +44,11 @@
<tr><td class="mdescLeft"> </td><td class="mdescRight">Detect if two geometries are spatially equal. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
+Equals returns true if geometries are spatially equal. Spatially equal means including the same point-set. A linestring can be spatially equal to another linestring, even if both do not have the same amount of points. A polygon can be spatially equal to a multi-polygon (which then has only one element).<p>
<dl class="user" compact><dt><b>Geometries:</b></dt><dd><ul>
<li><b>point</b> + <b>point</b> </li><li><b>box</b> + <b>box</b> </li></ul>
</dd></dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>There is a functor <a class="el" href="group__compare.html">compare</a> as well, which can be used for std:: library compatibility. </dd></dl>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g122b1fd835cee0742da7c97dfdda94c5"></a><!-- doxytag: member="ggl::equals" ref="g122b1fd835cee0742da7c97dfdda94c5" args="(Geometry1 const &geometry1, Geometry2 const &geometry2)" -->
<div class="memitem">
@@ -93,7 +95,7 @@
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if geometries are spatially equal, else false </dd></dl>
<dl compact><dt><b>Examples: </b></dt><dd>
<a class="el" href="07__graph__route__example_8cpp-example.html#a6">07_graph_route_example.cpp</a>.</dl>
-<p>Definition at line <a class="el" href="equals_8hpp_source.html#l00295">295</a> of file <a class="el" href="equals_8hpp_source.html">equals.hpp</a>.</p>
+<p>Definition at line <a class="el" href="equals_8hpp_source.html#l00304">304</a> of file <a class="el" href="equals_8hpp_source.html">equals.hpp</a>.</p>
</div>
</div><p>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__for__each.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__for__each.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__for__each.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -37,8 +37,192 @@
<div class="contents">
<h1>for_each: apply a functor to each point or segment of a geometry</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g66bf40f0ee4dc883d9d3b621aeb2e81d">ggl::for_each_point</a> (Geometry &geometry, Functor f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f">ggl::for_each_point</a> (Geometry const &geometry, Functor f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g529f5655aa7702e9f143263b484ff91b">ggl::for_each_segment</a> (Geometry &geometry, Functor f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e">ggl::for_each_segment</a> (Geometry const &geometry, Functor f)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
There are two algorithms provided which walk through the points or segments of linestrings and polygons. They are called for_each_point, for_each_segment, after the standard library <dl class="note" compact><dt><b>Note:</b></dt><dd>For both for_each algorithms there is a <b>const</b> and a non-const version provided. </dd></dl>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g0cdb7f23bf7395ba3f385e9cf01a601f"></a><!-- doxytag: member="ggl::for_each_point" ref="g0cdb7f23bf7395ba3f385e9cf01a601f" args="(Geometry const &geometry, Functor f)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Geometry , typename Functor > </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">Functor ggl::for_each_point </td>
+ <td>(</td>
+ <td class="paramtype">Geometry const & </td>
+ <td class="paramname"> <em>geometry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Functor </td>
+ <td class="paramname"> <em>f</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Calls functor for geometry.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to loop through </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>functor to use Calls the functor the specified <b>const</b> geometry </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="02__linestring__example_8cpp-example.html#a13">02_linestring_example.cpp</a>.</dl>
+<p>Definition at line <a class="el" href="algorithms_2for__each_8hpp_source.html#l00269">269</a> of file <a class="el" href="algorithms_2for__each_8hpp_source.html">for_each.hpp</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g66bf40f0ee4dc883d9d3b621aeb2e81d"></a><!-- doxytag: member="ggl::for_each_point" ref="g66bf40f0ee4dc883d9d3b621aeb2e81d" args="(Geometry &geometry, Functor f)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Geometry , typename Functor > </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">Functor ggl::for_each_point </td>
+ <td>(</td>
+ <td class="paramtype">Geometry & </td>
+ <td class="paramname"> <em>geometry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Functor </td>
+ <td class="paramname"> <em>f</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Calls functor for geometry.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to loop through </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>functor to use Calls the functor for the specified geometry </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithms_2for__each_8hpp_source.html#l00292">292</a> of file <a class="el" href="algorithms_2for__each_8hpp_source.html">for_each.hpp</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="ge8453eab0e9db146184d7ccef687a33e"></a><!-- doxytag: member="ggl::for_each_segment" ref="ge8453eab0e9db146184d7ccef687a33e" args="(Geometry const &geometry, Functor f)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Geometry , typename Functor > </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">Functor ggl::for_each_segment </td>
+ <td>(</td>
+ <td class="paramtype">Geometry const & </td>
+ <td class="paramname"> <em>geometry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Functor </td>
+ <td class="paramname"> <em>f</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Calls functor for segments on linestrings, rings, polygons, ...
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to loop through </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>functor to use Calls the functor all <b>const</b> segments of the specified <b>const</b> geometry </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithms_2for__each_8hpp_source.html#l00316">316</a> of file <a class="el" href="algorithms_2for__each_8hpp_source.html">for_each.hpp</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g529f5655aa7702e9f143263b484ff91b"></a><!-- doxytag: member="ggl::for_each_segment" ref="g529f5655aa7702e9f143263b484ff91b" args="(Geometry &geometry, Functor f)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Geometry , typename Functor > </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">Functor ggl::for_each_segment </td>
+ <td>(</td>
+ <td class="paramtype">Geometry & </td>
+ <td class="paramname"> <em>geometry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Functor </td>
+ <td class="paramname"> <em>f</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Calls functor for segments on linestrings, rings, polygons, ...
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to loop through </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>functor to use Calls the functor all segments of the specified geometry </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithms_2for__each_8hpp_source.html#l00339">339</a> of file <a class="el" href="algorithms_2for__each_8hpp_source.html">for_each.hpp</a>.</p>
+
+</div>
+</div><p>
</div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__overlay.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__overlay.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__overlay.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -65,12 +65,64 @@
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__overlay.html#gc1dcd7471f802810f7d48b36eea24d0f">ggl::merge_intersection_points</a> (IntersectionPoints &intersection_points)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Merges intersection points such that points at the same location will be merged, having one <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> and their info-records appended. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry > </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__overlay.html#ge415174744cad8935889144cc286a0fb">ggl::point_on_border</a> (Geometry const &geometry, typename point_type< Geometry >::type &point)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on a border. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename GeometryOut , typename Geometry1 , typename Geometry2 , typename IntersectionPoints , typename OutputIterator > </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__overlay.html#g05c8da6bfcd1aa911c5520ac991fdc0d">ggl::traverse</a> (Geometry1 const &geometry1, Geometry2 const &geometry2, int direction, IntersectionPoints &intersection_points, bool trivial, OutputIterator out)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Traverses through intersection points / geometries. <br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
+<a class="anchor" name="ge415174744cad8935889144cc286a0fb"></a><!-- doxytag: member="ggl::point_on_border" ref="ge415174744cad8935889144cc286a0fb" args="(Geometry const &geometry, typename point_type< Geometry >::type &point)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Geometry > </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool ggl::point_on_border </td>
+ <td>(</td>
+ <td class="paramtype">Geometry const & </td>
+ <td class="paramname"> <em>geometry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename point_type< Geometry >::type & </td>
+ <td class="paramname"> <em>point</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on a border.
+<p>
+<dl compact><dt><b>Template Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>Geometry</em> </td><td>geometry type </td></tr>
+ </table>
+</dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> from </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a></em> </td><td></td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE if successful, else false. It is only false if polygon/line have no points </dd></dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>for a <a class="el" href="classggl_1_1polygon.html" title="The polygon contains an outer ring and zero or more inner rings.">polygon</a>, it is always a <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on the exterior ring </dd></dl>
+
+<p>Definition at line <a class="el" href="point__on__border_8hpp_source.html#l00153">153</a> of file <a class="el" href="point__on__border_8hpp_source.html">point_on_border.hpp</a>.</p>
+
+</div>
+</div><p>
<a class="anchor" name="g72698a9e6c8319f77d1481537096c890"></a><!-- doxytag: member="ggl::copy_segments" ref="g72698a9e6c8319f77d1481537096c890" args="(Geometry const &geometry, SegmentIdentifier const &seg_id, int to_index, RangeOut &range_out)" -->
<div class="memitem">
<div class="memproto">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__utility.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__utility.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/group__utility.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -87,16 +87,17 @@
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__utility.html#geda38de76b567b170a5c9cadbe660311">ggl::math::hav</a> (T const &theta)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculates the haversine of an angle. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__utility.html#ge415174744cad8935889144cc286a0fb">ggl::point_on_border</a> (Geometry const &geometry, typename point_type< Geometry >::type &point)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on a border. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename T > </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__utility.html#gc23ed0ce6b779976def3d4b3d633d337">ggl::math::sqr</a> (T const &value)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Short utility to return the square. <br></td></tr>
</table>
-<hr><h2>Function Documentation</h2>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The utilities, mostly in folder util, contain several headerfiles not fitting in one of the other folders.<p>
+The following meta-functions are general and do not relate to GGL:<ul>
+<li>add_const_if_c</li><li>range_iterator_const_if_c</li><li>select_most_precise</li></ul>
+<p>
+They might fit into boost as a separate trait or utility, or there might be a Boost equivalent which is yet unnoticed by the authors. <hr><h2>Function Documentation</h2>
<a class="anchor" name="ga43456dff55af2757deaf0168f02b899"></a><!-- doxytag: member="ggl::assert_dimension" ref="ga43456dff55af2757deaf0168f02b899" args="()" -->
<div class="memitem">
<div class="memproto">
@@ -172,54 +173,6 @@
</div>
</div><p>
-<a class="anchor" name="ge415174744cad8935889144cc286a0fb"></a><!-- doxytag: member="ggl::point_on_border" ref="ge415174744cad8935889144cc286a0fb" args="(Geometry const &geometry, typename point_type< Geometry >::type &point)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Geometry > </div>
- <table class="memname">
- <tr>
- <td class="memname">bool ggl::point_on_border </td>
- <td>(</td>
- <td class="paramtype">Geometry const & </td>
- <td class="paramname"> <em>geometry</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">typename point_type< Geometry >::type & </td>
- <td class="paramname"> <em>point</em></td><td> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-
-<p>
-Take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on a border.
-<p>
-<dl compact><dt><b>Template Parameters:</b></dt><dd>
- <table border="0" cellspacing="2" cellpadding="0">
- <tr><td valign="top"></td><td valign="top"><em>Geometry</em> </td><td>geometry type </td></tr>
- </table>
-</dl>
-<dl compact><dt><b>Parameters:</b></dt><dd>
- <table border="0" cellspacing="2" cellpadding="0">
- <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> from </td></tr>
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a></em> </td><td></td></tr>
- </table>
-</dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE if successful, else false. It is only false if polygon/line have no points </dd></dl>
-<dl class="note" compact><dt><b>Note:</b></dt><dd>for a <a class="el" href="classggl_1_1polygon.html" title="The polygon contains an outer ring and zero or more inner rings.">polygon</a>, it is always a <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on the exterior ring </dd></dl>
-
-<p>Definition at line <a class="el" href="point__on__border_8hpp_source.html#l00153">153</a> of file <a class="el" href="point__on__border_8hpp_source.html">point_on_border.hpp</a>.</p>
-
-</div>
-</div><p>
<a class="anchor" name="g99e0a8eac282cd44fbdb1a47666ea084"></a><!-- doxytag: member="ggl::as_range" ref="g99e0a8eac282cd44fbdb1a47666ea084" args="(Geometry &input)" -->
<div class="memitem">
<div class="memproto">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/hierarchy.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/hierarchy.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/hierarchy.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -157,9 +157,6 @@
<li><a class="el" href="classggl_1_1strategy_1_1centroid___1_1bashein__detmer.html">ggl::strategy::centroid_::bashein_detmer< Point, PointOfSegment, CalculationType ></a>
<li><a class="el" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html">ggl::strategy::compare::circular_comparator< CoordinateType, Units, Compare ></a>
<li><a class="el" href="structggl_1_1strategy_1_1compare_1_1default__strategy.html">ggl::strategy::compare::default_strategy</a>
-<li><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift.html">ggl::strategy::compare::detail::shift< Units ></a>
-<li><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01degree_01_4.html">ggl::strategy::compare::detail::shift< degree ></a>
-<li><a class="el" href="structggl_1_1strategy_1_1compare_1_1detail_1_1shift_3_01radian_01_4.html">ggl::strategy::compare::detail::shift< radian ></a>
<li><a class="el" href="classggl_1_1strategy_1_1convex__hull_1_1graham__andrew.html">ggl::strategy::convex_hull::graham_andrew< InputGeometry, OutputPoint ></a>
<li><a class="el" href="classggl_1_1strategy_1_1distance_1_1cross__track.html">ggl::strategy::distance::cross_track< Point, PointOfSegment ></a>
<li><a class="el" href="classggl_1_1strategy_1_1distance_1_1haversine.html">ggl::strategy::distance::haversine< Point1, Point2 ></a>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/index.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/index.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/index.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -45,7 +45,7 @@
Distributed under the Boost Software License, Version 1.0.<br>
(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </em><h2><a class="anchor" name="intro">
Introduction</a></h2>
-The Generic Geometry Library, GGL (currently in "Formal Review Request") defines <a class="el" href="group__concepts.html">concepts</a> for geometries and implements some algorithms on such geometries.<p>
+The Generic Geometry Library, GGL, currently in <b>Formal</b> <b>Review</b>, defines <a class="el" href="group__concepts.html">concepts</a> for geometries and implements some algorithms on such geometries.<p>
GGL contains a dimension-agnostic, coordinate-system-agnostic and scalable kernel, based on concepts, meta-functions and tag- dispatching. On top of that kernel, algorithms are built: area, length, perimeter, centroid, convex hull, intersection (clipping), within (point in polygon), distance, envelope (bounding box), simplify, transform, convert, and more. The library is also designed to support high precision arithmetic numbers, such as GMP.<p>
GGL contains instantiable geometry classes, but library users can also use their own. Using registration macros or traits classes their geometries can be adapted to fulfil the GGL-concepts.<p>
The GGL might be used in all domains where geometry plays a role: mapping and GIS, gaming, computer graphics and widgets, robotics, astronomy... The core is designed to be as generic as possible and support those domains. However, for now the development has been mostly GIS-oriented.<p>
@@ -53,8 +53,9 @@
The library follows existing conventions:<ul>
<li>conventions from boost</li><li>conventions from the std library</li><li>conventions and names from one of the OGC standards on Geometry</li></ul>
<p>
-This Generic Geometry Library (<a class="el" href="namespaceggl.html">ggl</a>) is now being proposed to the Boost Library Collection<p>
-The library can be downloaded from the Boost Sandbox, go to the <a class="el" href="download.html">Download page</a> for more information.<h2><a class="anchor" name="quickstart">
+This Generic Geometry Library (<a class="el" href="namespaceggl.html">ggl</a>) is now being reviewed by the Boost Community<p>
+The library can be downloaded from the Boost Sandbox, go to the <a class="el" href="download.html">Download page</a> for more information.<p>
+A (recently started) GGL Wiki is here: http://trac.osgeo.org/ggl/wiki<h2><a class="anchor" name="quickstart">
Quick start</a></h2>
It is not possible to show the whole library at a glance. A few very small examples are shown below.<p>
It should be possible to use a very small part of the library, for example only the distance between two points.<p>
@@ -86,7 +87,7 @@
<a class="code" href="group__access.html#g8048129c97cd540dc75d9040d8d95c0e" title="assign two values to a 2D point">assign</a>(r2, 200, 300, 220, 320);
}
</pre></div><p>
-Many more examples are on the page <b>Examples</b> </div>
+More examples are on the page <b>Examples</b> </div>
<hr size="1">
<table width="100%">
<tbody>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/multi_2algorithms_2for__each_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/multi_2algorithms_2for__each_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/multi_2algorithms_2for__each_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -113,7 +113,7 @@
<a name="l00072"></a>00072 <span class="keyword">typename</span> Functor,
<a name="l00073"></a>00073 <span class="keywordtype">bool</span> IsConst
<a name="l00074"></a>00074 >
-<a name="l00075"></a>00075 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><MultiTag, true, MultiGeometry, Functor, IsConst>
+<a name="l00075"></a>00075 <span class="keyword">struct </span><a class="code" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f" title="Calls functor for geometry.">for_each_point</a><MultiTag, true, MultiGeometry, Functor, IsConst>
<a name="l00076"></a>00076 : detail::for_each::for_each_multi
<a name="l00077"></a>00077 <
<a name="l00078"></a>00078 MultiGeometry,
@@ -139,7 +139,7 @@
<a name="l00098"></a>00098 <span class="keyword">typename</span> Functor,
<a name="l00099"></a>00099 <span class="keywordtype">bool</span> IsConst
<a name="l00100"></a>00100 >
-<a name="l00101"></a>00101 <span class="keyword">struct </span><a class="code" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><MultiTag, true, MultiGeometry, Functor, IsConst>
+<a name="l00101"></a>00101 <span class="keyword">struct </span><a class="code" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e" title="Calls functor for segments on linestrings, rings, polygons, ...">for_each_segment</a><MultiTag, true, MultiGeometry, Functor, IsConst>
<a name="l00102"></a>00102 : detail::for_each::for_each_multi
<a name="l00103"></a>00103 <
<a name="l00104"></a>00104 MultiGeometry,
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaceggl.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaceggl.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaceggl.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -514,24 +514,24 @@
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#578a218a60843891321b599d222090db">for_each_coordinate</a> (Point &<a class="el" href="classggl_1_1point.html">point</a>, Op operation)</td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#66bf40f0ee4dc883d9d3b621aeb2e81d">for_each_point</a> (Geometry &geometry, Functor f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g66bf40f0ee4dc883d9d3b621aeb2e81d">for_each_point</a> (Geometry &geometry, Functor f)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f">for_each_point</a> (Geometry const &geometry, Functor f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f">for_each_point</a> (Geometry const &geometry, Functor f)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for geometry. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Actor > </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#a609a2b887fc937c5c16ead5058a3bcc">for_each_range</a> (Geometry const &geometry, Actor &actor)</td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#529f5655aa7702e9f143263b484ff91b">for_each_segment</a> (Geometry &geometry, Functor f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#g529f5655aa7702e9f143263b484ff91b">for_each_segment</a> (Geometry &geometry, Functor f)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Functor > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e">for_each_segment</a> (Geometry const &geometry, Functor f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Functor </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e">for_each_segment</a> (Geometry const &geometry, Functor f)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Calls functor for segments on linestrings, rings, polygons, ... <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<std::size_t Dimension, typename Geometry > </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="structggl_1_1coordinate__type.html">coordinate_type</a>< Geometry >::type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__access.html#gce53c5555841f90ccf60767c26e20499">get</a> (Geometry const &geometry)</td></tr>
@@ -665,9 +665,9 @@
<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculate perimeter of a geometry. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__utility.html#ge415174744cad8935889144cc286a0fb">point_on_border</a> (Geometry const &geometry, typename <a class="el" href="structggl_1_1point__type.html">point_type</a>< Geometry >::type &<a class="el" href="classggl_1_1point.html">point</a>)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__overlay.html#ge415174744cad8935889144cc286a0fb">point_on_border</a> (Geometry const &geometry, typename <a class="el" href="structggl_1_1point__type.html">point_type</a>< Geometry >::type &<a class="el" href="classggl_1_1point.html">point</a>)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on a border. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on a border. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry , typename Sections > </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__sectionalize.html#g94c69212e1ba4829515eb5a31acd29e1">sectionalize</a> (Geometry const &geometry, Sections &<a class="el" href="structggl_1_1sections.html">sections</a>)</td></tr>
@@ -1085,171 +1085,6 @@
</div>
</div><p>
-<a class="anchor" name="0cdb7f23bf7395ba3f385e9cf01a601f"></a><!-- doxytag: member="ggl::for_each_point" ref="0cdb7f23bf7395ba3f385e9cf01a601f" args="(Geometry const &geometry, Functor f)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Geometry , typename Functor > </div>
- <table class="memname">
- <tr>
- <td class="memname">Functor ggl::for_each_point </td>
- <td>(</td>
- <td class="paramtype">Geometry const & </td>
- <td class="paramname"> <em>geometry</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">Functor </td>
- <td class="paramname"> <em>f</em></td><td> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-
-<p>
-Calls functor for geometry.
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
- <table border="0" cellspacing="2" cellpadding="0">
- <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to loop through </td></tr>
- <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>functor to use Calls the functor the specified <b>const</b> geometry </td></tr>
- </table>
-</dl>
-<dl compact><dt><b>Examples: </b></dt><dd>
-<a class="el" href="02__linestring__example_8cpp-example.html#a13">02_linestring_example.cpp</a>.</dl>
-<p>Definition at line <a class="el" href="algorithms_2for__each_8hpp_source.html#l00269">269</a> of file <a class="el" href="algorithms_2for__each_8hpp_source.html">for_each.hpp</a>.</p>
-
-</div>
-</div><p>
-<a class="anchor" name="66bf40f0ee4dc883d9d3b621aeb2e81d"></a><!-- doxytag: member="ggl::for_each_point" ref="66bf40f0ee4dc883d9d3b621aeb2e81d" args="(Geometry &geometry, Functor f)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Geometry , typename Functor > </div>
- <table class="memname">
- <tr>
- <td class="memname">Functor ggl::for_each_point </td>
- <td>(</td>
- <td class="paramtype">Geometry & </td>
- <td class="paramname"> <em>geometry</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">Functor </td>
- <td class="paramname"> <em>f</em></td><td> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-
-<p>
-Calls functor for geometry.
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
- <table border="0" cellspacing="2" cellpadding="0">
- <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to loop through </td></tr>
- <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>functor to use Calls the functor for the specified geometry </td></tr>
- </table>
-</dl>
-
-<p>Definition at line <a class="el" href="algorithms_2for__each_8hpp_source.html#l00292">292</a> of file <a class="el" href="algorithms_2for__each_8hpp_source.html">for_each.hpp</a>.</p>
-
-</div>
-</div><p>
-<a class="anchor" name="e8453eab0e9db146184d7ccef687a33e"></a><!-- doxytag: member="ggl::for_each_segment" ref="e8453eab0e9db146184d7ccef687a33e" args="(Geometry const &geometry, Functor f)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Geometry , typename Functor > </div>
- <table class="memname">
- <tr>
- <td class="memname">Functor ggl::for_each_segment </td>
- <td>(</td>
- <td class="paramtype">Geometry const & </td>
- <td class="paramname"> <em>geometry</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">Functor </td>
- <td class="paramname"> <em>f</em></td><td> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-
-<p>
-Calls functor for segments on linestrings, rings, polygons, ...
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
- <table border="0" cellspacing="2" cellpadding="0">
- <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to loop through </td></tr>
- <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>functor to use Calls the functor all <b>const</b> segments of the specified <b>const</b> geometry </td></tr>
- </table>
-</dl>
-
-<p>Definition at line <a class="el" href="algorithms_2for__each_8hpp_source.html#l00316">316</a> of file <a class="el" href="algorithms_2for__each_8hpp_source.html">for_each.hpp</a>.</p>
-
-</div>
-</div><p>
-<a class="anchor" name="529f5655aa7702e9f143263b484ff91b"></a><!-- doxytag: member="ggl::for_each_segment" ref="529f5655aa7702e9f143263b484ff91b" args="(Geometry &geometry, Functor f)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Geometry , typename Functor > </div>
- <table class="memname">
- <tr>
- <td class="memname">Functor ggl::for_each_segment </td>
- <td>(</td>
- <td class="paramtype">Geometry & </td>
- <td class="paramname"> <em>geometry</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">Functor </td>
- <td class="paramname"> <em>f</em></td><td> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-
-<p>
-Calls functor for segments on linestrings, rings, polygons, ...
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
- <table border="0" cellspacing="2" cellpadding="0">
- <tr><td valign="top"></td><td valign="top"><em>geometry</em> </td><td>geometry to loop through </td></tr>
- <tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>functor to use Calls the functor all segments of the specified geometry </td></tr>
- </table>
-</dl>
-
-<p>Definition at line <a class="el" href="algorithms_2for__each_8hpp_source.html#l00339">339</a> of file <a class="el" href="algorithms_2for__each_8hpp_source.html">for_each.hpp</a>.</p>
-
-</div>
-</div><p>
<a class="anchor" name="55512df81f94e5813af9bec903dcf8a6"></a><!-- doxytag: member="ggl::make" ref="55512df81f94e5813af9bec903dcf8a6" args="(T const &c1, T const &c2, T const &c3, T const &c4)" -->
<div class="memitem">
<div class="memproto">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaceggl_1_1strategy_1_1compare.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaceggl_1_1strategy_1_1compare.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaceggl_1_1strategy_1_1compare.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -45,9 +45,6 @@
<div class="contents">
<h1>ggl::strategy::compare Namespace Reference</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceggl_1_1strategy_1_1compare_1_1detail.html">detail</a></td></tr>
-
<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structggl_1_1strategy_1_1compare_1_1circular__comparator.html">circular_comparator</a></td></tr>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespacemembers.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespacemembers.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespacemembers.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -177,11 +177,11 @@
<li>for_each_coordinate()
: <a class="el" href="namespaceggl.html#578a218a60843891321b599d222090db">ggl</a>
<li>for_each_point()
-: <a class="el" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f">ggl</a>
+: <a class="el" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f">ggl</a>
<li>for_each_range()
: <a class="el" href="namespaceggl.html#a609a2b887fc937c5c16ead5058a3bcc">ggl</a>
<li>for_each_segment()
-: <a class="el" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e">ggl</a>
+: <a class="el" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e">ggl</a>
</ul>
<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
<li>get()
@@ -267,7 +267,7 @@
<li>point_3d
: <a class="el" href="namespaceggl.html#e7ead8472c5368638be291071e4e2a38">ggl</a>
<li>point_on_border()
-: <a class="el" href="group__utility.html#ge415174744cad8935889144cc286a0fb">ggl</a>
+: <a class="el" href="group__overlay.html#ge415174744cad8935889144cc286a0fb">ggl</a>
<li>polygon_2d
: <a class="el" href="namespaceggl.html#9b5c5324bc541d70c4ba3451be8a3365">ggl</a>
<li>polygon_3d
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespacemembers_func.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespacemembers_func.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespacemembers_func.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -163,11 +163,11 @@
<li>for_each_coordinate()
: <a class="el" href="namespaceggl.html#578a218a60843891321b599d222090db">ggl</a>
<li>for_each_point()
-: <a class="el" href="namespaceggl.html#0cdb7f23bf7395ba3f385e9cf01a601f">ggl</a>
+: <a class="el" href="group__for__each.html#g0cdb7f23bf7395ba3f385e9cf01a601f">ggl</a>
<li>for_each_range()
: <a class="el" href="namespaceggl.html#a609a2b887fc937c5c16ead5058a3bcc">ggl</a>
<li>for_each_segment()
-: <a class="el" href="namespaceggl.html#e8453eab0e9db146184d7ccef687a33e">ggl</a>
+: <a class="el" href="group__for__each.html#ge8453eab0e9db146184d7ccef687a33e">ggl</a>
</ul>
<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
<li>get()
@@ -235,7 +235,7 @@
<li>perimeter()
: <a class="el" href="group__perimeter.html#g02588697f4c401400c3007d3ff091df9">ggl</a>
<li>point_on_border()
-: <a class="el" href="group__utility.html#ge415174744cad8935889144cc286a0fb">ggl</a>
+: <a class="el" href="group__overlay.html#ge415174744cad8935889144cc286a0fb">ggl</a>
</ul>
<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
<li>sectionalize()
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaces.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaces.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/namespaces.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -52,7 +52,6 @@
<tr><td class="indexkey"><a class="el" href="namespaceggl_1_1strategy_1_1area.html">ggl::strategy::area</a></td><td class="indexvalue"></td></tr>
<tr><td class="indexkey"><a class="el" href="namespaceggl_1_1strategy_1_1centroid__.html">ggl::strategy::centroid_</a></td><td class="indexvalue"></td></tr>
<tr><td class="indexkey"><a class="el" href="namespaceggl_1_1strategy_1_1compare.html">ggl::strategy::compare</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="namespaceggl_1_1strategy_1_1compare_1_1detail.html">ggl::strategy::compare::detail</a></td><td class="indexvalue"></td></tr>
<tr><td class="indexkey"><a class="el" href="namespaceggl_1_1strategy_1_1convex__hull.html">ggl::strategy::convex_hull</a></td><td class="indexvalue"></td></tr>
<tr><td class="indexkey"><a class="el" href="namespaceggl_1_1strategy_1_1distance.html">ggl::strategy::distance</a></td><td class="indexvalue"></td></tr>
<tr><td class="indexkey"><a class="el" href="namespaceggl_1_1strategy_1_1intersection.html">ggl::strategy::intersection</a></td><td class="indexvalue"></td></tr>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/ogc.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/ogc.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/ogc.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -42,7 +42,7 @@
OGC defines the following geometry classes, which are implemented as concepts (and as geometries) the Generic Geometry Library:<ul>
<li><a class="el" href="classggl_1_1point.html">point</a>: a point. The point defined here is dimensionally agnostic. Library users does not have to use this point, they might also use their own points as long as it meets the concepts.</li><li><a class="el" href="classggl_1_1linestring.html">linestring</a>: Sequence of point values with linear interpolation between points. Note that library users does not have to use this type. Algorithms works on iterators, so all algorithms also accept iterators on a vector (or other container) of points.</li><li><a class="el" href="classggl_1_1linear__ring.html">linear_ring</a>: Sequence of point values with linear interpolation between points, which is closed and not self-intersecting</li><li><a class="el" href="classggl_1_1polygon.html">polygon</a>: Plane figure, consisting of an outer ring and zero or more inner rings. So basically a polygon which might have holes. <em>Note that this definition is different from several other polygon definitions and libraries, where p
olygons are not allowed to have holes. These polygons are comparable to the linear_ring above</em></li></ul>
<p>
-The following geometries were in the first preview, because they are defined in OGC, but not in the current preview (they will be added again).<ul>
+And multi-geometries:<ul>
<li><a class="el" href="structggl_1_1multi__point.html">multi_point</a>: collection of points</li><li><a class="el" href="structggl_1_1multi__linestring.html">multi_linestring</a>: collection of linestrings</li><li><a class="el" href="structggl_1_1multi__polygon.html">multi_polygon</a>: collection of polygons</li></ul>
<p>
The naming of these classes is used in:<ul>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/point__on__border_8hpp.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/point__on__border_8hpp.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/point__on__border_8hpp.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -50,9 +50,9 @@
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Geometry > </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__utility.html#ge415174744cad8935889144cc286a0fb">ggl::point_on_border</a> (Geometry const &geometry, typename point_type< Geometry >::type &point)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__overlay.html#ge415174744cad8935889144cc286a0fb">ggl::point_on_border</a> (Geometry const &geometry, typename point_type< Geometry >::type &point)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on a border. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Take <a class="el" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a> on a border. <br></td></tr>
</table>
</div>
<hr size="1">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/point__on__border_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/point__on__border_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/point__on__border_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -64,7 +64,7 @@
<a name="l00023"></a>00023 {
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="preprocessor">#ifndef DOXYGEN_NO_DETAIL</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="keyword">namespace </span>detail { <span class="keyword">namespace </span><a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a> {
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="keyword">namespace </span>detail { <span class="keyword">namespace </span><a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a> {
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="keyword">template</span>
<a name="l00029"></a>00029 <
@@ -133,13 +133,13 @@
<a name="l00092"></a>00092 <span class="keyword">typename</span> Point
<a name="l00093"></a>00093
<a name="l00094"></a>00094 >
-<a name="l00095"></a>00095 <span class="keyword">struct </span><a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>
+<a name="l00095"></a>00095 <span class="keyword">struct </span><a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>
<a name="l00096"></a>00096 {
<a name="l00097"></a>00097 };
<a name="l00098"></a>00098
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="keyword">template</span><<span class="keyword">typename</span> Po<span class="keywordtype">int</span>>
-<a name="l00101"></a>00101 <span class="keyword">struct </span><a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>
+<a name="l00101"></a>00101 <span class="keyword">struct </span><a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>
<a name="l00102"></a>00102 <
<a name="l00103"></a>00103 point_tag, Point, Point
<a name="l00104"></a>00104 >
@@ -153,26 +153,26 @@
<a name="l00112"></a>00112
<a name="l00113"></a>00113
<a name="l00114"></a>00114 <span class="keyword">template</span><<span class="keyword">typename</span> Line<span class="keywordtype">string</span>, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>>
-<a name="l00115"></a>00115 <span class="keyword">struct </span><a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a><linestring_tag, Linestring, Point>
-<a name="l00116"></a>00116 : detail::<a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>::point_on_range<Linestring, Point>
+<a name="l00115"></a>00115 <span class="keyword">struct </span><a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a><linestring_tag, Linestring, Point>
+<a name="l00116"></a>00116 : detail::<a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>::point_on_range<Linestring, Point>
<a name="l00117"></a>00117 {};
<a name="l00118"></a>00118
<a name="l00119"></a>00119
<a name="l00120"></a>00120 <span class="keyword">template</span><<span class="keyword">typename</span> Ring, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>>
-<a name="l00121"></a>00121 <span class="keyword">struct </span><a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a><ring_tag, Ring, Point>
-<a name="l00122"></a>00122 : detail::<a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>::point_on_range<Ring, Point>
+<a name="l00121"></a>00121 <span class="keyword">struct </span><a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a><ring_tag, Ring, Point>
+<a name="l00122"></a>00122 : detail::<a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>::point_on_range<Ring, Point>
<a name="l00123"></a>00123 {};
<a name="l00124"></a>00124
<a name="l00125"></a>00125
<a name="l00126"></a>00126 <span class="keyword">template</span><<span class="keyword">typename</span> Polygon, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>>
-<a name="l00127"></a>00127 <span class="keyword">struct </span><a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a><polygon_tag, Polygon, Point>
-<a name="l00128"></a>00128 : detail::<a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>::point_on_polygon<Polygon, Point>
+<a name="l00127"></a>00127 <span class="keyword">struct </span><a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a><polygon_tag, Polygon, Point>
+<a name="l00128"></a>00128 : detail::<a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>::point_on_polygon<Polygon, Point>
<a name="l00129"></a>00129 {};
<a name="l00130"></a>00130
<a name="l00131"></a>00131
<a name="l00132"></a>00132 <span class="keyword">template</span><<span class="keyword">typename</span> Box, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>>
-<a name="l00133"></a>00133 <span class="keyword">struct </span><a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a><box_tag, Box, Point>
-<a name="l00134"></a>00134 : detail::<a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>::point_on_box<Box, Point>
+<a name="l00133"></a>00133 <span class="keyword">struct </span><a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a><box_tag, Box, Point>
+<a name="l00134"></a>00134 : detail::<a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>::point_on_box<Box, Point>
<a name="l00135"></a>00135 {};
<a name="l00136"></a>00136
<a name="l00137"></a>00137
@@ -181,7 +181,7 @@
<a name="l00140"></a>00140 <span class="preprocessor"></span>
<a name="l00141"></a>00141
<a name="l00152"></a>00152 <span class="keyword">template</span> <<span class="keyword">typename</span> Geometry>
-<a name="l00153"></a><a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb">00153</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>(Geometry <span class="keyword">const</span>& geometry,
+<a name="l00153"></a><a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb">00153</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">point_on_border</a>(Geometry <span class="keyword">const</span>& geometry,
<a name="l00154"></a>00154 <span class="keyword">typename</span> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">point_type<Geometry>::type</a>& <a class="code" href="classggl_1_1point.html" title="Basic point class, having coordinates defined in a neutral way.">point</a>)
<a name="l00155"></a>00155 {
<a name="l00156"></a>00156 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">point_type<Geometry>::type</a> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">point_type</a>;
@@ -189,7 +189,7 @@
<a name="l00158"></a>00158 concept::check<const Geometry>();
<a name="l00159"></a>00159 concept::check<point_type>();
<a name="l00160"></a>00160
-<a name="l00161"></a>00161 <span class="keywordflow">return</span> <a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">dispatch::point_on_border</a>
+<a name="l00161"></a>00161 <span class="keywordflow">return</span> <a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">dispatch::point_on_border</a>
<a name="l00162"></a>00162 <
<a name="l00163"></a>00163 <span class="keyword">typename</span> <a class="code" href="structggl_1_1geometry__not__recognized__tag.html" title="&quot;default&quot; tag">tag<Geometry>::type</a>,
<a name="l00164"></a>00164 Geometry,
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/policies_2compare_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/policies_2compare_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/policies_2compare_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -50,200 +50,195 @@
<a name="l00009"></a>00009 <span class="preprocessor"></span><span class="preprocessor">#define GGL_POLICIES_COMPARE_HPP</span>
<a name="l00010"></a>00010 <span class="preprocessor"></span>
<a name="l00011"></a>00011
-<a name="l00023"></a>00023 <span class="preprocessor">#include <<a class="code" href="strategies_2compare_8hpp.html">ggl/strategies/compare.hpp</a>></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <<a class="code" href="math_8hpp.html">ggl/util/math.hpp</a>></span>
-<a name="l00025"></a>00025
-<a name="l00026"></a>00026 <span class="keyword">namespace </span>ggl
-<a name="l00027"></a>00027 {
-<a name="l00028"></a>00028
-<a name="l00029"></a>00029
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef DOXYGEN_NO_DETAIL</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="keyword">namespace </span>detail { <span class="keyword">namespace </span>compare {
-<a name="l00032"></a>00032
-<a name="l00033"></a>00033
-<a name="l00034"></a>00034 <span class="keyword">template</span>
-<a name="l00035"></a>00035 <
-<a name="l00036"></a>00036 <span class="keywordtype">int</span> Direction,
-<a name="l00037"></a>00037 <span class="keyword">typename</span> Point,
-<a name="l00038"></a>00038 <span class="keyword">typename</span> Strategy,
-<a name="l00039"></a>00039 std::size_t Dimension,
-<a name="l00040"></a>00040 std::size_t DimensionCount
-<a name="l00041"></a>00041 >
-<a name="l00042"></a>00042 <span class="keyword">struct </span>compare_loop
-<a name="l00043"></a>00043 {
-<a name="l00044"></a>00044 <span class="keyword">typedef</span> <span class="keyword">typename</span> strategy::compare::detail::select_strategy
-<a name="l00045"></a>00045 <
-<a name="l00046"></a>00046 Strategy, Direction, Point, Dimension
-<a name="l00047"></a>00047 >::type compare_type;
+<a name="l00046"></a>00046 <span class="preprocessor">#include <<a class="code" href="strategies_2compare_8hpp.html">ggl/strategies/compare.hpp</a>></span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include <<a class="code" href="math_8hpp.html">ggl/util/math.hpp</a>></span>
<a name="l00048"></a>00048
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1coordinate__type.html" title="Meta-function which defines coordinate type (int, float, double, etc) of any geometry...">ggl::coordinate_type<Point>::type</a> coordinate_type;
-<a name="l00050"></a>00050
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Point <span class="keyword">const</span>& left, Point <span class="keyword">const</span>& right)
-<a name="l00052"></a>00052 {
-<a name="l00053"></a>00053 coordinate_type <span class="keyword">const</span>& cleft = ggl::get<Dimension>(left);
-<a name="l00054"></a>00054 coordinate_type <span class="keyword">const</span>& cright = ggl::get<Dimension>(right);
+<a name="l00049"></a>00049 <span class="keyword">namespace </span>ggl
+<a name="l00050"></a>00050 {
+<a name="l00051"></a>00051
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="preprocessor">#ifndef DOXYGEN_NO_DETAIL</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="keyword">namespace </span>detail { <span class="keyword">namespace </span>compare {
<a name="l00055"></a>00055
-<a name="l00056"></a>00056 <span class="keywordflow">if</span> (<a class="code" href="group__utility.html#gd90ba94c2d65876e9485b2bbd10def34" title="returns true if both arguments are equal.">ggl::math::equals</a>(cleft, cright))
-<a name="l00057"></a>00057 {
-<a name="l00058"></a>00058 <span class="keywordflow">return</span> compare_loop
-<a name="l00059"></a>00059 <
-<a name="l00060"></a>00060 Direction, Point, Strategy,
-<a name="l00061"></a>00061 Dimension + 1, DimensionCount
-<a name="l00062"></a>00062 >::apply(left, right);
-<a name="l00063"></a>00063 }
-<a name="l00064"></a>00064 <span class="keywordflow">else</span>
-<a name="l00065"></a>00065 {
-<a name="l00066"></a>00066 compare_type compare;
-<a name="l00067"></a>00067 <span class="keywordflow">return</span> compare(cleft, cright);
-<a name="l00068"></a>00068 }
-<a name="l00069"></a>00069 }
-<a name="l00070"></a>00070 };
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keyword">template</span>
+<a name="l00058"></a>00058 <
+<a name="l00059"></a>00059 <span class="keywordtype">int</span> Direction,
+<a name="l00060"></a>00060 <span class="keyword">typename</span> Point,
+<a name="l00061"></a>00061 <span class="keyword">typename</span> Strategy,
+<a name="l00062"></a>00062 std::size_t Dimension,
+<a name="l00063"></a>00063 std::size_t DimensionCount
+<a name="l00064"></a>00064 >
+<a name="l00065"></a>00065 <span class="keyword">struct </span>compare_loop
+<a name="l00066"></a>00066 {
+<a name="l00067"></a>00067 <span class="keyword">typedef</span> <span class="keyword">typename</span> strategy::compare::detail::select_strategy
+<a name="l00068"></a>00068 <
+<a name="l00069"></a>00069 Strategy, Direction, Point, Dimension
+<a name="l00070"></a>00070 >::type compare_type;
<a name="l00071"></a>00071
-<a name="l00072"></a>00072 <span class="keyword">template</span>
-<a name="l00073"></a>00073 <
-<a name="l00074"></a>00074 <span class="keywordtype">int</span> Direction,
-<a name="l00075"></a>00075 <span class="keyword">typename</span> Point,
-<a name="l00076"></a>00076 <span class="keyword">typename</span> Strategy,
-<a name="l00077"></a>00077 std::size_t DimensionCount
-<a name="l00078"></a>00078 >
-<a name="l00079"></a>00079 <span class="keyword">struct </span>compare_loop<Direction, Point, Strategy, DimensionCount, DimensionCount>
-<a name="l00080"></a>00080 {
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Point <span class="keyword">const</span>&, Point <span class="keyword">const</span>&)
-<a name="l00082"></a>00082 {
-<a name="l00083"></a>00083 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00084"></a>00084 }
-<a name="l00085"></a>00085 };
-<a name="l00086"></a>00086
-<a name="l00087"></a>00087
-<a name="l00088"></a>00088 <span class="keyword">template</span> <<span class="keywordtype">int</span> Direction, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>, <span class="keyword">typename</span> Strategy>
-<a name="l00089"></a>00089 <span class="keyword">struct </span>compare_in_all_dimensions
-<a name="l00090"></a>00090 {
-<a name="l00091"></a>00091 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator()(Point <span class="keyword">const</span>& left, Point <span class="keyword">const</span>& right)<span class="keyword"> const</span>
-<a name="l00092"></a>00092 <span class="keyword"> </span>{
-<a name="l00093"></a>00093 <span class="keywordflow">return</span> detail::compare::compare_loop
-<a name="l00094"></a>00094 <
-<a name="l00095"></a>00095 Direction, Point, Strategy,
-<a name="l00096"></a>00096 0, <a class="code" href="structggl_1_1dimension.html" title="Meta-function which defines coordinate dimensions, i.e. the number of axes of any...">ggl::dimension<Point>::type::value</a>
-<a name="l00097"></a>00097 >::apply(left, right);
-<a name="l00098"></a>00098 }
-<a name="l00099"></a>00099 };
-<a name="l00100"></a>00100
-<a name="l00101"></a>00101
-<a name="l00102"></a>00102 <span class="keyword">template</span>
-<a name="l00103"></a>00103 <
-<a name="l00104"></a>00104 <span class="keyword">typename</span> Point,
-<a name="l00105"></a>00105 <span class="keyword">typename</span> Strategy,
-<a name="l00106"></a>00106 std::size_t Dimension
-<a name="l00107"></a>00107 >
-<a name="l00108"></a>00108 <span class="keyword">class </span>compare_in_one_dimension
-<a name="l00109"></a>00109 {
-<a name="l00110"></a>00110 Strategy compare;
-<a name="l00111"></a>00111
-<a name="l00112"></a>00112 <span class="keyword">public</span> :
-<a name="l00113"></a>00113 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator()(Point <span class="keyword">const</span>& left, Point <span class="keyword">const</span>& right)<span class="keyword"> const</span>
-<a name="l00114"></a>00114 <span class="keyword"> </span>{
-<a name="l00115"></a>00115 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1coordinate__type.html" title="Meta-function which defines coordinate type (int, float, double, etc) of any geometry...">ggl::coordinate_type<Point>::type</a> coordinate_type;
-<a name="l00116"></a>00116
-<a name="l00117"></a>00117 coordinate_type <span class="keyword">const</span>& cleft = get<Dimension>(left);
-<a name="l00118"></a>00118 coordinate_type <span class="keyword">const</span>& cright = get<Dimension>(right);
-<a name="l00119"></a>00119 <span class="keywordflow">return</span> compare(cleft, cright);
-<a name="l00120"></a>00120 }
-<a name="l00121"></a>00121 };
-<a name="l00122"></a>00122
-<a name="l00123"></a>00123 }} <span class="comment">// namespace detail::compare</span>
+<a name="l00072"></a>00072 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1coordinate__type.html" title="Meta-function which defines coordinate type (int, float, double, etc) of any geometry...">ggl::coordinate_type<Point>::type</a> coordinate_type;
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Point <span class="keyword">const</span>& left, Point <span class="keyword">const</span>& right)
+<a name="l00075"></a>00075 {
+<a name="l00076"></a>00076 coordinate_type <span class="keyword">const</span>& cleft = ggl::get<Dimension>(left);
+<a name="l00077"></a>00077 coordinate_type <span class="keyword">const</span>& cright = ggl::get<Dimension>(right);
+<a name="l00078"></a>00078
+<a name="l00079"></a>00079 <span class="keywordflow">if</span> (<a class="code" href="group__utility.html#gd90ba94c2d65876e9485b2bbd10def34" title="returns true if both arguments are equal.">ggl::math::equals</a>(cleft, cright))
+<a name="l00080"></a>00080 {
+<a name="l00081"></a>00081 <span class="keywordflow">return</span> compare_loop
+<a name="l00082"></a>00082 <
+<a name="l00083"></a>00083 Direction, Point, Strategy,
+<a name="l00084"></a>00084 Dimension + 1, DimensionCount
+<a name="l00085"></a>00085 >::apply(left, right);
+<a name="l00086"></a>00086 }
+<a name="l00087"></a>00087 <span class="keywordflow">else</span>
+<a name="l00088"></a>00088 {
+<a name="l00089"></a>00089 compare_type compare;
+<a name="l00090"></a>00090 <span class="keywordflow">return</span> compare(cleft, cright);
+<a name="l00091"></a>00091 }
+<a name="l00092"></a>00092 }
+<a name="l00093"></a>00093 };
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 <span class="keyword">template</span>
+<a name="l00096"></a>00096 <
+<a name="l00097"></a>00097 <span class="keywordtype">int</span> Direction,
+<a name="l00098"></a>00098 <span class="keyword">typename</span> Point,
+<a name="l00099"></a>00099 <span class="keyword">typename</span> Strategy,
+<a name="l00100"></a>00100 std::size_t DimensionCount
+<a name="l00101"></a>00101 >
+<a name="l00102"></a>00102 <span class="keyword">struct </span>compare_loop<Direction, Point, Strategy, DimensionCount, DimensionCount>
+<a name="l00103"></a>00103 {
+<a name="l00104"></a>00104 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> apply(Point <span class="keyword">const</span>&, Point <span class="keyword">const</span>&)
+<a name="l00105"></a>00105 {
+<a name="l00106"></a>00106 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00107"></a>00107 }
+<a name="l00108"></a>00108 };
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110
+<a name="l00111"></a>00111 <span class="keyword">template</span> <<span class="keywordtype">int</span> Direction, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>, <span class="keyword">typename</span> Strategy>
+<a name="l00112"></a>00112 <span class="keyword">struct </span>compare_in_all_dimensions
+<a name="l00113"></a>00113 {
+<a name="l00114"></a>00114 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator()(Point <span class="keyword">const</span>& left, Point <span class="keyword">const</span>& right)<span class="keyword"> const</span>
+<a name="l00115"></a>00115 <span class="keyword"> </span>{
+<a name="l00116"></a>00116 <span class="keywordflow">return</span> detail::compare::compare_loop
+<a name="l00117"></a>00117 <
+<a name="l00118"></a>00118 Direction, Point, Strategy,
+<a name="l00119"></a>00119 0, <a class="code" href="structggl_1_1dimension.html" title="Meta-function which defines coordinate dimensions, i.e. the number of axes of any...">ggl::dimension<Point>::type::value</a>
+<a name="l00120"></a>00120 >::apply(left, right);
+<a name="l00121"></a>00121 }
+<a name="l00122"></a>00122 };
+<a name="l00123"></a>00123
<a name="l00124"></a>00124
-<a name="l00125"></a>00125 <span class="preprocessor">#endif</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span>
-<a name="l00127"></a>00127 <span class="preprocessor">#ifndef DOXYGEN_NO_DISPATCH</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="keyword">namespace </span>dispatch
-<a name="l00129"></a>00129 {
-<a name="l00130"></a>00130
-<a name="l00131"></a>00131 <span class="keyword">template</span>
-<a name="l00132"></a>00132 <
-<a name="l00133"></a>00133 <span class="keywordtype">int</span> Direction,
-<a name="l00134"></a>00134 <span class="keyword">typename</span> Point,
-<a name="l00135"></a>00135 <span class="keyword">typename</span> Strategy,
-<a name="l00136"></a>00136 <span class="keywordtype">int</span> Dimension
-<a name="l00137"></a>00137 >
-<a name="l00138"></a>00138 <span class="keyword">struct </span>compare_geometries
-<a name="l00139"></a>00139 : detail::compare::compare_in_one_dimension
-<a name="l00140"></a>00140 <
-<a name="l00141"></a>00141 Point,
-<a name="l00142"></a>00142 typename strategy::compare::detail::select_strategy
-<a name="l00143"></a>00143 <
-<a name="l00144"></a>00144 Strategy, Direction, Point, Dimension
-<a name="l00145"></a>00145 >::type,
-<a name="l00146"></a>00146 Dimension
-<a name="l00147"></a>00147 >
-<a name="l00148"></a>00148 {};
-<a name="l00149"></a>00149
-<a name="l00150"></a>00150
-<a name="l00151"></a>00151 <span class="comment">// Specialization with -1: compare in all dimensions</span>
-<a name="l00152"></a>00152 <span class="keyword">template</span> <<span class="keywordtype">int</span> Direction, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>, <span class="keyword">typename</span> Strategy>
-<a name="l00153"></a>00153 <span class="keyword">struct </span>compare_geometries<Direction, Point, Strategy, -1>
-<a name="l00154"></a>00154 : detail::compare::compare_in_all_dimensions<Direction, Point, Strategy>
-<a name="l00155"></a>00155 {};
-<a name="l00156"></a>00156
-<a name="l00157"></a>00157
-<a name="l00158"></a>00158
-<a name="l00159"></a>00159 } <span class="comment">// namespace dispatch</span>
-<a name="l00160"></a>00160 <span class="preprocessor">#endif // DOXYGEN_NO_DISPATCH</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span>
-<a name="l00162"></a>00162
-<a name="l00178"></a>00178 <span class="keyword">template</span>
-<a name="l00179"></a>00179 <
-<a name="l00180"></a>00180 <span class="keyword">typename</span> Point,
-<a name="l00181"></a>00181 <span class="keywordtype">int</span> Dimension = -1,
-<a name="l00182"></a>00182 <span class="keyword">typename</span> Strategy = strategy::compare::default_strategy
-<a name="l00183"></a>00183 >
-<a name="l00184"></a><a class="code" href="structggl_1_1less.html">00184</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1less.html" title="Less functor, to sort points in ascending order.">less</a>
-<a name="l00185"></a>00185 : dispatch::compare_geometries
-<a name="l00186"></a>00186 <
-<a name="l00187"></a>00187 1, <span class="comment">// indicates ascending</span>
-<a name="l00188"></a>00188 Point,
-<a name="l00189"></a>00189 Strategy,
-<a name="l00190"></a>00190 Dimension
-<a name="l00191"></a>00191 >
-<a name="l00192"></a>00192 {};
-<a name="l00193"></a>00193
-<a name="l00194"></a>00194
-<a name="l00201"></a>00201 <span class="keyword">template</span>
-<a name="l00202"></a>00202 <
-<a name="l00203"></a>00203 <span class="keyword">typename</span> Point,
-<a name="l00204"></a>00204 <span class="keywordtype">int</span> Dimension = -1,
-<a name="l00205"></a>00205 <span class="keyword">typename</span> Strategy = <a class="code" href="structggl_1_1strategy_1_1compare_1_1default__strategy.html" title="Default strategy, indicates the default strategy for comparisons.">strategy::compare::default_strategy</a>
-<a name="l00206"></a>00206 >
-<a name="l00207"></a><a class="code" href="structggl_1_1greater.html">00207</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1greater.html" title="Greater functor.">greater</a>
-<a name="l00208"></a>00208 : dispatch::compare_geometries
-<a name="l00209"></a>00209 <
-<a name="l00210"></a>00210 -1, <span class="comment">// indicates descending</span>
-<a name="l00211"></a>00211 Point,
-<a name="l00212"></a>00212 Strategy,
-<a name="l00213"></a>00213 Dimension
-<a name="l00214"></a>00214 >
-<a name="l00215"></a>00215 {};
-<a name="l00216"></a>00216
-<a name="l00217"></a>00217
-<a name="l00227"></a>00227 <span class="keyword">template</span>
-<a name="l00228"></a>00228 <
-<a name="l00229"></a>00229 <span class="keyword">typename</span> Point,
-<a name="l00230"></a>00230 <span class="keywordtype">int</span> Dimension = 0,
-<a name="l00231"></a>00231 <span class="keyword">typename</span> Strategy = <a class="code" href="structggl_1_1strategy_1_1compare_1_1default__strategy.html" title="Default strategy, indicates the default strategy for comparisons.">strategy::compare::default_strategy</a>
-<a name="l00232"></a>00232 >
-<a name="l00233"></a><a class="code" href="structggl_1_1equal__to.html">00233</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1equal__to.html" title="Equal To functor, to compare if points are equal.">equal_to</a>
-<a name="l00234"></a>00234 : dispatch::compare_geometries
-<a name="l00235"></a>00235 <
-<a name="l00236"></a>00236 0,
-<a name="l00237"></a>00237 Point,
-<a name="l00238"></a>00238 Strategy,
-<a name="l00239"></a>00239 Dimension
-<a name="l00240"></a>00240 >
-<a name="l00241"></a>00241 {};
-<a name="l00242"></a>00242
-<a name="l00243"></a>00243
-<a name="l00244"></a>00244 } <span class="comment">// namespace ggl</span>
-<a name="l00245"></a>00245
-<a name="l00246"></a>00246 <span class="preprocessor">#endif // GGL_POLICIES_COMPARE_HPP</span>
+<a name="l00125"></a>00125 <span class="keyword">template</span> <<span class="keyword">typename</span> Po<span class="keywordtype">int</span>, <span class="keyword">typename</span> Strategy, std::<span class="keywordtype">size_t</span> Dimension>
+<a name="l00126"></a>00126 <span class="keyword">class </span>compare_in_one_dimension
+<a name="l00127"></a>00127 {
+<a name="l00128"></a>00128 Strategy compare;
+<a name="l00129"></a>00129
+<a name="l00130"></a>00130 <span class="keyword">public</span> :
+<a name="l00131"></a>00131 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator()(Point <span class="keyword">const</span>& left, Point <span class="keyword">const</span>& right)<span class="keyword"> const</span>
+<a name="l00132"></a>00132 <span class="keyword"> </span>{
+<a name="l00133"></a>00133 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1coordinate__type.html" title="Meta-function which defines coordinate type (int, float, double, etc) of any geometry...">ggl::coordinate_type<Point>::type</a> coordinate_type;
+<a name="l00134"></a>00134
+<a name="l00135"></a>00135 coordinate_type <span class="keyword">const</span>& cleft = get<Dimension>(left);
+<a name="l00136"></a>00136 coordinate_type <span class="keyword">const</span>& cright = get<Dimension>(right);
+<a name="l00137"></a>00137 <span class="keywordflow">return</span> compare(cleft, cright);
+<a name="l00138"></a>00138 }
+<a name="l00139"></a>00139 };
+<a name="l00140"></a>00140
+<a name="l00141"></a>00141 }} <span class="comment">// namespace detail::compare</span>
+<a name="l00142"></a>00142
+<a name="l00143"></a>00143 <span class="preprocessor">#endif</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span>
+<a name="l00145"></a>00145 <span class="preprocessor">#ifndef DOXYGEN_NO_DISPATCH</span>
+<a name="l00146"></a>00146 <span class="preprocessor"></span><span class="keyword">namespace </span>dispatch
+<a name="l00147"></a>00147 {
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keyword">template</span>
+<a name="l00150"></a>00150 <
+<a name="l00151"></a>00151 <span class="keywordtype">int</span> Direction,
+<a name="l00152"></a>00152 <span class="keyword">typename</span> Point,
+<a name="l00153"></a>00153 <span class="keyword">typename</span> Strategy,
+<a name="l00154"></a>00154 <span class="keywordtype">int</span> Dimension
+<a name="l00155"></a>00155 >
+<a name="l00156"></a>00156 <span class="keyword">struct </span>compare_geometries
+<a name="l00157"></a>00157 : detail::compare::compare_in_one_dimension
+<a name="l00158"></a>00158 <
+<a name="l00159"></a>00159 Point,
+<a name="l00160"></a>00160 typename strategy::compare::detail::select_strategy
+<a name="l00161"></a>00161 <
+<a name="l00162"></a>00162 Strategy, Direction, Point, Dimension
+<a name="l00163"></a>00163 >::type,
+<a name="l00164"></a>00164 Dimension
+<a name="l00165"></a>00165 >
+<a name="l00166"></a>00166 {};
+<a name="l00167"></a>00167
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <span class="comment">// Specialization with -1: compare in all dimensions</span>
+<a name="l00170"></a>00170 <span class="keyword">template</span> <<span class="keywordtype">int</span> Direction, <span class="keyword">typename</span> Po<span class="keywordtype">int</span>, <span class="keyword">typename</span> Strategy>
+<a name="l00171"></a>00171 <span class="keyword">struct </span>compare_geometries<Direction, Point, Strategy, -1>
+<a name="l00172"></a>00172 : detail::compare::compare_in_all_dimensions<Direction, Point, Strategy>
+<a name="l00173"></a>00173 {};
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177 } <span class="comment">// namespace dispatch</span>
+<a name="l00178"></a>00178 <span class="preprocessor">#endif // DOXYGEN_NO_DISPATCH</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span>
+<a name="l00180"></a>00180
+<a name="l00196"></a>00196 <span class="keyword">template</span>
+<a name="l00197"></a>00197 <
+<a name="l00198"></a>00198 <span class="keyword">typename</span> Point,
+<a name="l00199"></a>00199 <span class="keywordtype">int</span> Dimension = -1,
+<a name="l00200"></a>00200 <span class="keyword">typename</span> Strategy = strategy::compare::default_strategy
+<a name="l00201"></a>00201 >
+<a name="l00202"></a><a class="code" href="structggl_1_1less.html">00202</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1less.html" title="Less functor, to sort points in ascending order.">less</a>
+<a name="l00203"></a>00203 : dispatch::compare_geometries
+<a name="l00204"></a>00204 <
+<a name="l00205"></a>00205 1, <span class="comment">// indicates ascending</span>
+<a name="l00206"></a>00206 Point,
+<a name="l00207"></a>00207 Strategy,
+<a name="l00208"></a>00208 Dimension
+<a name="l00209"></a>00209 >
+<a name="l00210"></a>00210 {};
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212
+<a name="l00219"></a>00219 <span class="keyword">template</span>
+<a name="l00220"></a>00220 <
+<a name="l00221"></a>00221 <span class="keyword">typename</span> Point,
+<a name="l00222"></a>00222 <span class="keywordtype">int</span> Dimension = -1,
+<a name="l00223"></a>00223 <span class="keyword">typename</span> Strategy = <a class="code" href="structggl_1_1strategy_1_1compare_1_1default__strategy.html" title="Default strategy, indicates the default strategy for comparisons.">strategy::compare::default_strategy</a>
+<a name="l00224"></a>00224 >
+<a name="l00225"></a><a class="code" href="structggl_1_1greater.html">00225</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1greater.html" title="Greater functor.">greater</a>
+<a name="l00226"></a>00226 : dispatch::compare_geometries
+<a name="l00227"></a>00227 <
+<a name="l00228"></a>00228 -1, <span class="comment">// indicates descending</span>
+<a name="l00229"></a>00229 Point,
+<a name="l00230"></a>00230 Strategy,
+<a name="l00231"></a>00231 Dimension
+<a name="l00232"></a>00232 >
+<a name="l00233"></a>00233 {};
+<a name="l00234"></a>00234
+<a name="l00235"></a>00235
+<a name="l00245"></a>00245 <span class="keyword">template</span>
+<a name="l00246"></a>00246 <
+<a name="l00247"></a>00247 <span class="keyword">typename</span> Point,
+<a name="l00248"></a>00248 <span class="keywordtype">int</span> Dimension = 0,
+<a name="l00249"></a>00249 <span class="keyword">typename</span> Strategy = <a class="code" href="structggl_1_1strategy_1_1compare_1_1default__strategy.html" title="Default strategy, indicates the default strategy for comparisons.">strategy::compare::default_strategy</a>
+<a name="l00250"></a>00250 >
+<a name="l00251"></a><a class="code" href="structggl_1_1equal__to.html">00251</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1equal__to.html" title="Equal To functor, to compare if points are equal.">equal_to</a>
+<a name="l00252"></a>00252 : dispatch::compare_geometries
+<a name="l00253"></a>00253 <
+<a name="l00254"></a>00254 0,
+<a name="l00255"></a>00255 Point,
+<a name="l00256"></a>00256 Strategy,
+<a name="l00257"></a>00257 Dimension
+<a name="l00258"></a>00258 >
+<a name="l00259"></a>00259 {};
+<a name="l00260"></a>00260
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 } <span class="comment">// namespace ggl</span>
+<a name="l00263"></a>00263
+<a name="l00264"></a>00264 <span class="preprocessor">#endif // GGL_POLICIES_COMPARE_HPP</span>
</pre></div></div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/select__coordinate__type_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/select__coordinate__type_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/select__coordinate__type_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -55,25 +55,25 @@
<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="select__most__precise_8hpp.html">ggl/util/select_most_precise.hpp</a>></span>
<a name="l00015"></a>00015
<a name="l00016"></a>00016
-<a name="l00021"></a>00021 <span class="keyword">namespace </span>ggl
-<a name="l00022"></a>00022 {
-<a name="l00023"></a>00023
-<a name="l00024"></a>00024
-<a name="l00030"></a>00030 <span class="keyword">template</span> <<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2>
-<a name="l00031"></a><a class="code" href="structggl_1_1select__coordinate__type.html">00031</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1select__coordinate__type.html" title="Meta-function selecting the most precise coordinate type of two geometries.">select_coordinate_type</a>
-<a name="l00032"></a>00032 {
-<a name="l00033"></a>00033 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1select__most__precise.html" title="Meta-function to select, of two types, the most accurate type for calculations.">select_most_precise</a>
-<a name="l00034"></a>00034 <
-<a name="l00035"></a>00035 <span class="keyword">typename</span> <a class="code" href="structggl_1_1coordinate__type.html" title="Meta-function which defines coordinate type (int, float, double, etc) of any geometry...">coordinate_type<T1>::type</a>,
-<a name="l00036"></a>00036 <span class="keyword">typename</span> <a class="code" href="structggl_1_1coordinate__type.html" title="Meta-function which defines coordinate type (int, float, double, etc) of any geometry...">coordinate_type<T2>::type</a>
-<a name="l00037"></a><a class="code" href="structggl_1_1select__coordinate__type.html#426688c132982dabdbdd4213bf9f3cfd">00037</a> ><a class="code" href="structggl_1_1select__coordinate__type.html#426688c132982dabdbdd4213bf9f3cfd">::type</a> <a class="code" href="structggl_1_1select__coordinate__type.html#426688c132982dabdbdd4213bf9f3cfd">type</a>;
-<a name="l00038"></a>00038 };
-<a name="l00039"></a>00039
-<a name="l00040"></a>00040
-<a name="l00041"></a>00041 } <span class="comment">// namespace ggl</span>
-<a name="l00042"></a>00042
-<a name="l00043"></a>00043
-<a name="l00044"></a>00044 <span class="preprocessor">#endif // GGL_UTIL_SELECT_COORDINATE_TYPE_HPP</span>
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>ggl
+<a name="l00034"></a>00034 {
+<a name="l00035"></a>00035
+<a name="l00036"></a>00036
+<a name="l00042"></a>00042 <span class="keyword">template</span> <<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2>
+<a name="l00043"></a><a class="code" href="structggl_1_1select__coordinate__type.html">00043</a> <span class="keyword">struct </span><a class="code" href="structggl_1_1select__coordinate__type.html" title="Meta-function selecting the most precise coordinate type of two geometries.">select_coordinate_type</a>
+<a name="l00044"></a>00044 {
+<a name="l00045"></a>00045 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structggl_1_1select__most__precise.html" title="Meta-function to select, of two types, the most accurate type for calculations.">select_most_precise</a>
+<a name="l00046"></a>00046 <
+<a name="l00047"></a>00047 <span class="keyword">typename</span> <a class="code" href="structggl_1_1coordinate__type.html" title="Meta-function which defines coordinate type (int, float, double, etc) of any geometry...">coordinate_type<T1>::type</a>,
+<a name="l00048"></a>00048 <span class="keyword">typename</span> <a class="code" href="structggl_1_1coordinate__type.html" title="Meta-function which defines coordinate type (int, float, double, etc) of any geometry...">coordinate_type<T2>::type</a>
+<a name="l00049"></a><a class="code" href="structggl_1_1select__coordinate__type.html#426688c132982dabdbdd4213bf9f3cfd">00049</a> ><a class="code" href="structggl_1_1select__coordinate__type.html#426688c132982dabdbdd4213bf9f3cfd">::type</a> <a class="code" href="structggl_1_1select__coordinate__type.html#426688c132982dabdbdd4213bf9f3cfd">type</a>;
+<a name="l00050"></a>00050 };
+<a name="l00051"></a>00051
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 } <span class="comment">// namespace ggl</span>
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055
+<a name="l00056"></a>00056 <span class="preprocessor">#endif // GGL_UTIL_SELECT_COORDINATE_TYPE_HPP</span>
</pre></div></div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/sort__interior__rings_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/sort__interior__rings_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/sort__interior__rings_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -129,7 +129,7 @@
<a name="l00088"></a>00088 <span class="keywordtype">int</span> <span class="keyword">const</span> p = sorted_rings[parent].index;
<a name="l00089"></a>00089
<a name="l00090"></a>00090 point_type point;
-<a name="l00091"></a>00091 <a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(rings[h], point);
+<a name="l00091"></a>00091 <a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(rings[h], point);
<a name="l00092"></a>00092 <span class="keywordflow">if</span> (<a class="code" href="group__within.html#g599c2aa76cf2037eb40514e449ace28d" title="Within, examine if a geometry is within another geometry.">ggl::within</a>(point, rings[p]))
<a name="l00093"></a>00093 {
<a name="l00094"></a>00094 <span class="comment">// Update registration</span>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/status.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/status.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/status.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -55,12 +55,12 @@
<li>implementation of spatial set relations (intersection, union)</li><li>implementation of some spatial boolean relations (disjoint, equal, intersects, overlaps)</li><li>move of GIS-specific code to extension/gis</li><li>move of map projections to extensions/gis/projections</li><li>implementation of SVG in extensions/SVG</li><li>review of all code, conform Boost code guidelines, no tabs, template parameters, etc.</li><li>other small changes.</li></ul>
<p>
<b>Breaking</b> <b>changes</b> <ul>
-<li>there is now distinction between functions using an output iterator, and functions resulting in modifying geometries. Functions using an output iterator are called _inserter, so convex_hull_inserter inserts points (the hull) into something.</li><li>many headerfiles are moved and/or renamed</li><li>...</li></ul>
+<li>there is now distinction between functions using an output iterator, and functions resulting in modifying geometries. Functions using an output iterator are called _inserter, so convex_hull_inserter inserts points (the hull) into something.</li><li>many headerfiles are moved and/or renamed</li><li>strategies now define a method <b>apply</b>, in previous versions this was <b>operator()</b> <em>this only influences your code if you've made strategies yourself</em></li><li>...</li></ul>
<p>
If people are interested in helping with the library, be it by coding, by testing, by commenting or otherwise, they are very welcome.<h2><a class="anchor" name="history">
History</a></h2>
Geodan started in 1995 with a Geographic Library, called geolib or also GGL (Geodan Geographic Library). Since then hundreds of projects have been done using this geolib, and the geolib have been extended to fit the needs of its users. Geolib can be used in different environments: in Windows applications, as a DLL (ggl32.dll), in Web Map Servers (SclMapServer), Web Feature Servers or more specific programs.<p>
-In 2007-2009 the Geometry part has been revised and completely templatized. From 2008 Bruno Lalande, already a Boost contributor, joined and helped to make the library more generic and to define clear concepts. It is now called Generic Geometry Library, abbreviated to GGL. From 2009 Mateusz Loskot, an active member of Geospatial Open Source communities, joined and helped with reviewing code, guidelines, WKB, iterators, and the Wiki and ticket system<p>
+In 2007-2009 the Geometry part has been revised and completely templatized. From 2008 Bruno Lalande, already a Boost contributor, joined and helped to make the library more generic and to define clear concepts. It is now called Generic Geometry Library, abbreviated to GGL. From 2009 Mateusz Loskot, an active member of Geospatial Open Source communities, joined and helped with reviewing code, guidelines, WKB, iterators, and the Wiki and ticket system (http://trac.osgeo.org/ggl)<p>
The library is now called Generic Geometry Library, abbreviated to GGL. The Generic Geometry Library is Open Source and is proposed to the Boost community. </div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/strategy.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/strategy.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/strategy.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -47,13 +47,13 @@
Properties of strategies</a></h2>
Because strategies can be constructed outside the calling function, they can be specified as an optional parameter (implemented as an overloaded function), and not as only a template-parameter. Furthermore, strategies might be used several times, in several function calls. Therefore they are declared as const reference parameter, they should be stateless (besides construction information).<p>
The strategy needs to access construction information (member variables), its calculation method is therefore usually not a static method but a non-static const method. It can then access member variables, while still being const, non-mutable, stateless, being able to be called across several function calls. If often has to keep some calculation information (state), so it should (for some algorithms) declare a state_type. In those cases, that state_type is instantiated before first call and specified in each call. The calculation method is always called <b>apply</b> (as convention in GGL) and gets the most elementary information as a parameter: a point, a segment, a range. It depends on the algorithm and, sometimes, on the source geometry passed. That should actually be the case as least as possisble In most cases, there is an additional method <b>result</b> which returns the calculated result. That result-method is a also non-static const method, and the state is passed. Note that the methods might be non-
static const, but they might also be static. That is not checked by the concept-checker.<p>
-A strategy for a specific algorithm has a concept. The distance-strategy should follow the distance-strategy-concept. The point-in-polygon strategy should follow the point-in-polygon-strategy-concept. Those concepts are not modelled as traits classes (contrary to the geomtries). The reason for this is that it seems not necessary to directly legacy classes as concepts, without modification. A wrapper can than be built. So the strategies should have a method apply and should define some types.<p>
-Which types, and which additional methods (often a method <b>result</b>), is thus dependant on the algorithm.<p>
-Strategies are checked by a strategy-concept-checker. For this checker (and sometimes for checking alone), they should define some types. Because if no types are defined, the methods cannot be checked at compile time... The strategy-concept-checkers are thus implemented per algorithm and they use the Boost Concept Check Library for checking.<h2><a class="anchor" name="strpar3">
+A strategy for a specific algorithm has a concept. The distance-strategy should follow the distance-strategy-concept. The point-in-polygon strategy should follow the point-in-polygon-strategy-concept. Those concepts are not modelled as traits classes (contrary to the geometries). The reason for this is that it seems not necessary to use legacy classes as concepts, without modification. A wrapper can be built. So the strategies should have a method <b>apply</b> and should define some types.<p>
+Which types, and which additional methods (often a method <b>result</b>), is dependant on the algorithm / type of strategy.<p>
+Strategies are checked by a strategy-concept-checker. For this checker (and sometimes for checking alone), they should define some types. Because if no types are defined, the methods cannot be checked at compile time... The strategy-concept-checkers are thus implemented per algorithm and they use the Boost Concept Check Library for checking.<p>
+So as explained above, the essention of the design is:<ul>
+<li>function determines default-strategy, or is called with specified strategy</li><li>function calls dispatch (dispatching is done on geometry_tag)</li><li>dispatch calls implementation (in namespace detail), which can be shared for different geometry types and for single/multi</li><li>implementation calls strategy (if applicable), with the smallest common (geometric) element applicable for all calculation method, the common denominator</li></ul>
+<h2><a class="anchor" name="strpar3">
Alternative designs</a></h2>
-So as explained above, the essention of the current design is:<ul>
-<li>function determines default-strategy, or is called with specified strategy</li><li>function calls dispatch (on geometry_tag)</li><li>dispatch calls implementation (in namespace detail), which can be shared for different geometry types and for single/multi</li><li>implementation calls strategy (if applicable), with the smallest common (geometric) element applicable for all calculation method, the common denominator</li></ul>
-<p>
Some calculations (strategies) might need to take the whole geometry, instead of working on point-per-point or segment-per-segment base. This would bypass the dispatch functionality. Because all strategies would take the whole geometry, it is not necessary to dispatch per geometry type. In fact this dispatching on geometry-type is moved to the strategy_traits class (which are specialized per coordinate system in the current design). So in this alternative design, the strategy traits class specializes on both geometry-tag and coordinate-system-tag, to select the default strategy. For the default strategy, this move from "dispatch" to another dispatch called "strategy_XXX" (XXX is the algorithm) might make sense. However, if library users would call the overloaded function and specify a strategy, the only thing what would happen is that that specified strategy is called. So, for example: <div class="fragment"><pre class="fragment"><span class="keyword">template</span> <<span class="keyword">typename</span>
G1, <span class="keyword">typename</span> G2, <span class="keyword">typename</span> S>
<span class="keywordtype">bool</span> <a class="code" href="group__within.html#g599c2aa76cf2037eb40514e449ace28d" title="Within, examine if a geometry is within another geometry.">within</a>(G1 <span class="keyword">const</span>& g1, G2 <span class="keyword">const</span>& g2, S& <span class="keyword">const</span> strategy)
{
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1add__const__if__c.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1add__const__if__c.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1add__const__if__c.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -67,7 +67,7 @@
Meta-function to define a const or non const type.
<p>
If the boolean template parameter is true, the type parameter will be defined as const, otherwise it will be defined as it was. This meta-function is used to have one implementation for both const and non const references <dl class="note" compact><dt><b>Note:</b></dt><dd>This <a class="el" href="namespaceggl_1_1traits.html">traits</a> class is completely independant from GGL and might be a separate addition to Boost <p>
-Used in ggl::for_each </dd></dl>
+Used in a.o. ggl::for_each, <a class="el" href="group__access.html#gaee58ea9a166a2ca07597daf34433d7f" title="Function to get the interior rings of a polygon (non const version).">ggl::interior_rings</a>, <a class="el" href="group__access.html#g4dd59c8603683e869f1d74bd40045b8b" title="Function to get the exterior_ring ring of a polygon.">ggl::exterior_ring</a> </dd></dl>
<dl class="user" compact><dt><b>Example</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> foo(<span class="keyword">typename</span> add_const_if_c<IsConst, Point>::type& point)
</pre></div> </dd></dl>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1equal__to.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1equal__to.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1equal__to.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -70,7 +70,7 @@
<p>
<a class="el" href="02__linestring__example_8cpp-example.html#_a11">02_linestring_example.cpp</a>.</dl>
-<p>Definition at line <a class="el" href="policies_2compare_8hpp_source.html#l00233">233</a> of file <a class="el" href="policies_2compare_8hpp_source.html">compare.hpp</a>.</p>
+<p>Definition at line <a class="el" href="policies_2compare_8hpp_source.html#l00251">251</a> of file <a class="el" href="policies_2compare_8hpp_source.html">compare.hpp</a>.</p>
</div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1greater.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1greater.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1greater.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -61,7 +61,7 @@
<p>
Can be used to sort points in reverse order <dl class="see" compact><dt><b>See also:</b></dt><dd>Less functor </dd></dl>
-<p>Definition at line <a class="el" href="policies_2compare_8hpp_source.html#l00207">207</a> of file <a class="el" href="policies_2compare_8hpp_source.html">compare.hpp</a>.</p>
+<p>Definition at line <a class="el" href="policies_2compare_8hpp_source.html#l00225">225</a> of file <a class="el" href="policies_2compare_8hpp_source.html">compare.hpp</a>.</p>
</div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1less.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1less.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1less.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -67,7 +67,7 @@
</table>
</dl>
-<p>Definition at line <a class="el" href="policies_2compare_8hpp_source.html#l00184">184</a> of file <a class="el" href="policies_2compare_8hpp_source.html">compare.hpp</a>.</p>
+<p>Definition at line <a class="el" href="policies_2compare_8hpp_source.html#l00202">202</a> of file <a class="el" href="policies_2compare_8hpp_source.html">compare.hpp</a>.</p>
</div>
<hr size="1">
<table width="100%">
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1select__coordinate__type.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1select__coordinate__type.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1select__coordinate__type.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -67,7 +67,7 @@
struct ggl::select_coordinate_type< T1, T2 ></h3>
Meta-function selecting the most precise coordinate type of two geometries.
-<p>Definition at line <a class="el" href="select__coordinate__type_8hpp_source.html#l00031">31</a> of file <a class="el" href="select__coordinate__type_8hpp_source.html">select_coordinate_type.hpp</a>.</p>
+<p>Definition at line <a class="el" href="select__coordinate__type_8hpp_source.html#l00043">43</a> of file <a class="el" href="select__coordinate__type_8hpp_source.html">select_coordinate_type.hpp</a>.</p>
<hr><h2>Member Typedef Documentation</h2>
<a class="anchor" name="426688c132982dabdbdd4213bf9f3cfd"></a><!-- doxytag: member="ggl::select_coordinate_type::type" ref="426688c132982dabdbdd4213bf9f3cfd" args="" -->
<div class="memitem">
@@ -84,7 +84,7 @@
<p>
-<p>Definition at line <a class="el" href="select__coordinate__type_8hpp_source.html#l00037">37</a> of file <a class="el" href="select__coordinate__type_8hpp_source.html">select_coordinate_type.hpp</a>.</p>
+<p>Definition at line <a class="el" href="select__coordinate__type_8hpp_source.html#l00049">49</a> of file <a class="el" href="select__coordinate__type_8hpp_source.html">select_coordinate_type.hpp</a>.</p>
</div>
</div><p>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1strategy_1_1compare_1_1circular__comparator.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1strategy_1_1compare_1_1circular__comparator.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/structggl_1_1strategy_1_1compare_1_1circular__comparator.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -71,7 +71,7 @@
</table>
</dl>
-<p>Definition at line <a class="el" href="compare__circular_8hpp_source.html#l00057">57</a> of file <a class="el" href="compare__circular_8hpp_source.html">compare_circular.hpp</a>.</p>
+<p>Definition at line <a class="el" href="compare__circular_8hpp_source.html#l00059">59</a> of file <a class="el" href="compare__circular_8hpp_source.html">compare_circular.hpp</a>.</p>
<hr><h2>Member Function Documentation</h2>
<a class="anchor" name="8c4e91fde0a7ef149e5905d19b0fb56c"></a><!-- doxytag: member="ggl::strategy::compare::circular_comparator::put_in_range" ref="8c4e91fde0a7ef149e5905d19b0fb56c" args="(CoordinateType const &c, double min_border, double max_border)" -->
<div class="memitem">
@@ -108,7 +108,7 @@
<p>
-<p>Definition at line <a class="el" href="compare__circular_8hpp_source.html#l00059">59</a> of file <a class="el" href="compare__circular_8hpp_source.html">compare_circular.hpp</a>.</p>
+<p>Definition at line <a class="el" href="compare__circular_8hpp_source.html#l00061">61</a> of file <a class="el" href="compare__circular_8hpp_source.html">compare_circular.hpp</a>.</p>
</div>
</div><p>
@@ -141,7 +141,7 @@
<p>
-<p>Definition at line <a class="el" href="compare__circular_8hpp_source.html#l00074">74</a> of file <a class="el" href="compare__circular_8hpp_source.html">compare_circular.hpp</a>.</p>
+<p>Definition at line <a class="el" href="compare__circular_8hpp_source.html#l00076">76</a> of file <a class="el" href="compare__circular_8hpp_source.html">compare_circular.hpp</a>.</p>
</div>
</div><p>
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/union_8hpp_source.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/union_8hpp_source.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/union_8hpp_source.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -140,7 +140,7 @@
<a name="l00123"></a>00123 <span class="keywordflow">if</span> (! add)
<a name="l00124"></a>00124 {
<a name="l00125"></a>00125 <span class="keyword">typename</span> <a class="code" href="structggl_1_1point__type.html" title="Meta-function which defines point type of any geometry.">ggl::point_type<GeometryOut>::type</a> point;
-<a name="l00126"></a>00126 <a class="code" href="group__utility.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(holes[v[i].index], point);
+<a name="l00126"></a>00126 <a class="code" href="group__overlay.html#ge415174744cad8935889144cc286a0fb" title="Take point on a border.">ggl::point_on_border</a>(holes[v[i].index], point);
<a name="l00127"></a>00127 add = ! <a class="code" href="group__within.html#g599c2aa76cf2037eb40514e449ace28d" title="Within, examine if a geometry is within another geometry.">ggl::within</a>(point, geometry);
<a name="l00128"></a>00128 }
<a name="l00129"></a>00129 <span class="keywordflow">if</span> (add)
Modified: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/x02__numeric__adaptor__example_8cpp-example.html
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/x02__numeric__adaptor__example_8cpp-example.html (original)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/x02__numeric__adaptor__example_8cpp-example.html 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -144,7 +144,9 @@
<span class="comment">// But the value above cannot be expressed with that precision in IEEE 64 bits.</span>
<span class="comment">// Points can therefore also be assigned by string with ggl::set</span>
+ <span class="comment">// (boost::to is a converser included in the Numeric Adaptor sources)</span>
ggl::set<0>(p, boost::to<type>(std::string(<span class="stringliteral">"123456.78900001"</span>)));
+
<span class="comment">// and streamed (as a string representation)</span>
std::cout << <span class="stringliteral">"x coordinate: "</span> << ggl::get<0>(p) << std::endl;
Modified: sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.cpp
==============================================================================
--- sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.cpp (original)
+++ sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.cpp 2009-11-04 16:55:27 EST (Wed, 04 Nov 2009)
@@ -102,7 +102,9 @@
// But the value above cannot be expressed with that precision in IEEE 64 bits.
// Points can therefore also be assigned by string with ggl::set
+ // (boost::to is a converser included in the Numeric Adaptor sources)
ggl::set<0>(p, boost::to<type>(std::string("123456.78900001")));
+
// and streamed (as a string representation)
std::cout << "x coordinate: " << ggl::get<0>(p) << std::endl;
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