Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r84242 - in branches/release: boost/geometry boost/geometry/algorithms boost/geometry/algorithms/detail boost/geometry/algorithms/detail/overlay boost/geometry/algorithms/detail/sections boost/geometry/arithmetic boost/geometry/core boost/geometry/geometries boost/geometry/geometries/concepts boost/geometry/io boost/geometry/io/dsv boost/geometry/io/svg boost/geometry/io/wkt boost/geometry/iterators boost/geometry/multi boost/geometry/multi/algorithms boost/geometry/multi/algorithms/detail boost/geometry/multi/algorithms/detail/overlay boost/geometry/multi/algorithms/detail/sections boost/geometry/multi/geometries/concepts boost/geometry/multi/io/dsv boost/geometry/multi/io/wkt boost/geometry/policies boost/geometry/policies/relate boost/geometry/strategies boost/geometry/strategies/agnostic boost/geometry/strategies/cartesian boost/geometry/strategies/spherical boost/geometry/strategies/transform boost/geometry/util boost/geometry/views libs/geometry/doc libs/geometry/doc/concept libs/geometry/doc/doxy libs/geometry/doc/doxy/doxygen_input/sourcecode libs/geometry/doc/doxy/doxygen_output/html libs/geometry/doc/generated libs/geometry/doc/html libs/geometry/doc/html/img/index libs/geometry/doc/html/img/index/rtree libs/geometry/doc/index libs/geometry/doc/index/generated libs/geometry/doc/index/rtree libs/geometry/doc/index/src libs/geometry/doc/index/src/examples libs/geometry/doc/index/src/examples/rtree libs/geometry/doc/reference libs/geometry/doc/reference/core libs/geometry/doc/src libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13 libs/geometry/doc/src/docutils/tools/support_status libs/geometry/doc/src/examples/algorithms libs/geometry/example libs/geometry/test libs/geometry/test/algorithms libs/geometry/test/algorithms/detail libs/geometry/test/algorithms/detail/sections libs/geometry/test/algorithms/overlay libs/geometry/test/algorithms/overlay/robustness libs/geometry/test/geometries libs/geometry/test/io/wkt libs/geometry/test/multi/algorithms libs/geometry/test/robustness/convex_hull libs/geometry/test/robustness/overlay/buffer libs/geometry/test/robustness/overlay/linear_areal
From: barend.gehrels_at_[hidden]
Date: 2013-05-12 06:58:39


Author: barendgehrels
Date: 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
New Revision: 84242
URL: http://svn.boost.org/trac/boost/changeset/84242

Log:
[geometry] merge of Boost.Geometry into release branch
Added:
   branches/release/boost/geometry/io/svg/
      - copied from r84239, /trunk/boost/geometry/io/svg/
   branches/release/boost/geometry/io/svg/svg_mapper.hpp
      - copied unchanged from r84239, /trunk/boost/geometry/io/svg/svg_mapper.hpp
   branches/release/boost/geometry/io/svg/write_svg.hpp
      - copied unchanged from r84239, /trunk/boost/geometry/io/svg/write_svg.hpp
   branches/release/boost/geometry/io/svg/write_svg_multi.hpp
      - copied unchanged from r84239, /trunk/boost/geometry/io/svg/write_svg_multi.hpp
   branches/release/libs/geometry/doc/generated/wkt_status.qbk
      - copied unchanged from r82583, /trunk/libs/geometry/doc/generated/wkt_status.qbk
   branches/release/libs/geometry/doc/html/img/index/
      - copied from r84239, /trunk/libs/geometry/doc/html/img/index/
   branches/release/libs/geometry/doc/html/img/index/rtree/
      - copied from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/
   branches/release/libs/geometry/doc/html/img/index/rtree/disjoint.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/disjoint.png
   branches/release/libs/geometry/doc/html/img/index/rtree/intersects.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/intersects.png
   branches/release/libs/geometry/doc/html/img/index/rtree/intersects_mpoly.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/intersects_mpoly.png
   branches/release/libs/geometry/doc/html/img/index/rtree/intersects_poly.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/intersects_poly.png
   branches/release/libs/geometry/doc/html/img/index/rtree/intersects_ring.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/intersects_ring.png
   branches/release/libs/geometry/doc/html/img/index/rtree/knn.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/knn.png
   branches/release/libs/geometry/doc/html/img/index/rtree/linear.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/linear.png
   branches/release/libs/geometry/doc/html/img/index/rtree/overlaps.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/overlaps.png
   branches/release/libs/geometry/doc/html/img/index/rtree/path.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/path.png
   branches/release/libs/geometry/doc/html/img/index/rtree/quadratic.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/quadratic.png
   branches/release/libs/geometry/doc/html/img/index/rtree/rstar.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/rstar.png
   branches/release/libs/geometry/doc/html/img/index/rtree/within.png
      - copied unchanged from r84239, /trunk/libs/geometry/doc/html/img/index/rtree/within.png
   branches/release/libs/geometry/doc/index/ (props changed)
      - copied from r84239, /trunk/libs/geometry/doc/index/
   branches/release/libs/geometry/doc/index/Doxyfile
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/Doxyfile
   branches/release/libs/geometry/doc/index/Jamfile.v2
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/Jamfile.v2
   branches/release/libs/geometry/doc/index/generated/
      - copied from r84239, /trunk/libs/geometry/doc/index/generated/
   branches/release/libs/geometry/doc/index/imports.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/imports.qbk
   branches/release/libs/geometry/doc/index/index.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/index.qbk
   branches/release/libs/geometry/doc/index/introduction.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/introduction.qbk
   branches/release/libs/geometry/doc/index/make_qbk.py
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/make_qbk.py
   branches/release/libs/geometry/doc/index/rtree/
      - copied from r84239, /trunk/libs/geometry/doc/index/rtree/
   branches/release/libs/geometry/doc/index/rtree.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree.qbk
   branches/release/libs/geometry/doc/index/rtree/creation.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree/creation.qbk
   branches/release/libs/geometry/doc/index/rtree/examples.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree/examples.qbk
   branches/release/libs/geometry/doc/index/rtree/exception_safety.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree/exception_safety.qbk
   branches/release/libs/geometry/doc/index/rtree/experimental.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree/experimental.qbk
   branches/release/libs/geometry/doc/index/rtree/introduction.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree/introduction.qbk
   branches/release/libs/geometry/doc/index/rtree/query.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree/query.qbk
   branches/release/libs/geometry/doc/index/rtree/quickstart.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree/quickstart.qbk
   branches/release/libs/geometry/doc/index/rtree/reference.qbk
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/rtree/reference.qbk
   branches/release/libs/geometry/doc/index/src/
      - copied from r84239, /trunk/libs/geometry/doc/index/src/
   branches/release/libs/geometry/doc/index/src/examples/
      - copied from r84239, /trunk/libs/geometry/doc/index/src/examples/
   branches/release/libs/geometry/doc/index/src/examples/Jamfile.v2
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/Jamfile.v2
   branches/release/libs/geometry/doc/index/src/examples/rtree/
      - copied from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/
   branches/release/libs/geometry/doc/index/src/examples/rtree/Jamfile.v2
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/Jamfile.v2
   branches/release/libs/geometry/doc/index/src/examples/rtree/interprocess.cpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/interprocess.cpp
   branches/release/libs/geometry/doc/index/src/examples/rtree/polygons_shared_ptr.cpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/polygons_shared_ptr.cpp
   branches/release/libs/geometry/doc/index/src/examples/rtree/polygons_vector.cpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/polygons_vector.cpp
   branches/release/libs/geometry/doc/index/src/examples/rtree/quick_start.cpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/quick_start.cpp
   branches/release/libs/geometry/doc/index/src/examples/rtree/value_index.cpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/value_index.cpp
   branches/release/libs/geometry/doc/index/src/examples/rtree/value_shared_ptr.cpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/value_shared_ptr.cpp
   branches/release/libs/geometry/doc/index/src/examples/rtree/variants_map.cpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/index/src/examples/rtree/variants_map.cpp
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/license.txt
      - copied unchanged from r84239, /trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/license.txt
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html
      - copied unchanged from r84239, /trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml.hpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml.hpp
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_iterators.hpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_iterators.hpp
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_print.hpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_print.hpp
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_utils.hpp
      - copied unchanged from r84239, /trunk/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_utils.hpp
   branches/release/libs/geometry/test/multi/algorithms/multi_clear.cpp
      - copied unchanged from r82583, /trunk/libs/geometry/test/multi/algorithms/multi_clear.cpp
Properties modified:
   branches/release/boost/geometry/algorithms/ (props changed)
   branches/release/boost/geometry/arithmetic/ (props changed)
   branches/release/boost/geometry/core/ (props changed)
   branches/release/boost/geometry/geometries/ (props changed)
   branches/release/boost/geometry/geometry.hpp (contents, props changed)
   branches/release/boost/geometry/io/ (props changed)
   branches/release/boost/geometry/io/dsv/ (props changed)
   branches/release/boost/geometry/iterators/ (props changed)
   branches/release/boost/geometry/multi/ (props changed)
   branches/release/boost/geometry/policies/ (props changed)
   branches/release/boost/geometry/strategies/ (props changed)
   branches/release/boost/geometry/util/ (props changed)
   branches/release/boost/geometry/views/ (props changed)
   branches/release/libs/geometry/doc/ (props changed)
   branches/release/libs/geometry/doc/Jamfile.v2 (props changed)
   branches/release/libs/geometry/doc/about_documentation.qbk (props changed)
   branches/release/libs/geometry/doc/acknowledgments.qbk (props changed)
   branches/release/libs/geometry/doc/compiling.qbk (props changed)
   branches/release/libs/geometry/doc/concept/ (props changed)
   branches/release/libs/geometry/doc/copyright_note_policy.txt (props changed)
   branches/release/libs/geometry/doc/design_rationale.qbk (props changed)
   branches/release/libs/geometry/doc/doxy/ (props changed)
   branches/release/libs/geometry/doc/generated/ (props changed)
   branches/release/libs/geometry/doc/geometry.qbk (contents, props changed)
   branches/release/libs/geometry/doc/html/ (props changed)
   branches/release/libs/geometry/doc/imports.qbk (props changed)
   branches/release/libs/geometry/doc/introduction.qbk (props changed)
   branches/release/libs/geometry/doc/make_qbk.py (contents, props changed)
   branches/release/libs/geometry/doc/matrix.qbk (props changed)
   branches/release/libs/geometry/doc/quickref.xml (contents, props changed)
   branches/release/libs/geometry/doc/quickstart.qbk (props changed)
   branches/release/libs/geometry/doc/readme.txt (contents, props changed)
   branches/release/libs/geometry/doc/reference/ (props changed)
   branches/release/libs/geometry/doc/reference.qbk (contents, props changed)
   branches/release/libs/geometry/doc/release_notes.qbk (contents, props changed)
   branches/release/libs/geometry/doc/src/ (props changed)
   branches/release/libs/geometry/example/ (props changed)
   branches/release/libs/geometry/test/ (props changed)
Binary files modified:
   branches/release/libs/geometry/doc/doxy/doxygen_output/html/doxygen.png
Text files modified:
   branches/release/boost/geometry/algorithms/append.hpp | 87 +++
   branches/release/boost/geometry/algorithms/area.hpp | 70 ++-
   branches/release/boost/geometry/algorithms/assign.hpp | 4
   branches/release/boost/geometry/algorithms/clear.hpp | 49 +
   branches/release/boost/geometry/algorithms/convert.hpp | 60 ++
   branches/release/boost/geometry/algorithms/correct.hpp | 11
   branches/release/boost/geometry/algorithms/detail/assign_box_corners.hpp | 10
   branches/release/boost/geometry/algorithms/detail/occupation_info.hpp | 186 ++++----
   branches/release/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp | 14
   branches/release/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp | 30
   branches/release/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp | 142 ++++--
   branches/release/boost/geometry/algorithms/detail/overlay/get_turns.hpp | 21
   branches/release/boost/geometry/algorithms/detail/overlay/overlay.hpp | 11
   branches/release/boost/geometry/algorithms/detail/overlay/traverse.hpp | 7
   branches/release/boost/geometry/algorithms/detail/sections/sectionalize.hpp | 24 +
   branches/release/boost/geometry/algorithms/disjoint.hpp | 14
   branches/release/boost/geometry/algorithms/distance.hpp | 2
   branches/release/boost/geometry/algorithms/equals.hpp | 120 +++++
   branches/release/boost/geometry/algorithms/for_each.hpp | 18
   branches/release/boost/geometry/algorithms/length.hpp | 88 ++++
   branches/release/boost/geometry/algorithms/num_points.hpp | 56 ++
   branches/release/boost/geometry/algorithms/within.hpp | 4
   branches/release/boost/geometry/core/access.hpp | 27
   branches/release/boost/geometry/core/coordinate_dimension.hpp | 2
   branches/release/boost/geometry/core/coordinate_system.hpp | 8
   branches/release/boost/geometry/core/coordinate_type.hpp | 14
   branches/release/boost/geometry/core/tag.hpp | 2
   branches/release/boost/geometry/geometries/concepts/check.hpp | 70 ++
   branches/release/boost/geometry/geometries/point.hpp | 10
   branches/release/boost/geometry/geometry.hpp | 1
   branches/release/boost/geometry/io/wkt/read.hpp | 11
   branches/release/boost/geometry/io/wkt/write.hpp | 87 +++-
   branches/release/boost/geometry/iterators/ever_circling_iterator.hpp | 2
   branches/release/boost/geometry/multi/algorithms/append.hpp | 1
   branches/release/boost/geometry/multi/algorithms/area.hpp | 2
   branches/release/boost/geometry/multi/algorithms/centroid.hpp | 2
   branches/release/boost/geometry/multi/algorithms/clear.hpp | 1
   branches/release/boost/geometry/multi/algorithms/convert.hpp | 1
   branches/release/boost/geometry/multi/algorithms/correct.hpp | 1
   branches/release/boost/geometry/multi/algorithms/covered_by.hpp | 1
   branches/release/boost/geometry/multi/algorithms/detail/for_each_range.hpp | 1
   branches/release/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp | 1
   branches/release/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp | 1
   branches/release/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp | 2
   branches/release/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp | 2
   branches/release/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp | 3
   branches/release/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp | 1
   branches/release/boost/geometry/multi/algorithms/detail/point_on_border.hpp | 1
   branches/release/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp | 1
   branches/release/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp | 2
   branches/release/boost/geometry/multi/algorithms/disjoint.hpp | 3
   branches/release/boost/geometry/multi/algorithms/distance.hpp | 1
   branches/release/boost/geometry/multi/algorithms/envelope.hpp | 2
   branches/release/boost/geometry/multi/algorithms/equals.hpp | 1
   branches/release/boost/geometry/multi/algorithms/for_each.hpp | 2
   branches/release/boost/geometry/multi/algorithms/intersection.hpp | 3
   branches/release/boost/geometry/multi/algorithms/length.hpp | 1
   branches/release/boost/geometry/multi/algorithms/num_geometries.hpp | 2
   branches/release/boost/geometry/multi/algorithms/num_interior_rings.hpp | 1
   branches/release/boost/geometry/multi/algorithms/num_points.hpp | 1
   branches/release/boost/geometry/multi/algorithms/perimeter.hpp | 1
   branches/release/boost/geometry/multi/algorithms/reverse.hpp | 2
   branches/release/boost/geometry/multi/algorithms/simplify.hpp | 2
   branches/release/boost/geometry/multi/algorithms/transform.hpp | 1
   branches/release/boost/geometry/multi/algorithms/unique.hpp | 1
   branches/release/boost/geometry/multi/algorithms/within.hpp | 1
   branches/release/boost/geometry/multi/geometries/concepts/check.hpp | 12
   branches/release/boost/geometry/multi/io/dsv/write.hpp | 3
   branches/release/boost/geometry/multi/io/wkt/read.hpp | 1
   branches/release/boost/geometry/multi/io/wkt/write.hpp | 7
   branches/release/boost/geometry/policies/relate/direction.hpp | 4
   branches/release/boost/geometry/policies/relate/intersection_points.hpp | 8
   branches/release/boost/geometry/policies/relate/tupled.hpp | 4
   branches/release/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp | 8
   branches/release/boost/geometry/strategies/cartesian/cart_intersect.hpp | 8
   branches/release/boost/geometry/strategies/cartesian/distance_projected_point.hpp | 1
   branches/release/boost/geometry/strategies/side_info.hpp | 10
   branches/release/boost/geometry/strategies/spherical/distance_haversine.hpp | 8
   branches/release/boost/geometry/strategies/strategy_transform.hpp | 44 +-
   branches/release/boost/geometry/strategies/transform/map_transformer.hpp | 10
   branches/release/boost/geometry/strategies/transform/matrix_transformers.hpp | 4
   branches/release/boost/geometry/util/math.hpp | 41 +
   branches/release/boost/geometry/util/rational.hpp | 24
   branches/release/boost/geometry/views/closeable_view.hpp | 9
   branches/release/boost/geometry/views/identity_view.hpp | 8
   branches/release/libs/geometry/doc/concept/polygon.qbk | 4
   branches/release/libs/geometry/doc/doxy/Doxyfile | 5
   branches/release/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.cpp | 4
   branches/release/libs/geometry/doc/doxy/doxygen_output/html/doxygen.css | 591 +++++++++++++++++++++++-----
   branches/release/libs/geometry/doc/doxy/doxygen_output/html/tabs.css | 1
   branches/release/libs/geometry/doc/geometry.qbk | 14
   branches/release/libs/geometry/doc/html/index.html | 25
   branches/release/libs/geometry/doc/make_qbk.py | 7
   branches/release/libs/geometry/doc/quickref.xml | 124 ++++++
   branches/release/libs/geometry/doc/readme.txt | 7
   branches/release/libs/geometry/doc/reference.qbk | 29 +
   branches/release/libs/geometry/doc/reference/core/max_corner.qbk | 4
   branches/release/libs/geometry/doc/reference/core/min_corner.qbk | 4
   branches/release/libs/geometry/doc/release_notes.qbk | 28 +
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/configuration.hpp | 8
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp | 30 +
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp | 101 +++-
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp | 224 +++++++++-
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/file_to_string.hpp | 3
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp | 3
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp | 808 +++++++++++++++++++++++++++++++++++++++
   branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp | 3
   branches/release/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp | 4
   branches/release/libs/geometry/doc/src/examples/algorithms/create_svg_overlay.hpp | 2
   branches/release/libs/geometry/doc/src/examples/algorithms/create_svg_two.hpp | 2
   branches/release/libs/geometry/example/05_a_overlay_polygon_example.cpp | 2
   branches/release/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp | 2
   branches/release/libs/geometry/example/06_b_transformation_example.cpp | 2
   branches/release/libs/geometry/example/07_a_graph_route_example.cpp | 14
   branches/release/libs/geometry/example/07_b_graph_route_example.cpp | 13
   branches/release/libs/geometry/test/Jamfile.v2 | 1
   branches/release/libs/geometry/test/algorithms/append.cpp | 33 +
   branches/release/libs/geometry/test/algorithms/detail/partition.cpp | 2
   branches/release/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp | 2
   branches/release/libs/geometry/test/algorithms/difference.cpp | 13
   branches/release/libs/geometry/test/algorithms/disjoint.cpp | 19
   branches/release/libs/geometry/test/algorithms/intersection.cpp | 9
   branches/release/libs/geometry/test/algorithms/overlay/assemble.cpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/ccw_traverse.cpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/dissolver.cpp | 4
   branches/release/libs/geometry/test/algorithms/overlay/enrich_intersection_points.cpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/get_turn_info.cpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/get_turns.cpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/overlay_cases.hpp | 46 ++
   branches/release/libs/geometry/test/algorithms/overlay/overlay_common.hpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/relative_order.cpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/self_intersection_points.cpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/split_rings.cpp | 2
   branches/release/libs/geometry/test/algorithms/overlay/traverse.cpp | 35 +
   branches/release/libs/geometry/test/algorithms/overlay/traverse_gmp.cpp | 2
   branches/release/libs/geometry/test/algorithms/test_convert.hpp | 17
   branches/release/libs/geometry/test/algorithms/test_difference.hpp | 2
   branches/release/libs/geometry/test/algorithms/test_equals.hpp | 35 +
   branches/release/libs/geometry/test/algorithms/test_intersection.hpp | 2
   branches/release/libs/geometry/test/algorithms/test_length.hpp | 5
   branches/release/libs/geometry/test/algorithms/test_union.hpp | 2
   branches/release/libs/geometry/test/algorithms/union.cpp | 36 +
   branches/release/libs/geometry/test/algorithms/within.cpp | 7
   branches/release/libs/geometry/test/geometries/Jamfile.v2 | 2
   branches/release/libs/geometry/test/io/wkt/wkt.cpp | 16
   branches/release/libs/geometry/test/multi/algorithms/multi_num_points.cpp | 16
   branches/release/libs/geometry/test/robustness/convex_hull/random_multi_points.cpp | 2
   branches/release/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.cpp | 2
   branches/release/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.cpp | 2
   150 files changed, 3168 insertions(+), 757 deletions(-)

Modified: branches/release/boost/geometry/algorithms/append.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/append.hpp (original)
+++ branches/release/boost/geometry/algorithms/append.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -14,17 +14,18 @@
 #ifndef BOOST_GEOMETRY_ALGORITHMS_APPEND_HPP
 #define BOOST_GEOMETRY_ALGORITHMS_APPEND_HPP
 
-#include <boost/range.hpp>
-
 
+#include <boost/geometry/algorithms/num_interior_rings.hpp>
+#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
 #include <boost/geometry/core/access.hpp>
 #include <boost/geometry/core/mutable_range.hpp>
 #include <boost/geometry/core/point_type.hpp>
 #include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
 #include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/geometry/geometries/variant.hpp>
+#include <boost/range.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
 
 
 namespace boost { namespace geometry
@@ -174,7 +175,7 @@
         : detail::append::range_to_polygon<Polygon, Range>
 {};
 
-}
+} // namespace splitted_dispatch
 
 
 // Default: append a range (or linestring or ring or whatever) to any geometry
@@ -193,6 +194,69 @@
     : splitted_dispatch::append_point<typename tag<Geometry>::type, Geometry, RangeOrPoint>
 {};
 
+template <typename Geometry>
+struct devarianted_append
+{
+ template <typename RangeOrPoint>
+ static inline void apply(Geometry& geometry,
+ RangeOrPoint const& range_or_point,
+ int ring_index,
+ int multi_index)
+ {
+ concept::check<Geometry>();
+ append<Geometry, RangeOrPoint>::apply(geometry,
+ range_or_point,
+ ring_index,
+ multi_index);
+ }
+};
+
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct devarianted_append<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename RangeOrPoint>
+ struct visitor: boost::static_visitor<void>
+ {
+ RangeOrPoint const& m_range_or_point;
+ int m_ring_index;
+ int m_multi_index;
+
+ visitor(RangeOrPoint const& range_or_point,
+ int ring_index,
+ int multi_index):
+ m_range_or_point(range_or_point),
+ m_ring_index(ring_index),
+ m_multi_index(multi_index)
+ {}
+
+ template <typename Geometry>
+ void operator()(Geometry& geometry) const
+ {
+ concept::check<Geometry>();
+ append<Geometry, RangeOrPoint>::apply(geometry,
+ m_range_or_point,
+ m_ring_index,
+ m_multi_index);
+ }
+ };
+
+ template <typename RangeOrPoint>
+ static inline void apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& variant_geometry,
+ RangeOrPoint const& range_or_point,
+ int ring_index,
+ int multi_index)
+ {
+ apply_visitor(
+ visitor<RangeOrPoint>(
+ range_or_point,
+ ring_index,
+ multi_index
+ ),
+ variant_geometry
+ );
+ }
+};
 
 
 } // namespace dispatch
@@ -215,15 +279,10 @@
  */
 template <typename Geometry, typename RangeOrPoint>
 inline void append(Geometry& geometry, RangeOrPoint const& range_or_point,
- int ring_index = -1, int multi_index = 0)
+ int ring_index = -1, int multi_index = 0)
 {
- concept::check<Geometry>();
-
- dispatch::append
- <
- Geometry,
- RangeOrPoint
- >::apply(geometry, range_or_point, ring_index, multi_index);
+ dispatch::devarianted_append<Geometry>
+ ::apply(geometry, range_or_point, ring_index, multi_index);
 }
 
 

Modified: branches/release/boost/geometry/algorithms/area.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/area.hpp (original)
+++ branches/release/boost/geometry/algorithms/area.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,6 +20,7 @@
 #include <boost/range/metafunctions.hpp>
 #include <boost/variant/static_visitor.hpp>
 #include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
 
 #include <boost/geometry/core/closure.hpp>
 #include <boost/geometry/core/exterior_ring.hpp>
@@ -28,7 +29,6 @@
 #include <boost/geometry/core/ring_type.hpp>
 
 #include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/geometries/variant.hpp>
 
 #include <boost/geometry/algorithms/detail/calculate_null.hpp>
 #include <boost/geometry/algorithms/detail/calculate_sum.hpp>
@@ -143,32 +143,6 @@
 };
 
 
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct area<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, void>
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<typename Strategy::return_type>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy): m_strategy(strategy) {}
-
- template <typename Geometry>
- typename Strategy::return_type operator()(Geometry const& geometry) const
- {
- return dispatch::area<Geometry>::apply(geometry, m_strategy);
- }
- };
-
- template <typename Variant, typename Strategy>
- static inline typename Strategy::return_type
- apply(Variant const& variant_geometry, Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), variant_geometry);
- }
-};
-
-
 template <typename Geometry>
 struct area<Geometry, box_tag> : detail::area::box_area
 {};
@@ -202,6 +176,44 @@
 };
 
 
+template <typename Geometry>
+struct devarianted_area
+{
+ template <typename Strategy>
+ static inline typename Strategy::return_type apply(Geometry const& geometry,
+ Strategy const& strategy)
+ {
+ return area<Geometry>::apply(geometry, strategy);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct devarianted_area<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename Strategy>
+ struct visitor: boost::static_visitor<typename Strategy::return_type>
+ {
+ Strategy const& m_strategy;
+
+ visitor(Strategy const& strategy): m_strategy(strategy) {}
+
+ template <typename Geometry>
+ typename Strategy::return_type operator()(Geometry const& geometry) const
+ {
+ return devarianted_area<Geometry>::apply(geometry, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline typename Strategy::return_type
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ Strategy const& strategy)
+ {
+ return boost::apply_visitor(visitor<Strategy>(strategy), geometry);
+ }
+};
+
+
 } // namespace dispatch
 #endif // DOXYGEN_NO_DISPATCH
 
@@ -242,7 +254,7 @@
 
     // detail::throw_on_empty_input(geometry);
         
- return dispatch::area<Geometry>::apply(geometry, strategy_type());
+ return dispatch::devarianted_area<Geometry>::apply(geometry, strategy_type());
 }
 
 /*!
@@ -277,7 +289,7 @@
 
     // detail::throw_on_empty_input(geometry);
     
- return dispatch::area<Geometry>::apply(geometry, strategy);
+ return dispatch::devarianted_area<Geometry>::apply(geometry, strategy);
 }
 
 

Modified: branches/release/boost/geometry/algorithms/assign.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/assign.hpp (original)
+++ branches/release/boost/geometry/algorithms/assign.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -123,8 +123,8 @@
 
 /*!
 \brief Assigns one geometry to another geometry
-\details The assign algorithm assigns one geometry, e.g. a BOX, to another geometry, e.g. a RING. This only
-if it is possible and applicable.
+\details The assign algorithm assigns one geometry, e.g. a BOX, to another
+geometry, e.g. a RING. This only works if it is possible and applicable.
 \ingroup assign
 \tparam Geometry1 \tparam_geometry
 \tparam Geometry2 \tparam_geometry

Modified: branches/release/boost/geometry/algorithms/clear.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/clear.hpp (original)
+++ branches/release/boost/geometry/algorithms/clear.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -14,16 +14,18 @@
 #ifndef BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP
 #define BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP
 
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/remove_const.hpp>
 
+#include <boost/geometry/algorithms/not_implemented.hpp>
 #include <boost/geometry/core/access.hpp>
 #include <boost/geometry/core/exterior_ring.hpp>
 #include <boost/geometry/core/interior_rings.hpp>
 #include <boost/geometry/core/mutable_range.hpp>
 #include <boost/geometry/core/tag_cast.hpp>
-
 #include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
 
 
 namespace boost { namespace geometry
@@ -72,6 +74,7 @@
     }
 };
 
+
 }} // namespace detail::clear
 #endif // DOXYGEN_NO_DETAIL
 
@@ -84,14 +87,8 @@
     typename Geometry,
     typename Tag = typename tag_cast<typename tag<Geometry>::type, multi_tag>::type
>
-struct clear
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
+struct clear: not_implemented<Tag>
+{};
 
 // Point/box/segment do not have clear. So specialize to do nothing.
 template <typename Geometry>
@@ -127,6 +124,34 @@
 {};
 
 
+template <typename Geometry>
+struct devarianted_clear
+{
+ static inline void apply(Geometry& geometry)
+ {
+ clear<Geometry>::apply(geometry);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct devarianted_clear<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: static_visitor<void>
+ {
+ template <typename Geometry>
+ inline void operator()(Geometry& geometry) const
+ {
+ clear<Geometry>::apply(geometry);
+ }
+ };
+
+ static inline void apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry)
+ {
+ apply_visitor(visitor(), geometry);
+ }
+};
+
+
 } // namespace dispatch
 #endif // DOXYGEN_NO_DISPATCH
 
@@ -149,7 +174,7 @@
 {
     concept::check<Geometry>();
 
- dispatch::clear<Geometry>::apply(geometry);
+ dispatch::devarianted_clear<Geometry>::apply(geometry);
 }
 
 

Modified: branches/release/boost/geometry/algorithms/convert.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/convert.hpp (original)
+++ branches/release/boost/geometry/algorithms/convert.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -40,10 +40,22 @@
 #include <boost/geometry/core/point_order.hpp>
 #include <boost/geometry/geometries/concepts/check.hpp>
 
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
 
 namespace boost { namespace geometry
 {
 
+// Silence warning C4127: conditional expression is constant
+// Silence warning C4512: assignment operator could not be generated
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127 4512)
+#endif
+
+
 #ifndef DOXYGEN_NO_DETAIL
 namespace detail { namespace conversion
 {
@@ -377,6 +389,44 @@
 };
 
 
+template <typename Geometry1, typename Geometry2>
+struct devarianted_convert
+{
+ static inline void apply(Geometry1 const& geometry1, Geometry2& geometry2)
+ {
+ concept::check_concepts_and_equal_dimensions<Geometry1 const, Geometry2>();
+ convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct devarianted_convert<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ struct visitor: static_visitor<void>
+ {
+ Geometry2& m_geometry2;
+
+ visitor(Geometry2& geometry2)
+ : m_geometry2(geometry2)
+ {}
+
+ template <typename Geometry1>
+ inline void operator()(Geometry1 const& geometry1) const
+ {
+ devarianted_convert<Geometry1, Geometry2>::apply(geometry1, m_geometry2);
+ }
+ };
+
+ static inline void apply(
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2& geometry2
+ )
+ {
+ apply_visitor(visitor(geometry2), geometry1);
+ }
+};
+
+
 } // namespace dispatch
 #endif // DOXYGEN_NO_DISPATCH
 
@@ -384,7 +434,7 @@
 /*!
 \brief Converts one geometry to another geometry
 \details The convert algorithm converts one geometry, e.g. a BOX, to another
-geometry, e.g. a RING. This only if it is possible and applicable.
+geometry, e.g. a RING. This only works if it is possible and applicable.
 If the point-order is different, or the closure is different between two
 geometry types, it will be converted correctly by explicitly reversing the
 points or closing or opening the polygon rings.
@@ -399,13 +449,13 @@
 template <typename Geometry1, typename Geometry2>
 inline void convert(Geometry1 const& geometry1, Geometry2& geometry2)
 {
- concept::check_concepts_and_equal_dimensions<Geometry1 const, Geometry2>();
-
- dispatch::convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ dispatch::devarianted_convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
 }
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
 
 }} // namespace boost::geometry
 
-
 #endif // BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP

Modified: branches/release/boost/geometry/algorithms/correct.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/correct.hpp (original)
+++ branches/release/boost/geometry/algorithms/correct.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -40,6 +40,12 @@
 namespace boost { namespace geometry
 {
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
 #ifndef DOXYGEN_NO_DETAIL
 namespace detail { namespace correct
 {
@@ -137,7 +143,7 @@
             {
                 geometry::append(r, *boost::begin(r));
             }
- if (! disjoint && geometry::closure<Ring>::value != closed)
+ if (! disjoint && s != closed)
             {
                 // Open it by removing last point
                 geometry::traits::resize<Ring>::apply(r, boost::size(r) - 1);
@@ -256,6 +262,9 @@
     dispatch::correct<Geometry>::apply(geometry);
 }
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
 
 }} // namespace boost::geometry
 

Modified: branches/release/boost/geometry/algorithms/detail/assign_box_corners.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/assign_box_corners.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/assign_box_corners.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -67,6 +67,13 @@
             <max_corner, max_corner>(box, upper_right);
 }
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
+
 template <bool Reverse, typename Box, typename Range>
 inline void assign_box_corners_oriented(Box const& box, Range& corners)
 {
@@ -81,6 +88,9 @@
         assign_box_corners(box, corners[0], corners[3], corners[1], corners[2]);
     }
 }
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
 
 
 } // namespace detail

Modified: branches/release/boost/geometry/algorithms/detail/occupation_info.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/occupation_info.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/occupation_info.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -91,26 +91,26 @@
 template <typename Iterator, typename Vector>
 inline Iterator advance_circular(Iterator it, Vector const& vector, segment_identifier& seg_id, bool forward = true)
 {
- int const increment = forward ? 1 : -1;
- if (it == boost::begin(vector) && increment < 0)
- {
- it = boost::end(vector);
+ int const increment = forward ? 1 : -1;
+ if (it == boost::begin(vector) && increment < 0)
+ {
+ it = boost::end(vector);
         seg_id.segment_index = boost::size(vector);
- }
- it += increment;
+ }
+ it += increment;
     seg_id.segment_index += increment;
- if (it == boost::end(vector))
- {
+ if (it == boost::end(vector))
+ {
         seg_id.segment_index = 0;
- it = boost::begin(vector);
- }
- return it;
+ it = boost::begin(vector);
+ }
+ return it;
 }
 
 template <typename Point, typename T>
 struct angle_info
 {
- typedef T angle_type;
+ typedef T angle_type;
     typedef Point point_type;
 
     segment_identifier seg_id;
@@ -125,70 +125,70 @@
 template <typename AngleInfo>
 class occupation_info
 {
- typedef std::vector<AngleInfo> collection_type;
+ typedef std::vector<AngleInfo> collection_type;
 
- struct angle_sort
- {
- inline bool operator()(AngleInfo const& left, AngleInfo const& right) const
- {
- // In this case we can compare even double using equals
- // return geometry::math::equals(left.angle, right.angle)
- return left.angle == right.angle
- ? int(left.incoming) < int(right.incoming)
- : left.angle < right.angle
- ;
- }
- };
+ struct angle_sort
+ {
+ inline bool operator()(AngleInfo const& left, AngleInfo const& right) const
+ {
+ // In this case we can compare even double using equals
+ // return geometry::math::equals(left.angle, right.angle)
+ return left.angle == right.angle
+ ? int(left.incoming) < int(right.incoming)
+ : left.angle < right.angle
+ ;
+ }
+ };
 
 public :
     collection_type angles;
 private :
     bool m_occupied;
- bool m_calculated;
+ bool m_calculated;
 
- inline bool is_occupied()
- {
- if (boost::size(angles) <= 1)
- {
- return false;
- }
-
- std::sort(angles.begin(), angles.end(), angle_sort());
-
- typedef geometry::closing_iterator<collection_type const> closing_iterator;
- closing_iterator vit(angles);
- closing_iterator end(angles, true);
-
- closing_iterator prev = vit++;
- for( ; vit != end; prev = vit++)
- {
- if (! geometry::math::equals(prev->angle, vit->angle)
- && ! prev->incoming
- && vit->incoming)
- {
- return false;
- }
- }
- return true;
- }
+ inline bool is_occupied()
+ {
+ if (boost::size(angles) <= 1)
+ {
+ return false;
+ }
+
+ std::sort(angles.begin(), angles.end(), angle_sort());
+
+ typedef geometry::closing_iterator<collection_type const> closing_iterator;
+ closing_iterator vit(angles);
+ closing_iterator end(angles, true);
+
+ closing_iterator prev = vit++;
+ for( ; vit != end; prev = vit++)
+ {
+ if (! geometry::math::equals(prev->angle, vit->angle)
+ && ! prev->incoming
+ && vit->incoming)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
 
 public :
     inline occupation_info()
         : m_occupied(false)
- , m_calculated(false)
+ , m_calculated(false)
     {}
 
- template <typename PointC, typename Point1, typename Point2>
- inline void add(PointC const& map_point, Point1 const& direction_point, Point2 const& intersection_point,
+ template <typename PointC, typename Point1, typename Point2>
+ inline void add(PointC const& map_point, Point1 const& direction_point, Point2 const& intersection_point,
                     int turn_index, int operation_index,
                     segment_identifier const& seg_id, bool incoming)
- {
+ {
         //std::cout << "-> adding angle " << geometry::wkt(direction_point) << " .. " << geometry::wkt(intersection_point) << " " << int(incoming) << std::endl;
- if (geometry::equals(direction_point, intersection_point))
- {
- //std::cout << "EQUAL! Skipping" << std::endl;
- return;
- }
+ if (geometry::equals(direction_point, intersection_point))
+ {
+ //std::cout << "EQUAL! Skipping" << std::endl;
+ return;
+ }
 
         AngleInfo info;
         info.incoming = incoming;
@@ -200,18 +200,18 @@
         info.direction_point = direction_point;
         angles.push_back(info);
 
- m_calculated = false;
- }
+ m_calculated = false;
+ }
 
- inline bool occupied()
- {
- if (! m_calculated)
- {
- m_occupied = is_occupied();
- m_calculated = true;
- }
- return m_occupied;
- }
+ inline bool occupied()
+ {
+ if (! m_calculated)
+ {
+ m_occupied = is_occupied();
+ m_calculated = true;
+ }
+ return m_occupied;
+ }
 
     template <typename Turns, typename TurnSegmentIndices>
     inline void get_left_turns(
@@ -226,7 +226,7 @@
 
 template <typename Point, typename Ring, typename Info>
 inline void add_incoming_and_outgoing_angles(Point const& map_point, Point const& intersection_point,
- Ring const& ring,
+ Ring const& ring,
                 int turn_index,
                 int operation_index,
                 segment_identifier seg_id,
@@ -237,43 +237,43 @@
             Ring const
>::type iterator_type;
 
- int const n = boost::size(ring);
- if (seg_id.segment_index >= n || seg_id.segment_index < 0)
- {
- return;
- }
+ int const n = boost::size(ring);
+ if (seg_id.segment_index >= n || seg_id.segment_index < 0)
+ {
+ return;
+ }
 
     segment_identifier real_seg_id = seg_id;
- iterator_type it = boost::begin(ring) + seg_id.segment_index;
+ iterator_type it = boost::begin(ring) + seg_id.segment_index;
 
     // TODO: if we use turn-info ("to", "middle"), we know if to advance without resorting to equals
     relaxed_less<Point> comparator;
 
     if (comparator.equals(intersection_point, *it))
     {
- // It should be equal only once. But otherwise we skip it (in "add")
- it = advance_circular(it, ring, seg_id, false);
+ // It should be equal only once. But otherwise we skip it (in "add")
+ it = advance_circular(it, ring, seg_id, false);
     }
 
- info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, true);
+ info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, true);
 
     if (comparator.equals(intersection_point, *it))
     {
- it = advance_circular(it, ring, real_seg_id);
- }
- else
- {
- // Don't upgrade the ID
- it = advance_circular(it, ring, seg_id);
- }
+ it = advance_circular(it, ring, real_seg_id);
+ }
+ else
+ {
+ // Don't upgrade the ID
+ it = advance_circular(it, ring, seg_id);
+ }
     for (int defensive_check = 0;
- comparator.equals(intersection_point, *it) && defensive_check < n;
- defensive_check++)
+ comparator.equals(intersection_point, *it) && defensive_check < n;
+ defensive_check++)
     {
- it = advance_circular(it, ring, real_seg_id);
+ it = advance_circular(it, ring, real_seg_id);
     }
 
- info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, false);
+ info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, false);
 }
 
 
@@ -287,7 +287,7 @@
     typedef std::map<Point, OccupationInfo, relaxed_less<Point> > map_type;
 
     map_type map;
- std::set<int> turn_indices;
+ std::set<int> turn_indices;
 
     inline OccupationInfo& find_or_insert(Point const& point, Point& mapped_point)
     {

Modified: branches/release/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -35,13 +35,13 @@
     static bool const include_opposite = false;
 
     template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo
- >
+ <
+ typename Info,
+ typename Point1,
+ typename Point2,
+ typename IntersectionInfo,
+ typename DirInfo
+ >
     static inline void apply(Info& info, Point1 const& p1, Point2 const& p2,
                 IntersectionInfo const&, DirInfo const&)
     {

Modified: branches/release/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -134,25 +134,27 @@
         segment_identifier const& sl = left.subject.seg_id;
         segment_identifier const& sr = right.subject.seg_id;
 
- if (sl == sr
- && geometry::math::equals(left.subject.enriched.distance
- , right.subject.enriched.distance))
+ if (sl == sr)
         {
             // Both left and right are located on the SAME segment.
-
- // First check "real" intersection (crosses)
- // -> distance zero due to precision, solve it by sorting
- if (m_turn_points[left.index].method == method_crosses
- && m_turn_points[right.index].method == method_crosses)
+ typedef typename geometry::coordinate_type<Geometry1>::type coordinate_type;
+ coordinate_type diff = geometry::math::abs(left.subject.enriched.distance - right.subject.enriched.distance);
+ if (diff < geometry::math::relaxed_epsilon<coordinate_type>(10))
             {
- return consider_relative_order(left, right);
- }
+ // First check "real" intersection (crosses)
+ // -> distance zero due to precision, solve it by sorting
+ if (m_turn_points[left.index].method == method_crosses
+ && m_turn_points[right.index].method == method_crosses)
+ {
+ return consider_relative_order(left, right);
+ }
 
- // If that is not the case, cluster it later on.
- // Indicate that this is necessary.
- *m_clustered = true;
+ // If that is not the case, cluster it later on.
+ // Indicate that this is necessary.
+ *m_clustered = true;
 
- return left.index < right.index;
+ return left.subject.enriched.distance < right.subject.enriched.distance;
+ }
         }
         return sl == sr
             ? left.subject.enriched.distance < right.subject.enriched.distance

Modified: branches/release/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,6 +20,13 @@
 #include <boost/geometry/geometries/segment.hpp>
 
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
+
 namespace boost { namespace geometry
 {
 
@@ -485,26 +492,26 @@
         typename DirInfo
>
     static inline void apply(Point1 const& pi, Point2 const& qi,
- /* by value: */ TurnInfo tp,
+ /* by value: */ TurnInfo tp,
                 OutputIterator& out,
                 IntersectionInfo const& intersection_info,
                 DirInfo const& dir_info)
     {
         // For equal-opposite segments, normally don't do anything.
- if (AssignPolicy::include_opposite)
- {
- tp.method = method_equal;
- for (int i = 0; i < 2; i++)
- {
- tp.operations[i].operation = operation_opposite;
- }
- for (unsigned int i = 0; i < intersection_info.count; i++)
- {
- geometry::convert(intersection_info.intersections[i], tp.point);
- AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
- *out++ = tp;
- }
- }
+ if (AssignPolicy::include_opposite)
+ {
+ tp.method = method_equal;
+ for (int i = 0; i < 2; i++)
+ {
+ tp.operations[i].operation = operation_opposite;
+ }
+ for (unsigned int i = 0; i < intersection_info.count; i++)
+ {
+ geometry::convert(intersection_info.intersections[i], tp.point);
+ AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
+ *out++ = tp;
+ }
+ }
     }
 };
 
@@ -678,10 +685,27 @@
         typename IntersectionInfo
>
     static inline bool set_tp(Point const& ri, Point const& rj, Point const& rk,
+ bool const handle_robustness, Point const& si, Point const& sj,
                 TurnInfo& tp, IntersectionInfo const& intersection_info)
     {
- int const side_rk_r = SideStrategy::apply(ri, rj, rk);
- operation_type blocked = operation_blocked;
+ int side_rk_r = SideStrategy::apply(ri, rj, rk);
+
+ if (handle_robustness)
+ {
+ int const side_rk_s = SideStrategy::apply(si, sj, rk);
+
+ // For Robustness: also calculate rk w.r.t. the other line. Because they are collinear opposite, that direction should be the reverse of the first direction.
+ // If this is not the case, we make it all-collinear, so zero
+ if (side_rk_r != 0 && side_rk_r != -side_rk_s)
+ {
+#ifdef BOOST_GEOMETRY_DEBUG_ROBUSTNESS
+ std::cout << "Robustness correction: " << side_rk_r << " / " << side_rk_s << std::endl;
+#endif
+ side_rk_r = 0;
+ }
+ }
+
+ operation_type blocked = operation_blocked;
         switch(side_rk_r)
         {
 
@@ -699,16 +723,16 @@
                 // two operations blocked, so the whole point does not need
                 // to be generated.
                 // So return false to indicate nothing is to be done.
- if (AssignPolicy::include_opposite)
- {
- tp.operations[Index].operation = operation_opposite;
- blocked = operation_opposite;
- }
- else
- {
- return false;
- }
- break;
+ if (AssignPolicy::include_opposite)
+ {
+ tp.operations[Index].operation = operation_opposite;
+ blocked = operation_opposite;
+ }
+ else
+ {
+ return false;
+ }
+ break;
         }
 
         // The other direction is always blocked when collinear opposite
@@ -747,7 +771,7 @@
 
         // If P arrives within Q, there is a turn dependent on P
         if (dir_info.arrival[0] == 1
- && set_tp<0>(pi, pj, pk, tp, intersection_info))
+ && set_tp<0>(pi, pj, pk, true, qi, qj, tp, intersection_info))
         {
             AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
             *out++ = tp;
@@ -755,30 +779,30 @@
 
         // If Q arrives within P, there is a turn dependent on Q
         if (dir_info.arrival[1] == 1
- && set_tp<1>(qi, qj, qk, tp, intersection_info))
+ && set_tp<1>(qi, qj, qk, false, pi, pj, tp, intersection_info))
         {
             AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
             *out++ = tp;
         }
 
- if (AssignPolicy::include_opposite)
- {
- // Handle cases not yet handled above
- if ((dir_info.arrival[1] == -1 && dir_info.arrival[0] == 0)
- || (dir_info.arrival[0] == -1 && dir_info.arrival[1] == 0))
- {
- for (int i = 0; i < 2; i++)
- {
- tp.operations[i].operation = operation_opposite;
- }
- for (unsigned int i = 0; i < intersection_info.count; i++)
- {
- geometry::convert(intersection_info.intersections[i], tp.point);
- AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
- *out++ = tp;
- }
- }
- }
+ if (AssignPolicy::include_opposite)
+ {
+ // Handle cases not yet handled above
+ if ((dir_info.arrival[1] == -1 && dir_info.arrival[0] == 0)
+ || (dir_info.arrival[0] == -1 && dir_info.arrival[1] == 0))
+ {
+ for (int i = 0; i < 2; i++)
+ {
+ tp.operations[i].operation = operation_opposite;
+ }
+ for (unsigned int i = 0; i < intersection_info.count; i++)
+ {
+ geometry::convert(intersection_info.intersections[i], tp.point);
+ AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
+ *out++ = tp;
+ }
+ }
+ }
 
     }
 };
@@ -846,13 +870,13 @@
     static bool const include_opposite = false;
 
     template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo
- >
+ <
+ typename Info,
+ typename Point1,
+ typename Point2,
+ typename IntersectionInfo,
+ typename DirInfo
+ >
     static inline void apply(Info& , Point1 const& , Point2 const&, IntersectionInfo const&, DirInfo const&)
     {}
 
@@ -1004,15 +1028,15 @@
                     AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
                     *out++ = tp;
                 }
- else
- {
+ else
+ {
                     equal_opposite
                         <
                             TurnInfo,
                             AssignPolicy
>::apply(pi, qi,
                             tp, out, result.template get<0>(), result.template get<1>());
- }
+ }
             }
             break;
             case 'c' :
@@ -1091,4 +1115,8 @@
 }} // namespace boost::geometry
 
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
 #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HPP

Modified: branches/release/boost/geometry/algorithms/detail/overlay/get_turns.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/overlay/get_turns.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/overlay/get_turns.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -14,12 +14,11 @@
 #include <map>
 
 #include <boost/array.hpp>
+#include <boost/concept_check.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/range.hpp>
 #include <boost/typeof/typeof.hpp>
 
-#include <boost/tuple/tuple.hpp>
-
 #include <boost/geometry/core/access.hpp>
 #include <boost/geometry/core/coordinate_dimension.hpp>
 #include <boost/geometry/core/reverse_dispatch.hpp>
@@ -65,6 +64,12 @@
 namespace boost { namespace geometry
 {
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
 
 #ifndef DOXYGEN_NO_DETAIL
 namespace detail { namespace get_turns
@@ -138,6 +143,11 @@
         // About first condition: will be optimized by compiler (static)
         // It checks if it is areal (box,ring,(multi)polygon
         int const n = int(section.range_count);
+
+ boost::ignore_unused_variable_warning(n);
+ boost::ignore_unused_variable_warning(index1);
+ boost::ignore_unused_variable_warning(index2);
+
         return boost::is_same
                     <
                         typename tag_cast
@@ -162,6 +172,8 @@
             Turns& turns,
             InterruptPolicy& interrupt_policy)
     {
+ boost::ignore_unused_variable_warning(interrupt_policy);
+
         cview_type1 cview1(range_by_section(geometry1, sec1));
         cview_type2 cview2(range_by_section(geometry2, sec2));
         view_type1 view1(cview1);
@@ -599,6 +611,8 @@
             Turns& turns,
             InterruptPolicy& interrupt_policy)
     {
+ boost::ignore_unused_variable_warning(interrupt_policy);
+
         // Depending on code some relations can be left out
 
         typedef typename boost::range_value<Turns>::type turn_info;
@@ -867,6 +881,9 @@
             turns, interrupt_policy);
 }
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
 
 }} // namespace boost::geometry
 

Modified: branches/release/boost/geometry/algorithms/detail/overlay/overlay.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/overlay/overlay.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/overlay/overlay.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -110,6 +110,12 @@
 
     typedef ring_properties<typename geometry::point_type<Geometry1>::type> properties;
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
     // Union: return either of them
     // Intersection: return nothing
     // Difference: return first of them
@@ -120,6 +126,11 @@
         return out;
     }
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+
     std::map<ring_identifier, int> empty;
     std::map<ring_identifier, properties> all_of_one_of_them;
 

Modified: branches/release/boost/geometry/algorithms/detail/overlay/traverse.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/overlay/traverse.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/overlay/traverse.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -59,7 +59,7 @@
     }
 }
 #else
-inline void debug_traverse(Turn const& , Operation, std::string const& )
+inline void debug_traverse(Turn const& , Operation, const char*)
 {
 }
 #endif
@@ -365,7 +365,10 @@
                                                 "Dead end",
                                                 geometry1, geometry2, state);
                                         }
- detail::overlay::debug_traverse(*current, *current_iit, "Selected ");
+ else
+ {
+ detail::overlay::debug_traverse(*current, *current_iit, "Selected ");
+ }
 
                                         if (i++ > 2 + 2 * turns.size())
                                         {

Modified: branches/release/boost/geometry/algorithms/detail/sections/sectionalize.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/detail/sections/sectionalize.hpp (original)
+++ branches/release/boost/geometry/algorithms/detail/sections/sectionalize.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -498,6 +498,29 @@
     }
 }
 
+template <typename Sections>
+inline void enlargeSections(Sections& sections)
+{
+ // Robustness issue. Increase sections a tiny bit such that all points are really within (and not on border)
+ // Reason: turns might, rarely, be missed otherwise (case: "buffer_mp1")
+ // Drawback: not really, range is now completely inside the section. Section is a tiny bit too large,
+ // which might cause (a small number) of more comparisons
+ // TODO: make dimension-agnostic
+ for (typename boost::range_iterator<Sections>::type it = boost::begin(sections);
+ it != boost::end(sections);
+ ++it)
+ {
+ typedef typename boost::range_value<Sections>::type section_type;
+ typedef typename section_type::box_type box_type;
+ typedef typename geometry::coordinate_type<box_type>::type coordinate_type;
+ coordinate_type const reps = math::relaxed_epsilon(10.0);
+ geometry::set<0, 0>(it->bounding_box, geometry::get<0, 0>(it->bounding_box) - reps);
+ geometry::set<0, 1>(it->bounding_box, geometry::get<0, 1>(it->bounding_box) - reps);
+ geometry::set<1, 0>(it->bounding_box, geometry::get<1, 0>(it->bounding_box) + reps);
+ geometry::set<1, 1>(it->bounding_box, geometry::get<1, 1>(it->bounding_box) + reps);
+ }
+}
+
 
 }} // namespace detail::sectionalize
 #endif // DOXYGEN_NO_DETAIL
@@ -639,6 +662,7 @@
     ring_id.source_index = source_index;
     sectionalizer_type::apply(geometry, sections, ring_id);
     detail::sectionalize::set_section_unique_ids(sections);
+ detail::sectionalize::enlargeSections(sections);
 }
 
 

Modified: branches/release/boost/geometry/algorithms/disjoint.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/disjoint.hpp (original)
+++ branches/release/boost/geometry/algorithms/disjoint.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -87,13 +87,13 @@
 
     // We don't assign extra info:
     template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo
- >
+ <
+ typename Info,
+ typename Point1,
+ typename Point2,
+ typename IntersectionInfo,
+ typename DirInfo
+ >
     static inline void apply(Info& , Point1 const& , Point2 const&,
                 IntersectionInfo const&, DirInfo const&)
     {}

Modified: branches/release/boost/geometry/algorithms/distance.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/distance.hpp (original)
+++ branches/release/boost/geometry/algorithms/distance.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -15,6 +15,7 @@
 #define BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP
 
 
+#include <boost/concept_check.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/range.hpp>
 #include <boost/typeof/typeof.hpp>
@@ -55,6 +56,7 @@
     static inline typename return_type<Strategy>::type apply(P1 const& p1,
                 P2 const& p2, Strategy const& strategy)
     {
+ boost::ignore_unused_variable_warning(strategy);
         return strategy.apply(p1, p2);
     }
 };

Modified: branches/release/boost/geometry/algorithms/equals.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/equals.hpp (original)
+++ branches/release/boost/geometry/algorithms/equals.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -39,6 +39,9 @@
 
 #include <boost/geometry/algorithms/detail/equals/collect_vectors.hpp>
 
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+
 
 namespace boost { namespace geometry
 {
@@ -239,6 +242,110 @@
 {};
 
 
+template <typename Geometry1, typename Geometry2>
+struct devarianted_equals
+{
+ static inline bool apply(Geometry1 const& geometry1,
+ Geometry2 const& geometry2)
+ {
+ concept::check_concepts_and_equal_dimensions
+ <
+ Geometry1 const,
+ Geometry2 const
+ >();
+ return equals<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
+struct devarianted_equals<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
+{
+ struct visitor: static_visitor<bool>
+ {
+ Geometry2 const& m_geometry2;
+
+ visitor(Geometry2 const& geometry2)
+ : m_geometry2(geometry2)
+ {}
+
+ template <typename Geometry1>
+ inline bool operator()(Geometry1 const& geometry1) const
+ {
+ return devarianted_equals<Geometry1, Geometry2>
+ ::apply(geometry1, m_geometry2);
+ }
+
+ };
+
+ static inline bool apply(
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
+ Geometry2 const& geometry2
+ )
+ {
+ return apply_visitor(visitor(geometry2), geometry1);
+ }
+};
+
+template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct devarianted_equals<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: static_visitor<bool>
+ {
+ Geometry1 const& m_geometry1;
+
+ visitor(Geometry1 const& geometry1)
+ : m_geometry1(geometry1)
+ {}
+
+ template <typename Geometry2>
+ inline bool operator()(Geometry2 const& geometry2) const
+ {
+ return devarianted_equals<Geometry1, Geometry2>
+ ::apply(m_geometry1, geometry2);
+ }
+
+ };
+
+ static inline bool apply(
+ Geometry1 const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2
+ )
+ {
+ return apply_visitor(visitor(geometry1), geometry2);
+ }
+};
+
+template <
+ BOOST_VARIANT_ENUM_PARAMS(typename T1),
+ BOOST_VARIANT_ENUM_PARAMS(typename T2)
+>
+struct devarianted_equals<
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
+>
+{
+ struct visitor: static_visitor<bool>
+ {
+ template <typename Geometry1, typename Geometry2>
+ inline bool operator()(Geometry1 const& geometry1,
+ Geometry2 const& geometry2) const
+ {
+ return devarianted_equals<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2);
+ }
+
+ };
+
+ static inline bool apply(
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2
+ )
+ {
+ return apply_visitor(visitor(), geometry1, geometry2);
+ }
+};
+
+
 } // namespace dispatch
 #endif // DOXYGEN_NO_DISPATCH
 
@@ -248,8 +355,8 @@
 \details \details_check12{equals, is spatially equal}. Spatially equal means
     that the same point set is included. A box can therefore be spatially equal
     to a ring or a polygon, or a linestring can be spatially equal to a
- multi-linestring or a segment. This only theoretically, not all combinations
- are implemented yet.
+ multi-linestring or a segment. This only works theoretically, not all
+ combinations are implemented yet.
 \ingroup equals
 \tparam Geometry1 \tparam_geometry
 \tparam Geometry2 \tparam_geometry
@@ -263,13 +370,8 @@
 template <typename Geometry1, typename Geometry2>
 inline bool equals(Geometry1 const& geometry1, Geometry2 const& geometry2)
 {
- concept::check_concepts_and_equal_dimensions
- <
- Geometry1 const,
- Geometry2 const
- >();
-
- return dispatch::equals<Geometry1, Geometry2>::apply(geometry1, geometry2);
+ return dispatch::devarianted_equals<Geometry1, Geometry2>
+ ::apply(geometry1, geometry2);
 }
 
 

Modified: branches/release/boost/geometry/algorithms/for_each.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/for_each.hpp (original)
+++ branches/release/boost/geometry/algorithms/for_each.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -67,17 +67,17 @@
     template <typename Range, typename Functor>
     static inline void apply(Range& range, Functor& f)
     {
- // The previous implementation called the std library:
+ // The previous implementation called the std library:
         // return (std::for_each(boost::begin(range), boost::end(range), f));
- // But that is not accepted for capturing lambda's.
- // It needs to do it like that to return the state of Functor f (f is passed by value in std::for_each).
+ // But that is not accepted for capturing lambda's.
+ // It needs to do it like that to return the state of Functor f (f is passed by value in std::for_each).
 
- // So we now loop manually.
+ // So we now loop manually.
 
- for (typename boost::range_iterator<Range>::type it = boost::begin(range); it != boost::end(range); ++it)
- {
- f(*it);
- }
+ for (typename boost::range_iterator<Range>::type it = boost::begin(range); it != boost::end(range); ++it)
+ {
+ f(*it);
+ }
     }
 };
 
@@ -261,7 +261,7 @@
     concept::check<Geometry>();
 
     dispatch::for_each_segment<Geometry>::apply(geometry, f);
- return f;
+ return f;
 }
 
 

Modified: branches/release/boost/geometry/algorithms/length.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/length.hpp (original)
+++ branches/release/boost/geometry/algorithms/length.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -16,9 +16,17 @@
 
 #include <iterator>
 
+#include <boost/concept_check.hpp>
 #include <boost/range.hpp>
 
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/greater.hpp>
 #include <boost/mpl/if.hpp>
+#include <boost/mpl/insert.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/set.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/transform.hpp>
 #include <boost/type_traits.hpp>
 
 #include <boost/geometry/core/cs.hpp>
@@ -33,6 +41,10 @@
 #include <boost/geometry/strategies/distance.hpp>
 #include <boost/geometry/strategies/default_length_result.hpp>
 
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
 
 namespace boost { namespace geometry
 {
@@ -73,6 +85,7 @@
     static inline return_type apply(
             Range const& range, Strategy const& strategy)
     {
+ boost::ignore_unused_variable_warning(strategy);
         typedef typename closeable_view<Range const, Closure>::type view_type;
         typedef typename boost::range_iterator
             <
@@ -136,6 +149,69 @@
 {};
 
 
+template <typename Geometry>
+struct devarianted_length
+{
+ typedef typename default_length_result<Geometry>::type result_type;
+
+ template <typename Strategy>
+ static inline result_type apply(Geometry const& geometry,
+ Strategy const& strategy)
+ {
+ return length<Geometry>::apply(geometry, strategy);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct devarianted_length<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ typedef typename mpl::fold<
+ typename mpl::transform<
+ typename variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
+ default_length_result<mpl::_>
+ >::type,
+ mpl::set0<>,
+ mpl::insert<mpl::_1, mpl::_2>
+ >::type possible_result_types;
+
+ typedef typename mpl::if_<
+ mpl::greater<
+ mpl::size<possible_result_types>,
+ mpl::int_<1>
+ >,
+ typename make_variant_over<possible_result_types>::type,
+ typename mpl::front<possible_result_types>::type
+ >::type result_type;
+
+ template <typename Strategy>
+ struct visitor
+ : static_visitor<result_type>
+ {
+ Strategy const& m_strategy;
+
+ visitor(Strategy const& strategy)
+ : m_strategy(strategy)
+ {}
+
+ template <typename Geometry>
+ inline typename devarianted_length<Geometry>::result_type
+ operator()(Geometry const& geometry) const
+ {
+ return devarianted_length<Geometry>::apply(geometry, m_strategy);
+ }
+ };
+
+ template <typename Strategy>
+ static inline result_type apply(
+ variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ Strategy const& strategy
+ )
+ {
+ return apply_visitor(visitor<Strategy>(strategy), geometry);
+ }
+};
+
+
 } // namespace dispatch
 #endif // DOXYGEN_NO_DISPATCH
 
@@ -152,8 +228,8 @@
 \qbk{[length] [length_output]}
  */
 template<typename Geometry>
-inline typename default_length_result<Geometry>::type length(
- Geometry const& geometry)
+inline typename dispatch::devarianted_length<Geometry>::result_type
+length(Geometry const& geometry)
 {
     concept::check<Geometry const>();
 
@@ -164,7 +240,7 @@
             point_tag, typename point_type<Geometry>::type
>::type strategy_type;
 
- return dispatch::length<Geometry>::apply(geometry, strategy_type());
+ return dispatch::devarianted_length<Geometry>::apply(geometry, strategy_type());
 }
 
 
@@ -183,14 +259,14 @@
 \qbk{[length_with_strategy] [length_with_strategy_output]}
  */
 template<typename Geometry, typename Strategy>
-inline typename default_length_result<Geometry>::type length(
- Geometry const& geometry, Strategy const& strategy)
+inline typename dispatch::devarianted_length<Geometry>::result_type
+length(Geometry const& geometry, Strategy const& strategy)
 {
     concept::check<Geometry const>();
 
     // detail::throw_on_empty_input(geometry);
     
- return dispatch::length<Geometry>::apply(geometry, strategy);
+ return dispatch::devarianted_length<Geometry>::apply(geometry, strategy);
 }
 
 

Modified: branches/release/boost/geometry/algorithms/num_points.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/num_points.hpp (original)
+++ branches/release/boost/geometry/algorithms/num_points.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -24,15 +24,24 @@
 #include <boost/geometry/core/interior_rings.hpp>
 #include <boost/geometry/core/ring_type.hpp>
 #include <boost/geometry/core/tag_cast.hpp>
-
 #include <boost/geometry/algorithms/disjoint.hpp>
 #include <boost/geometry/algorithms/not_implemented.hpp>
 #include <boost/geometry/geometries/concepts/check.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
 
 
 namespace boost { namespace geometry
 {
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
+
 #ifndef DOXYGEN_NO_DETAIL
 namespace detail { namespace num_points
 {
@@ -46,9 +55,7 @@
         std::size_t n = boost::size(range);
         if (add_for_open && n > 0)
         {
- closure_selector const s = geometry::closure<Range>::value;
-
- if (s == open)
+ if (geometry::closure<Range>::value == open)
             {
                 if (geometry::disjoint(*boost::begin(range), *(boost::begin(range) + n - 1)))
                 {
@@ -137,6 +144,41 @@
         : detail::num_points::polygon_count
 {};
 
+template <typename Geometry>
+struct devarianted_num_points
+{
+ static inline std::size_t apply(Geometry const& geometry,
+ bool add_for_open)
+ {
+ return num_points<Geometry>::apply(geometry, add_for_open);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct devarianted_num_points<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ struct visitor: boost::static_visitor<std::size_t>
+ {
+ bool m_add_for_open;
+
+ visitor(bool add_for_open): m_add_for_open(add_for_open) {}
+
+ template <typename Geometry>
+ typename std::size_t operator()(Geometry const& geometry) const
+ {
+ return dispatch::num_points<Geometry>::apply(geometry, m_add_for_open);
+ }
+ };
+
+ static inline std::size_t
+ apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
+ bool add_for_open)
+ {
+ return boost::apply_visitor(visitor(add_for_open), geometry);
+ }
+};
+
+
 } // namespace dispatch
 #endif
 
@@ -157,9 +199,13 @@
 {
     concept::check<Geometry const>();
 
- return dispatch::num_points<Geometry>::apply(geometry, add_for_open);
+ return dispatch::devarianted_num_points<Geometry>::apply(geometry, add_for_open);
 }
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
 }} // namespace boost::geometry
 
 

Modified: branches/release/boost/geometry/algorithms/within.hpp
==============================================================================
--- branches/release/boost/geometry/algorithms/within.hpp (original)
+++ branches/release/boost/geometry/algorithms/within.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -17,6 +17,7 @@
 
 #include <cstddef>
 
+#include <boost/concept_check.hpp>
 #include <boost/range.hpp>
 #include <boost/typeof/typeof.hpp>
 
@@ -65,6 +66,7 @@
     static inline int apply(Point const& point, Ring const& ring,
             Strategy const& strategy)
     {
+ boost::ignore_unused_variable_warning(strategy);
         if (int(boost::size(ring))
                 < core_detail::closure::minimum_ring_size<Closure>::value)
         {
@@ -180,6 +182,7 @@
     template <typename Strategy>
     static inline bool apply(Point const& point, Box const& box, Strategy const& strategy)
     {
+ boost::ignore_unused_variable_warning(strategy);
         return strategy.apply(point, box);
     }
 };
@@ -191,6 +194,7 @@
     static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy)
     {
         assert_dimension_equal<Box1, Box2>();
+ boost::ignore_unused_variable_warning(strategy);
         return strategy.apply(box1, box2);
     }
 };

Modified: branches/release/boost/geometry/core/access.hpp
==============================================================================
--- branches/release/boost/geometry/core/access.hpp (original)
+++ branches/release/boost/geometry/core/access.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -137,8 +137,8 @@
     typename Geometry,
     typename
     CoordinateType,
- std::size_t Dimension,
- typename IsPointer
+ std::size_t Dimension,
+ typename IsPointer
>
 struct access
 {
@@ -153,7 +153,7 @@
     typename CoordinateType,
     std::size_t Index,
     std::size_t Dimension,
- typename IsPointer
+ typename IsPointer
>
 struct indexed_access
 {
@@ -260,13 +260,15 @@
 \tparam Dimension \tparam_dimension_required
 \tparam Geometry \tparam_geometry (usually a Point Concept)
 \param geometry \param_geometry (usually a point)
-\param dummy \qbk_skip
 \return The coordinate value of specified dimension of specified geometry
+
 \qbk{[include reference/core/get_point.qbk]}
 */
 template <std::size_t Dimension, typename Geometry>
 inline typename coordinate_type<Geometry>::type get(Geometry const& geometry
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
         , detail::signature_getset_dimension* dummy = 0
+#endif
         )
 {
     boost::ignore_unused_variable_warning(dummy);
@@ -277,7 +279,7 @@
             typename geometry::util::bare_type<Geometry>::type,
             typename coordinate_type<Geometry>::type,
             Dimension,
- typename boost::is_pointer<Geometry>::type
+ typename boost::is_pointer<Geometry>::type
> coord_access_type;
 
     return coord_access_type::get(geometry);
@@ -292,7 +294,6 @@
 \param geometry geometry to assign coordinate to
 \param geometry \param_geometry (usually a point)
 \param value The coordinate value to set
-\param dummy \qbk_skip
 \ingroup set
 
 \qbk{[include reference/core/set_point.qbk]}
@@ -300,7 +301,9 @@
 template <std::size_t Dimension, typename Geometry>
 inline void set(Geometry& geometry
         , typename coordinate_type<Geometry>::type const& value
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
         , detail::signature_getset_dimension* dummy = 0
+#endif
         )
 {
     boost::ignore_unused_variable_warning(dummy);
@@ -311,7 +314,7 @@
             typename geometry::util::bare_type<Geometry>::type,
             typename coordinate_type<Geometry>::type,
             Dimension,
- typename boost::is_pointer<Geometry>::type
+ typename boost::is_pointer<Geometry>::type
> coord_access_type;
 
     coord_access_type::set(geometry, value);
@@ -325,7 +328,6 @@
 \tparam Dimension \tparam_dimension_required
 \tparam Geometry \tparam_box_or_segment
 \param geometry \param_geometry
-\param dummy \qbk_skip
 \return coordinate value
 \ingroup get
 
@@ -334,7 +336,9 @@
 */
 template <std::size_t Index, std::size_t Dimension, typename Geometry>
 inline typename coordinate_type<Geometry>::type get(Geometry const& geometry
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
         , detail::signature_getset_index_dimension* dummy = 0
+#endif
         )
 {
     boost::ignore_unused_variable_warning(dummy);
@@ -346,7 +350,7 @@
             typename coordinate_type<Geometry>::type,
             Index,
             Dimension,
- typename boost::is_pointer<Geometry>::type
+ typename boost::is_pointer<Geometry>::type
> coord_access_type;
 
     return coord_access_type::get(geometry);
@@ -361,7 +365,6 @@
 \param geometry geometry to assign coordinate to
 \param geometry \param_geometry
 \param value The coordinate value to set
-\param dummy \qbk_skip
 \ingroup set
 
 \qbk{distinguish,with index}
@@ -370,7 +373,9 @@
 template <std::size_t Index, std::size_t Dimension, typename Geometry>
 inline void set(Geometry& geometry
         , typename coordinate_type<Geometry>::type const& value
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
         , detail::signature_getset_index_dimension* dummy = 0
+#endif
         )
 {
     boost::ignore_unused_variable_warning(dummy);
@@ -382,7 +387,7 @@
             typename coordinate_type<Geometry>::type,
             Index,
             Dimension,
- typename boost::is_pointer<Geometry>::type
+ typename boost::is_pointer<Geometry>::type
> coord_access_type;
 
     coord_access_type::set(geometry, value);

Modified: branches/release/boost/geometry/core/coordinate_dimension.hpp
==============================================================================
--- branches/release/boost/geometry/core/coordinate_dimension.hpp (original)
+++ branches/release/boost/geometry/core/coordinate_dimension.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -75,7 +75,7 @@
     : core_dispatch::dimension
         <
             typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type
+ typename geometry::util::bare_type<Geometry>::type
>
 {};
 

Modified: branches/release/boost/geometry/core/coordinate_system.hpp
==============================================================================
--- branches/release/boost/geometry/core/coordinate_system.hpp (original)
+++ branches/release/boost/geometry/core/coordinate_system.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -66,9 +66,9 @@
     struct coordinate_system<point_tag, Point>
     {
         typedef typename traits::coordinate_system
- <
- typename geometry::util::bare_type<Point>::type
- >::type type;
+ <
+ typename geometry::util::bare_type<Point>::type
+ >::type type;
     };
 
 
@@ -89,7 +89,7 @@
     typedef typename core_dispatch::coordinate_system
         <
             typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type
+ typename geometry::util::bare_type<Geometry>::type
>::type type;
 };
 

Modified: branches/release/boost/geometry/core/coordinate_type.hpp
==============================================================================
--- branches/release/boost/geometry/core/coordinate_type.hpp (original)
+++ branches/release/boost/geometry/core/coordinate_type.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -65,9 +65,9 @@
 struct coordinate_type<point_tag, Point>
 {
     typedef typename traits::coordinate_type
- <
+ <
             typename geometry::util::bare_type<Point>::type
- >::type type;
+ >::type type;
 };
 
 
@@ -85,11 +85,11 @@
 template <typename Geometry>
 struct coordinate_type
 {
- typedef typename core_dispatch::coordinate_type
- <
- typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type
- >::type type;
+ typedef typename core_dispatch::coordinate_type
+ <
+ typename tag<Geometry>::type,
+ typename geometry::util::bare_type<Geometry>::type
+ >::type type;
 };
 
 template <typename Geometry>

Modified: branches/release/boost/geometry/core/tag.hpp
==============================================================================
--- branches/release/boost/geometry/core/tag.hpp (original)
+++ branches/release/boost/geometry/core/tag.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -62,7 +62,7 @@
 {
     typedef typename traits::tag
         <
- typename geometry::util::bare_type<Geometry>::type
+ typename geometry::util::bare_type<Geometry>::type
>::type type;
 };
 

Modified: branches/release/boost/geometry/geometries/concepts/check.hpp
==============================================================================
--- branches/release/boost/geometry/geometries/concepts/check.hpp (original)
+++ branches/release/boost/geometry/geometries/concepts/check.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -28,7 +28,11 @@
 #include <boost/geometry/geometries/concepts/point_concept.hpp>
 #include <boost/geometry/geometries/concepts/polygon_concept.hpp>
 #include <boost/geometry/geometries/concepts/ring_concept.hpp>
+#include <boost/geometry/geometries/concepts/segment_concept.hpp>
 
+#include <boost/geometry/algorithms/not_implemented.hpp>
+
+#include <boost/variant/variant_fwd.hpp>
 
 namespace boost { namespace geometry
 {
@@ -53,59 +57,86 @@
 namespace dispatch
 {
 
-template <typename GeometryTag, typename Geometry, bool IsConst>
-struct check
+template
+<
+ typename Geometry,
+ typename GeometryTag = typename geometry::tag<Geometry>::type,
+ bool IsConst = boost::is_const<Geometry>::type::value
+>
+struct check : not_implemented<GeometryTag>
 {};
 
 
 template <typename Geometry>
-struct check<point_tag, Geometry, true>
+struct check<Geometry, point_tag, true>
     : detail::concept_check::check<concept::ConstPoint<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<point_tag, Geometry, false>
+struct check<Geometry, point_tag, false>
     : detail::concept_check::check<concept::Point<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<linestring_tag, Geometry, true>
+struct check<Geometry, linestring_tag, true>
     : detail::concept_check::check<concept::ConstLinestring<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<linestring_tag, Geometry, false>
+struct check<Geometry, linestring_tag, false>
     : detail::concept_check::check<concept::Linestring<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<polygon_tag, Geometry, true>
+struct check<Geometry, ring_tag, true>
+ : detail::concept_check::check<concept::ConstRing<Geometry> >
+{};
+
+
+template <typename Geometry>
+struct check<Geometry, ring_tag, false>
+ : detail::concept_check::check<concept::Ring<Geometry> >
+{};
+
+template <typename Geometry>
+struct check<Geometry, polygon_tag, true>
     : detail::concept_check::check<concept::ConstPolygon<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<polygon_tag, Geometry, false>
+struct check<Geometry, polygon_tag, false>
     : detail::concept_check::check<concept::Polygon<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<box_tag, Geometry, true>
+struct check<Geometry, box_tag, true>
     : detail::concept_check::check<concept::ConstBox<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<box_tag, Geometry, false>
+struct check<Geometry, box_tag, false>
     : detail::concept_check::check<concept::Box<Geometry> >
 {};
 
 
+template <typename Geometry>
+struct check<Geometry, segment_tag, true>
+ : detail::concept_check::check<concept::ConstSegment<Geometry> >
+{};
+
+
+template <typename Geometry>
+struct check<Geometry, segment_tag, false>
+ : detail::concept_check::check<concept::Segment<Geometry> >
+{};
+
 
 } // namespace dispatch
 #endif
@@ -122,13 +153,16 @@
 {
 
 
-template <typename Geometry, bool IsConst>
-struct checker : dispatch::check
- <
- typename tag<Geometry>::type,
- Geometry,
- IsConst
- >
+template <typename Geometry>
+struct checker : dispatch::check<Geometry>
+{};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct checker<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct checker<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const>
 {};
 
 
@@ -143,7 +177,7 @@
 template <typename Geometry>
 inline void check()
 {
- detail::checker<Geometry, boost::is_const<Geometry>::type::value> c;
+ detail::checker<Geometry> c;
     boost::ignore_unused_variable_warning(c);
 }
 

Modified: branches/release/boost/geometry/geometries/point.hpp
==============================================================================
--- branches/release/boost/geometry/geometries/point.hpp (original)
+++ branches/release/boost/geometry/geometries/point.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -28,6 +28,12 @@
 namespace boost { namespace geometry
 {
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
 
 namespace model
 {
@@ -173,6 +179,10 @@
 } // namespace traits
 #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
 }} // namespace boost::geometry
 
 #endif // BOOST_GEOMETRY_GEOMETRIES_POINT_HPP

Modified: branches/release/boost/geometry/geometry.hpp
==============================================================================
--- branches/release/boost/geometry/geometry.hpp (original)
+++ branches/release/boost/geometry/geometry.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -87,5 +87,6 @@
 #include <boost/geometry/views/segment_view.hpp>
 
 #include <boost/geometry/io/io.hpp>
+#include <boost/geometry/io/svg/svg_mapper.hpp>
 
 #endif // BOOST_GEOMETRY_GEOMETRY_HPP

Modified: branches/release/boost/geometry/io/wkt/read.hpp
==============================================================================
--- branches/release/boost/geometry/io/wkt/read.hpp (original)
+++ branches/release/boost/geometry/io/wkt/read.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -423,10 +423,21 @@
 
         handle_empty_z_m(it, tokens.end(), has_empty, has_z, has_m);
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
         if (has_z && dimension<Geometry>::type::value < 3)
         {
             throw read_wkt_exception("Z only allowed for 3 or more dimensions", wkt);
         }
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
         if (has_empty)
         {
             check_end(it, tokens.end(), wkt);

Modified: branches/release/boost/geometry/io/wkt/write.hpp
==============================================================================
--- branches/release/boost/geometry/io/wkt/write.hpp (original)
+++ branches/release/boost/geometry/io/wkt/write.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -18,12 +18,12 @@
 #include <string>
 
 #include <boost/array.hpp>
-#include <boost/concept/assert.hpp>
 #include <boost/range.hpp>
 #include <boost/typeof/typeof.hpp>
 
 #include <boost/geometry/algorithms/assign.hpp>
 #include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
 #include <boost/geometry/core/exterior_ring.hpp>
 #include <boost/geometry/core/interior_rings.hpp>
 #include <boost/geometry/core/ring_type.hpp>
@@ -33,9 +33,19 @@
 
 #include <boost/geometry/io/wkt/detail/prefix.hpp>
 
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/variant/variant_fwd.hpp>
+
 namespace boost { namespace geometry
 {
 
+// Silence warning C4512: 'boost::geometry::wkt_manipulator<Geometry>' : assignment operator could not be generated
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4512)
+#endif
+
 #ifndef DOXYGEN_NO_DETAIL
 namespace detail { namespace wkt
 {
@@ -240,18 +250,12 @@
 namespace dispatch
 {
 
-template <typename Tag, typename Geometry>
-struct wkt
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
+struct wkt: not_implemented<Tag>
+{};
 
 template <typename Point>
-struct wkt<point_tag, Point>
+struct wkt<Point, point_tag>
     : detail::wkt::wkt_point
         <
             Point,
@@ -260,7 +264,7 @@
 {};
 
 template <typename Linestring>
-struct wkt<linestring_tag, Linestring>
+struct wkt<Linestring, linestring_tag>
     : detail::wkt::wkt_range
         <
             Linestring,
@@ -275,12 +279,12 @@
 It is therefore streamed as a polygon
 */
 template <typename Box>
-struct wkt<box_tag, Box>
+struct wkt<Box, box_tag>
     : detail::wkt::wkt_box<Box>
 {};
 
 template <typename Segment>
-struct wkt<segment_tag, Segment>
+struct wkt<Segment, segment_tag>
     : detail::wkt::wkt_segment<Segment>
 {};
 
@@ -291,7 +295,7 @@
 It is therefore streamed as a polygon
 */
 template <typename Ring>
-struct wkt<ring_tag, Ring>
+struct wkt<Ring, ring_tag>
     : detail::wkt::wkt_range
         <
             Ring,
@@ -304,7 +308,7 @@
 \brief Specialization to stream polygon as WKT
 */
 template <typename Polygon>
-struct wkt<polygon_tag, Polygon>
+struct wkt<Polygon, polygon_tag>
     : detail::wkt::wkt_poly
         <
             Polygon,
@@ -312,6 +316,47 @@
>
 {};
 
+
+template <typename Geometry>
+struct devarianted_wkt
+{
+ template <typename OutputStream>
+ static inline void apply(OutputStream& os, Geometry const& geometry)
+ {
+ wkt<Geometry>::apply(os, geometry);
+ }
+};
+
+template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+struct devarianted_wkt<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+{
+ template <typename OutputStream>
+ struct visitor: static_visitor<void>
+ {
+ OutputStream& m_os;
+
+ visitor(OutputStream& os)
+ : m_os(os)
+ {}
+
+ template <typename Geometry>
+ inline void operator()(Geometry const& geometry) const
+ {
+ devarianted_wkt<Geometry>::apply(m_os, geometry);
+ }
+ };
+
+ template <typename OutputStream>
+ static inline void apply(
+ OutputStream& os,
+ variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry
+ )
+ {
+ apply_visitor(visitor<OutputStream>(os), geometry);
+ }
+};
+
+
 } // namespace dispatch
 #endif // DOXYGEN_NO_DISPATCH
 
@@ -340,11 +385,7 @@
             std::basic_ostream<Char, Traits>& os,
             wkt_manipulator const& m)
     {
- dispatch::wkt
- <
- typename tag<Geometry>::type,
- Geometry
- >::apply(os, m.m_geometry);
+ dispatch::devarianted_wkt<Geometry>::apply(os, m.m_geometry);
         os.flush();
         return os;
     }
@@ -371,6 +412,10 @@
     return wkt_manipulator<Geometry>(geometry);
 }
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
 }} // namespace boost::geometry
 
 #endif // BOOST_GEOMETRY_IO_WKT_WRITE_HPP

Modified: branches/release/boost/geometry/iterators/ever_circling_iterator.hpp
==============================================================================
--- branches/release/boost/geometry/iterators/ever_circling_iterator.hpp (original)
+++ branches/release/boost/geometry/iterators/ever_circling_iterator.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -196,7 +196,7 @@
         {
             m_index += m_size;
         }
- m_index = m_index % m_size;
+ m_index = m_index % m_size;
         this->m_iterator = boost::begin(*m_range) + m_index;
     }
 

Modified: branches/release/boost/geometry/multi/algorithms/append.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/append.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/append.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -17,6 +17,7 @@
 #include <boost/geometry/algorithms/append.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/area.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/area.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/area.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -18,7 +18,9 @@
 #include <boost/range/metafunctions.hpp>
 
 #include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/multi/core/tags.hpp>
 #include <boost/geometry/multi/core/point_type.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/multi/algorithms/detail/multi_sum.hpp>
 #include <boost/geometry/multi/algorithms/num_points.hpp>
 

Modified: branches/release/boost/geometry/multi/algorithms/centroid.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/centroid.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/centroid.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -18,7 +18,9 @@
 #include <boost/range.hpp>
 
 #include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/multi/core/tags.hpp>
 #include <boost/geometry/multi/core/point_type.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/multi/algorithms/num_points.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/clear.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/clear.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/clear.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -16,6 +16,7 @@
 
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/algorithms/clear.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/convert.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/convert.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/convert.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,6 +20,7 @@
 #include <boost/geometry/algorithms/convert.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/correct.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/correct.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/correct.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,6 +21,7 @@
 #include <boost/geometry/multi/algorithms/detail/modify.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/covered_by.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/covered_by.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/covered_by.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,6 +19,7 @@
 #include <boost/geometry/multi/core/closure.hpp>
 #include <boost/geometry/multi/core/point_order.hpp>
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/multi/algorithms/within.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/detail/for_each_range.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/for_each_range.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/for_each_range.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,6 +21,7 @@
 #include <boost/geometry/algorithms/detail/for_each_range.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -13,6 +13,7 @@
 #include <boost/range.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -17,6 +17,7 @@
 
 #include <boost/geometry/multi/core/ring_type.hpp>
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -15,6 +15,8 @@
 
 #include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
 #include <boost/geometry/multi/core/ring_type.hpp>
+#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 namespace boost { namespace geometry
 {

Modified: branches/release/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -11,6 +11,8 @@
 
 
 #include <boost/geometry/multi/core/ring_type.hpp>
+#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 #include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
 

Modified: branches/release/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -12,6 +12,9 @@
 
 #include <boost/range.hpp>
 
+#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
+
 #include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -11,6 +11,7 @@
 
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/detail/point_on_border.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/point_on_border.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/point_on_border.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -17,6 +17,7 @@
 #include <boost/range.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/algorithms/detail/point_on_border.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,6 +19,7 @@
 #include <boost/range.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/multi/core/ring_type.hpp>
 #include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
 

Modified: branches/release/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,6 +20,8 @@
 #include <boost/concept/requires.hpp>
 #include <boost/range.hpp>
 
+#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/disjoint.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/disjoint.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/disjoint.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -15,6 +15,9 @@
 #include <boost/geometry/algorithms/disjoint.hpp>
 #include <boost/geometry/multi/algorithms/covered_by.hpp>
 
+#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
+
 
 namespace boost { namespace geometry
 {

Modified: branches/release/boost/geometry/multi/algorithms/distance.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/distance.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/distance.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,6 +21,7 @@
 #include <boost/geometry/multi/core/tags.hpp>
 #include <boost/geometry/multi/core/geometry_id.hpp>
 #include <boost/geometry/multi/core/point_type.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 #include <boost/geometry/algorithms/distance.hpp>
 #include <boost/geometry/multi/algorithms/num_points.hpp>

Modified: branches/release/boost/geometry/multi/algorithms/envelope.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/envelope.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/envelope.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -22,7 +22,9 @@
 #include <boost/geometry/core/exterior_ring.hpp>
 #include <boost/geometry/algorithms/envelope.hpp>
 
+#include <boost/geometry/multi/core/tags.hpp>
 #include <boost/geometry/multi/core/point_type.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/equals.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/equals.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/equals.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -17,6 +17,7 @@
 
 #include <boost/geometry/multi/core/tags.hpp>
 #include <boost/geometry/multi/core/geometry_id.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 #include <boost/geometry/algorithms/equals.hpp>
 

Modified: branches/release/boost/geometry/multi/algorithms/for_each.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/for_each.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/for_each.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,7 +20,7 @@
 
 #include <boost/geometry/multi/core/tags.hpp>
 #include <boost/geometry/multi/core/point_type.hpp>
-
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 #include <boost/geometry/algorithms/for_each.hpp>
 

Modified: branches/release/boost/geometry/multi/algorithms/intersection.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/intersection.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/intersection.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -14,6 +14,9 @@
 #include <boost/geometry/multi/core/geometry_id.hpp>
 #include <boost/geometry/multi/core/is_areal.hpp>
 #include <boost/geometry/multi/core/point_order.hpp>
+#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
+
 #include <boost/geometry/multi/algorithms/covered_by.hpp>
 #include <boost/geometry/multi/algorithms/envelope.hpp>
 #include <boost/geometry/multi/algorithms/num_points.hpp>

Modified: branches/release/boost/geometry/multi/algorithms/length.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/length.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/length.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,6 +19,7 @@
 
 #include <boost/geometry/algorithms/length.hpp>
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/multi/algorithms/detail/multi_sum.hpp>
 #include <boost/geometry/multi/algorithms/num_points.hpp>
 

Modified: branches/release/boost/geometry/multi/algorithms/num_geometries.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/num_geometries.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/num_geometries.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,6 +21,8 @@
 #include <boost/range.hpp>
 
 #include <boost/geometry/algorithms/num_geometries.hpp>
+#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/num_interior_rings.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/num_interior_rings.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/num_interior_rings.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,6 +20,7 @@
 
 #include <boost/geometry/core/tag.hpp>
 #include <boost/geometry/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/multi/core/tags.hpp>
 
 #include <boost/geometry/algorithms/num_interior_rings.hpp>

Modified: branches/release/boost/geometry/multi/algorithms/num_points.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/num_points.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/num_points.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,6 +19,7 @@
 #include <boost/range.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/algorithms/num_points.hpp>
 
 

Modified: branches/release/boost/geometry/multi/algorithms/perimeter.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/perimeter.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/perimeter.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,6 +20,7 @@
 #include <boost/geometry/algorithms/perimeter.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 #include <boost/geometry/multi/algorithms/detail/multi_sum.hpp>
 #include <boost/geometry/multi/algorithms/num_points.hpp>

Modified: branches/release/boost/geometry/multi/algorithms/reverse.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/reverse.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/reverse.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,7 +21,7 @@
 #include <boost/geometry/multi/algorithms/detail/modify.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
-
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/simplify.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/simplify.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/simplify.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -18,7 +18,7 @@
 
 #include <boost/geometry/core/mutable_range.hpp>
 #include <boost/geometry/multi/core/tags.hpp>
-
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 #include <boost/geometry/multi/algorithms/clear.hpp>
 #include <boost/geometry/algorithms/simplify.hpp>

Modified: branches/release/boost/geometry/multi/algorithms/transform.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/transform.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/transform.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,6 +20,7 @@
 #include <boost/geometry/algorithms/transform.hpp>
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 namespace boost { namespace geometry
 {

Modified: branches/release/boost/geometry/multi/algorithms/unique.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/unique.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/unique.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,6 +19,7 @@
 
 #include <boost/geometry/algorithms/unique.hpp>
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/algorithms/within.hpp
==============================================================================
--- branches/release/boost/geometry/multi/algorithms/within.hpp (original)
+++ branches/release/boost/geometry/multi/algorithms/within.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,6 +21,7 @@
 #include <boost/geometry/multi/core/closure.hpp>
 #include <boost/geometry/multi/core/point_order.hpp>
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 
 namespace boost { namespace geometry
 {

Modified: branches/release/boost/geometry/multi/geometries/concepts/check.hpp
==============================================================================
--- branches/release/boost/geometry/multi/geometries/concepts/check.hpp (original)
+++ branches/release/boost/geometry/multi/geometries/concepts/check.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -38,37 +38,37 @@
 
 
 template <typename Geometry>
-struct check<multi_point_tag, Geometry, true>
+struct check<Geometry, multi_point_tag, true>
     : detail::concept_check::check<concept::ConstMultiPoint<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<multi_point_tag, Geometry, false>
+struct check<Geometry, multi_point_tag, false>
     : detail::concept_check::check<concept::MultiPoint<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<multi_linestring_tag, Geometry, true>
+struct check<Geometry, multi_linestring_tag, true>
     : detail::concept_check::check<concept::ConstMultiLinestring<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<multi_linestring_tag, Geometry, false>
+struct check<Geometry, multi_linestring_tag, false>
     : detail::concept_check::check<concept::MultiLinestring<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<multi_polygon_tag, Geometry, true>
+struct check<Geometry, multi_polygon_tag, true>
     : detail::concept_check::check<concept::ConstMultiPolygon<Geometry> >
 {};
 
 
 template <typename Geometry>
-struct check<multi_polygon_tag, Geometry, false>
+struct check<Geometry, multi_polygon_tag, false>
     : detail::concept_check::check<concept::MultiPolygon<Geometry> >
 {};
 

Modified: branches/release/boost/geometry/multi/io/dsv/write.hpp
==============================================================================
--- branches/release/boost/geometry/multi/io/dsv/write.hpp (original)
+++ branches/release/boost/geometry/multi/io/dsv/write.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -16,6 +16,9 @@
 
 #include <boost/range.hpp>
 
+#include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
+
 #include <boost/geometry/io/dsv/write.hpp>
 
 namespace boost { namespace geometry

Modified: branches/release/boost/geometry/multi/io/wkt/read.hpp
==============================================================================
--- branches/release/boost/geometry/multi/io/wkt/read.hpp (original)
+++ branches/release/boost/geometry/multi/io/wkt/read.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,6 +19,7 @@
 #include <boost/geometry/core/mutable_range.hpp>
 #include <boost/geometry/multi/core/tags.hpp>
 #include <boost/geometry/multi/core/point_type.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/multi/io/wkt/detail/prefix.hpp>
 #include <boost/geometry/io/wkt/read.hpp>
 

Modified: branches/release/boost/geometry/multi/io/wkt/write.hpp
==============================================================================
--- branches/release/boost/geometry/multi/io/wkt/write.hpp (original)
+++ branches/release/boost/geometry/multi/io/wkt/write.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -15,6 +15,7 @@
 #define BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP
 
 #include <boost/geometry/multi/core/tags.hpp>
+#include <boost/geometry/multi/geometries/concepts/check.hpp>
 #include <boost/geometry/multi/io/wkt/detail/prefix.hpp>
 #include <boost/geometry/io/wkt/write.hpp>
 
@@ -60,7 +61,7 @@
 {
 
 template <typename Multi>
-struct wkt<multi_point_tag, Multi>
+struct wkt<Multi, multi_point_tag>
     : detail::wkt::wkt_multi
         <
             Multi,
@@ -74,7 +75,7 @@
 {};
 
 template <typename Multi>
-struct wkt<multi_linestring_tag, Multi>
+struct wkt<Multi, multi_linestring_tag>
     : detail::wkt::wkt_multi
         <
             Multi,
@@ -87,7 +88,7 @@
 {};
 
 template <typename Multi>
-struct wkt<multi_polygon_tag, Multi>
+struct wkt<Multi, multi_polygon_tag>
     : detail::wkt::wkt_multi
         <
             Multi,

Modified: branches/release/boost/geometry/policies/relate/direction.hpp
==============================================================================
--- branches/release/boost/geometry/policies/relate/direction.hpp (original)
+++ branches/release/boost/geometry/policies/relate/direction.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -126,9 +126,9 @@
     typedef typename select_most_precise<coordinate_type, double>::type rtype;
 
 
- template <typename R>
+ template <typename R>
     static inline return_type segments_intersect(side_info const& sides,
- R const&,
+ R const&,
                     coordinate_type const& dx1, coordinate_type const& dy1,
                     coordinate_type const& dx2, coordinate_type const& dy2,
                     S1 const& s1, S2 const& s2)

Modified: branches/release/boost/geometry/policies/relate/intersection_points.hpp
==============================================================================
--- branches/release/boost/geometry/policies/relate/intersection_points.hpp (original)
+++ branches/release/boost/geometry/policies/relate/intersection_points.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -42,12 +42,12 @@
             S1, S2, CalculationType
>::type coordinate_type;
 
- template <typename R>
+ template <typename R>
     static inline return_type segments_intersect(side_info const&,
- R const& r,
+ R const& r,
                     coordinate_type const& dx1, coordinate_type const& dy1,
- coordinate_type const& dx2, coordinate_type const& dy2,
- S1 const& s1, S2 const& s2)
+ coordinate_type const& , coordinate_type const& ,
+ S1 const& s1, S2 const& )
     {
         typedef typename geometry::coordinate_type
             <

Modified: branches/release/boost/geometry/policies/relate/tupled.hpp
==============================================================================
--- branches/release/boost/geometry/policies/relate/tupled.hpp (original)
+++ branches/release/boost/geometry/policies/relate/tupled.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -49,9 +49,9 @@
     // Get the same type, but at least a double
     typedef typename select_most_precise<coordinate_type, double>::type rtype;
 
- template <typename R>
+ template <typename R>
     static inline return_type segments_intersect(side_info const& sides,
- R const& r,
+ R const& r,
                     coordinate_type const& dx1, coordinate_type const& dy1,
                     coordinate_type const& dx2, coordinate_type const& dy2,
                     segment_type1 const& s1, segment_type2 const& s2)

Modified: branches/release/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp (original)
+++ branches/release/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -93,10 +93,10 @@
 {
 public :
 
- // See also ticket 5954 https://svn.boost.org/trac/boost/ticket/5954
- // Comparable is currently not possible here because it has to be compared to the squared of max_distance, and more.
- // For now we have to take the real distance.
- typedef PointDistanceStrategy distance_strategy_type;
+ // See also ticket 5954 https://svn.boost.org/trac/boost/ticket/5954
+ // Comparable is currently not possible here because it has to be compared to the squared of max_distance, and more.
+ // For now we have to take the real distance.
+ typedef PointDistanceStrategy distance_strategy_type;
     // typedef typename strategy::distance::services::comparable_type<PointDistanceStrategy>::type distance_strategy_type;
 
     typedef typename strategy::distance::services::return_type<distance_strategy_type>::type return_type;

Modified: branches/release/boost/geometry/strategies/cartesian/cart_intersect.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/cartesian/cart_intersect.hpp (original)
+++ branches/release/boost/geometry/strategies/cartesian/cart_intersect.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -215,7 +215,7 @@
                     return Policy::disjoint();
                 }
 
- robustness_handle_meeting(a, b, sides, dx_a, dy_a, wx, wy, d, r);
+ //robustness_handle_meeting(a, b, sides, dx_a, dy_a, wx, wy, d, r);
 
                 if (robustness_verify_disjoint_at_one_collinear(a, b, sides))
                 {
@@ -295,7 +295,7 @@
     }
 
     static inline void robustness_verify_collinear(
- segment_type1 const& a, segment_type2 const& b,
+ segment_type1 const& , segment_type2 const& ,
                 bool a_is_point, bool b_is_point,
                 side_info& sides,
                 bool& collinear)
@@ -413,7 +413,7 @@
         return false;
     }
 
-
+/*
     // If r is one, or zero, segments should meet and their endpoints.
     // Robustness issue: check if this is really the case.
     // It turns out to be no problem, see buffer test #rt_s1 (and there are many cases generated)
@@ -447,7 +447,7 @@
             }
         }
     }
-
+*/
     template <std::size_t Dimension>
     static inline bool verify_disjoint(segment_type1 const& a,
                     segment_type2 const& b)

Modified: branches/release/boost/geometry/strategies/cartesian/distance_projected_point.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/cartesian/distance_projected_point.hpp (original)
+++ branches/release/boost/geometry/strategies/cartesian/distance_projected_point.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -162,6 +162,7 @@
                 <
                     Strategy, Point, fp_point_type
>::apply(strategy);
+ boost::ignore_unused_variable_warning(fp_strategy);
 
         fp_point_type projected;
         geometry::convert(p1, projected);

Modified: branches/release/boost/geometry/strategies/side_info.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/side_info.hpp (original)
+++ branches/release/boost/geometry/strategies/side_info.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,6 +21,11 @@
 namespace boost { namespace geometry
 {
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
 
 /*!
 \brief Class side_info: small class wrapping for sides (-1,0,1)
@@ -145,7 +150,7 @@
             << sides[0].second << " "
             << sides[1].first << " "
             << sides[1].second
- << std::endl;
+ << std::endl;
     }
 
 
@@ -159,6 +164,9 @@
 
 };
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
 
 }} // namespace boost::geometry
 

Modified: branches/release/boost/geometry/strategies/spherical/distance_haversine.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/spherical/distance_haversine.hpp (original)
+++ branches/release/boost/geometry/strategies/spherical/distance_haversine.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -100,14 +100,14 @@
 \tparam CalculationType \tparam_calculation
 \author Adapted from: http://williams.best.vwh.net/avform.htm
 \see http://en.wikipedia.org/wiki/Great-circle_distance
-\note It says: <em>The great circle distance d between two
+\note (from Wiki:) The great circle distance d between two
 points with coordinates {lat1,lon1} and {lat2,lon2} is given by:
     d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
 A mathematically equivalent formula, which is less subject
     to rounding error for short distances is:
- d=2*asin(sqrt((sin((lat1-lat2)/2))^2
- + cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
- </em>
+ d=2*asin(sqrt((sin((lat1-lat2) / 2))^2
+ + cos(lat1)*cos(lat2)*(sin((lon1-lon2) / 2))^2))
+
 
 \qbk{
 [heading See also]

Modified: branches/release/boost/geometry/strategies/strategy_transform.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/strategy_transform.hpp (original)
+++ branches/release/boost/geometry/strategies/strategy_transform.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -253,22 +253,22 @@
         return false;
     }
 
- template <typename P, typename T>
- inline bool cartesian_to_spherical_equatorial3(T x, T y, T z, P& p)
- {
- assert_dimension<P, 3>();
-
- // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
- T const r = sqrt(x * x + y * y + z * z);
- set<2>(p, r);
- set_from_radian<0>(p, atan2(y, x));
- if (r > 0.0)
- {
- set_from_radian<1>(p, asin(z / r));
- return true;
- }
- return false;
- }
+ template <typename P, typename T>
+ inline bool cartesian_to_spherical_equatorial3(T x, T y, T z, P& p)
+ {
+ assert_dimension<P, 3>();
+
+ // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
+ T const r = sqrt(x * x + y * y + z * z);
+ set<2>(p, r);
+ set_from_radian<0>(p, atan2(y, x));
+ if (r > 0.0)
+ {
+ set_from_radian<1>(p, asin(z / r));
+ return true;
+ }
+ return false;
+ }
 
 } // namespace detail
 #endif // DOXYGEN_NO_DETAIL
@@ -383,11 +383,11 @@
 template <typename P1, typename P2>
 struct from_cartesian_3_to_spherical_equatorial_3
 {
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 3>();
- return detail::cartesian_to_spherical_equatorial3(get<0>(p1), get<1>(p1), get<2>(p1), p2);
- }
+ inline bool apply(P1 const& p1, P2& p2) const
+ {
+ assert_dimension<P1, 3>();
+ return detail::cartesian_to_spherical_equatorial3(get<0>(p1), get<1>(p1), get<2>(p1), p2);
+ }
 };
 
 #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
@@ -486,7 +486,7 @@
 template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
 struct default_strategy<cartesian_tag, spherical_equatorial_tag, CoordSys1, CoordSys2, 3, 3, P1, P2>
 {
- typedef from_cartesian_3_to_spherical_equatorial_3<P1, P2> type;
+ typedef from_cartesian_3_to_spherical_equatorial_3<P1, P2> type;
 };
 
 

Modified: branches/release/boost/geometry/strategies/transform/map_transformer.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/transform/map_transformer.hpp (original)
+++ branches/release/boost/geometry/strategies/transform/map_transformer.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,10 +19,15 @@
 
 #include <boost/geometry/strategies/transform/matrix_transformers.hpp>
 
-
 namespace boost { namespace geometry
 {
 
+// Silence warning C4127: conditional expression is constant
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4127)
+#endif
+
 namespace strategy { namespace transform
 {
 
@@ -158,6 +163,9 @@
 
 }} // namespace strategy::transform
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
 
 }} // namespace boost::geometry
 

Modified: branches/release/boost/geometry/strategies/transform/matrix_transformers.hpp
==============================================================================
--- branches/release/boost/geometry/strategies/transform/matrix_transformers.hpp (original)
+++ branches/release/boost/geometry/strategies/transform/matrix_transformers.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -147,6 +147,7 @@
     typedef boost::numeric::ublas::matrix<coordinate_type> matrix_type;
     matrix_type m_matrix;
 
+public :
     inline ublas_transformer(
                 ct const& m_0_0, ct const& m_0_1, ct const& m_0_2, ct const& m_0_3,
                 ct const& m_1_0, ct const& m_1_1, ct const& m_1_2, ct const& m_1_3,
@@ -163,8 +164,6 @@
 
     inline ublas_transformer() : m_matrix(4, 4) {}
 
-public :
-
     inline bool apply(P1 const& p1, P2& p2) const
     {
         coordinate_type const& c1 = get<0>(p1);
@@ -297,6 +296,7 @@
 {
     typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
 
+public :
     inline scale_transformer(coordinate_type const& scale_x,
                 coordinate_type const& scale_y,
                 coordinate_type const& scale_z)

Modified: branches/release/boost/geometry/util/math.hpp
==============================================================================
--- branches/release/boost/geometry/util/math.hpp (original)
+++ branches/release/boost/geometry/util/math.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -44,17 +44,17 @@
 template <typename Type>
 struct equals<Type, true>
 {
- static inline Type get_max(Type const& a, Type const& b, Type const& c)
- {
- return (std::max)((std::max)(a, b), c);
- }
+ static inline Type get_max(Type const& a, Type const& b, Type const& c)
+ {
+ return (std::max)((std::max)(a, b), c);
+ }
 
     static inline bool apply(Type const& a, Type const& b)
     {
- if (a == b)
- {
- return true;
- }
+ if (a == b)
+ {
+ return true;
+ }
 
         // See http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.17,
         // FUTURE: replace by some boost tool or boost::test::close_at_tolerance
@@ -76,11 +76,11 @@
 {
     static inline bool apply(Type const& a, Type const& b)
     {
- if (equals<Type, true>::apply(a, b))
- {
- return false;
- }
- return a < b;
+ if (equals<Type, true>::apply(a, b))
+ {
+ return false;
+ }
+ return a < b;
     }
 };
 
@@ -102,6 +102,15 @@
     }
 };
 
+template <typename T>
+struct relaxed_epsilon
+{
+ static inline T apply(const T& factor)
+ {
+ return factor * std::numeric_limits<T>::epsilon();
+ }
+};
+
 
 } // namespace detail
 #endif
@@ -110,6 +119,12 @@
 template <typename T>
 inline T pi() { return detail::define_pi<T>::apply(); }
 
+template <typename T>
+inline T relaxed_epsilon(T const& factor)
+{
+ return detail::relaxed_epsilon<T>::apply(factor);
+}
+
 
 // Maybe replace this by boost equals or boost ublas numeric equals or so
 

Modified: branches/release/boost/geometry/util/rational.hpp
==============================================================================
--- branches/release/boost/geometry/util/rational.hpp (original)
+++ branches/release/boost/geometry/util/rational.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -39,13 +39,13 @@
         std::string before_part = source.substr(0, p);
         std::string const after_part = source.substr(p + 1);
 
- negate = false;
+ negate = false;
 
- if (before_part.size() > 0 && before_part[0] == '-')
- {
- negate = true;
- before_part.erase(0, 1);
- }
+ if (before_part.size() > 0 && before_part[0] == '-')
+ {
+ negate = true;
+ before_part.erase(0, 1);
+ }
         before = atol(before_part.c_str());
         after = atol(after_part.c_str());
         len = after_part.length();
@@ -71,9 +71,9 @@
             split_parts(source, p, before, after, negate, len);
 
             return negate
- ? -rational<T>(before, after)
- : rational<T>(before, after)
- ;
+ ? -rational<T>(before, after)
+ : rational<T>(before, after)
+ ;
 
         }
 
@@ -86,9 +86,9 @@
         }
 
         return negate
- ? -rational<T>(before) - rational<T>(after, den)
- : rational<T>(before) + rational<T>(after, den)
- ;
+ ? -rational<T>(before) - rational<T>(after, den)
+ : rational<T>(before) + rational<T>(after, den)
+ ;
     }
 };
 

Modified: branches/release/boost/geometry/views/closeable_view.hpp
==============================================================================
--- branches/release/boost/geometry/views/closeable_view.hpp (original)
+++ branches/release/boost/geometry/views/closeable_view.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -28,6 +28,12 @@
 namespace boost { namespace geometry
 {
 
+// Silence warning C4512: assignment operator could not be generated
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4512)
+#endif
+
 #ifndef DOXYGEN_NO_DETAIL
 
 namespace detail
@@ -93,6 +99,9 @@
 #endif // DOXYGEN_NO_SPECIALIZATIONS
 
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
 
 }} // namespace boost::geometry
 

Modified: branches/release/boost/geometry/views/identity_view.hpp
==============================================================================
--- branches/release/boost/geometry/views/identity_view.hpp (original)
+++ branches/release/boost/geometry/views/identity_view.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,6 +21,11 @@
 namespace boost { namespace geometry
 {
 
+// Silence warning C4512: assignment operator could not be generated
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4512)
+#endif
 
 /*!
 \brief View on a range, not modifying anything
@@ -46,6 +51,9 @@
     Range& m_range;
 };
 
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
 
 }} // namespace boost::geometry
 

Modified: branches/release/libs/geometry/doc/concept/polygon.qbk
==============================================================================
--- branches/release/libs/geometry/doc/concept/polygon.qbk (original)
+++ branches/release/libs/geometry/doc/concept/polygon.qbk 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -44,8 +44,8 @@
     but holes are allowed in __boost_geometry__ polygons).
 * If the polygons underlying `ring_type` is defined as clockwise, the exterior
     ring must have the clockwise orientation, and any interior ring must be
- counter clockwise. If the `ring_type` is defined counter clockwise, it is
- vice versa.
+ reversed w.r.t. the defined orientation (so: counter clockwise for clockwise exterior rings).
+ If the `ring_type` is defined counter clockwise, it is vice versa.
 * If the polygons underlying `ring_type` is defined as closed, all rings must be
     closed: the first point must be spatially equal to the last point.
 * The interior is a connected point set.

Modified: branches/release/libs/geometry/doc/doxy/Doxyfile
==============================================================================
--- branches/release/libs/geometry/doc/doxy/Doxyfile (original)
+++ branches/release/libs/geometry/doc/doxy/Doxyfile 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -39,7 +39,6 @@
 # \return* for various return cases
 ALIASES = qbk{1}="\xmlonly <qbk>\1</qbk> \endxmlonly" \
                         qbk{2}="\xmlonly <qbk.\1>\2</qbk.\1> \endxmlonly" \
- qbk_skip="\xmlonly <qbk.skip/> \endxmlonly" \
                         brief_calc{1}="Calculates the \1 of a geometry" \
                         brief_calc2{1}="Calculate the \1 of two geometries" \
                         brief_calc2{2}="Calculate the \1 \2 two geometries" \
@@ -56,7 +55,7 @@
                         tparam_box_or_segment="Any type fulfilling a Box Concept or a Segment Concept" \
                         tparam_calculation="numeric type for calculation (e.g. high precision); if [*void] then it is extracted automatically from the coordinate type and (if necessary) promoted to floating point" \
                         tparam_container="container type, for example std::vector, std::deque" \
- tparam_dimension_required="Dimension, this template parameter is required. Should contain \[0 .. n-1\] for an n-dimensional geometry" \
+ tparam_dimension_required="Dimension, this template parameter is required. Should contain \\[0 .. n-1\\] for an n-dimensional geometry" \
                         tparam_first_point="first point type" \
                         tparam_functor="Function or class with operator()" \
                         tparam_output_collection="output collection, either a multi-geometry, or a std::vector<Geometry> / std::deque<Geometry> etc" \
@@ -159,7 +158,6 @@
 ENABLED_SECTIONS =
 MAX_INITIALIZER_LINES = 30
 SHOW_USED_FILES = NO
-SHOW_DIRECTORIES = NO
 FILE_VERSION_FILTER =
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
@@ -254,7 +252,6 @@
 HTML_HEADER = doxygen_input/ggl_doxygen_header.html
 HTML_FOOTER = doxygen_input/ggl_doxygen_footer.html
 HTML_STYLESHEET =
-HTML_ALIGN_MEMBERS = YES
 GENERATE_HTMLHELP = NO
 GENERATE_DOCSET = NO
 DOCSET_FEEDNAME = "Generated documentation, by Doxygen"

Modified: branches/release/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.cpp
==============================================================================
--- branches/release/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.cpp (original)
+++ branches/release/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -18,9 +18,9 @@
 #include <boost/geometry/multi/multi.hpp>
 
 #include <boost/geometry/io/wkt/wkt.hpp>
-#include <boost/geometry/extensions/io/svg/write_svg_multi.hpp>
+#include <boost/geometry/io/svg/write_svg_multi.hpp>
 
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#include <boost/geometry/io/svg/svg_mapper.hpp>
 
 
 static const int wkt_countries_count = 1;

Modified: branches/release/libs/geometry/doc/doxy/doxygen_output/html/doxygen.css
==============================================================================
--- branches/release/libs/geometry/doc/doxy/doxygen_output/html/doxygen.css (original)
+++ branches/release/libs/geometry/doc/doxy/doxygen_output/html/doxygen.css 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,13 +1,12 @@
-/* The standard CSS for doxygen */
+/* The standard CSS for doxygen 1.8.3.1-20130324 */
 
 body, table, div, p, dl {
- font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
- font-size: 12px;
+ font: 400 14px/19px Roboto,sans-serif;
 }
 
 /* @group Heading Levels */
 
-h1 {
+h1.groupheader {
         font-size: 150%;
 }
 
@@ -17,14 +16,34 @@
         margin: 10px 2px;
 }
 
-h2 {
- font-size: 120%;
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
 }
 
-h3 {
+h3.groupheader {
         font-size: 100%;
 }
 
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
 dt {
         font-weight: bold;
 }
@@ -72,8 +91,6 @@
         background-color: #EBEFF6;
         border: 1px solid #A3B4D7;
         text-align: center;
- margin: 2px;
- padding: 2px;
 }
 
 div.qindex, div.navpath {
@@ -123,12 +140,12 @@
 a.elRef {
 }
 
-a.code {
- color: #4665A2;
+a.code, a.code:visited {
+ color: #4665A2;
 }
 
-a.codeRef {
- color: #4665A2;
+a.codeRef, a.codeRef:visited {
+ color: #4665A2;
 }
 
 /* @end */
@@ -137,20 +154,72 @@
         margin-left: -1cm;
 }
 
-.fragment {
- font-family: monospace, fixed;
- font-size: 105%;
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
 }
 
-pre.fragment {
- border: 1px solid #C4CFE5;
+div.fragment {
+ padding: 4px;
+ margin: 4px;
         background-color: #FBFCFD;
- padding: 4px 6px;
- margin: 4px 8px 4px 2px;
- overflow: auto;
- word-wrap: break-word;
- font-size: 9pt;
- line-height: 125%;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
 }
 
 div.ah {
@@ -183,15 +252,15 @@
 }
 
 body {
- background: white;
+ background-color: white;
         color: black;
         margin: 0;
 }
 
 div.contents {
         margin-top: 10px;
- margin-left: 10px;
- margin-right: 5px;
+ margin-left: 12px;
+ margin-right: 8px;
 }
 
 td.indexkey {
@@ -200,6 +269,8 @@
         border: 1px solid #C4CFE5;
         margin: 2px 0px 2px 0;
         padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
 }
 
 td.indexvalue {
@@ -292,6 +363,13 @@
         color: #ff0000
 }
 
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
 /* @end */
 
 /*
@@ -345,6 +423,24 @@
         padding: 0px;
 }
 
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
 .mdescLeft, .mdescRight,
 .memItemLeft, .memItemRight,
 .memTemplItemLeft, .memTemplItemRight, .memTemplParams {
@@ -359,8 +455,11 @@
         color: #555;
 }
 
-.memItemLeft, .memItemRight, .memTemplParams {
- border-top: 1px solid #C4CFE5;
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
 }
 
 .memItemLeft, .memTemplItemLeft {
@@ -374,6 +473,7 @@
 .memTemplParams {
         color: #4665A2;
         white-space: nowrap;
+ font-size: 80%;
 }
 
 /* @end */
@@ -406,15 +506,29 @@
         padding: 0;
         margin-bottom: 10px;
         margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
 }
 
 .memname {
- white-space: nowrap;
         font-weight: bold;
         margin-left: 6px;
 }
 
-.memproto {
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
         border-top: 1px solid #A8B8D9;
         border-left: 1px solid #A8B8D9;
         border-right: 1px solid #A8B8D9;
@@ -422,45 +536,55 @@
         color: #253555;
         font-weight: bold;
         text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
         /* opera specific markup */
         box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- border-top-right-radius: 8px;
- border-top-left-radius: 8px;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
         /* firefox specific markup */
         -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- -moz-border-radius-topright: 8px;
- -moz-border-radius-topleft: 8px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
         /* webkit specific markup */
         -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- -webkit-border-top-right-radius: 8px;
- -webkit-border-top-left-radius: 8px;
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: #E2E8F2;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
 
 }
 
-.memdoc {
+.memdoc, dl.reflist dd {
         border-bottom: 1px solid #A8B8D9;
         border-left: 1px solid #A8B8D9;
         border-right: 1px solid #A8B8D9;
- padding: 2px 5px;
+ padding: 6px 10px 2px 10px;
         background-color: #FBFCFD;
         border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
         /* opera specific markup */
- border-bottom-left-radius: 8px;
- border-bottom-right-radius: 8px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
         box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
         /* firefox specific markup */
- -moz-border-radius-bottomleft: 8px;
- -moz-border-radius-bottomright: 8px;
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
         -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
         /* webkit specific markup */
- -webkit-border-bottom-left-radius: 8px;
- -webkit-border-bottom-right-radius: 8px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
         -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
 }
 
 .paramkey {
@@ -478,9 +602,13 @@
 .paramname em {
         font-style: normal;
 }
+.paramname code {
+ line-height: 14px;
+}
 
 .params, .retval, .exception, .tparams {
- border-spacing: 6px 2px;
+ margin-left: 0px;
+ padding-left: 0px;
 }
 
 .params .paramname, .retval .paramname {
@@ -498,105 +626,116 @@
         vertical-align: top;
 }
 
+table.mlabels {
+ border-spacing: 0px;
+}
 
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
 
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
 
-/* @end */
-
-/* @group Directory (tree) */
-
-/* for the tree view */
+span.mlabels {
+ margin-left: 8px;
+}
 
-.ftvtree {
- font-family: sans-serif;
- margin: 0px;
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
 }
 
-/* these are for tree view when used as main index */
 
-.directory {
- font-size: 9pt;
- font-weight: bold;
- margin: 5px;
-}
 
-.directory h3 {
- margin: 0px;
- margin-top: 1em;
- font-size: 11pt;
-}
+/* @end */
 
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice. Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
+/* these are for tree view when not used as main index */
 
-/*
-.directory h3.swap {
- height: 61px;
- background-repeat: no-repeat;
- background-image: url("yourimage.gif");
-}
-.directory h3.swap span {
- display: none;
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ width: 100%;
 }
-*/
 
-.directory > h3 {
- margin-top: 0;
+.directory table {
+ border-collapse:collapse;
 }
 
-.directory p {
- margin: 0px;
- white-space: nowrap;
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
 }
 
-.directory div {
- display: none;
- margin: 0px;
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
 }
 
-.directory img {
- vertical-align: -30%;
+.directory td.entry a {
+ outline:none;
 }
 
-/* these are for tree view when not used as main index */
-
-.directory-alt {
- font-size: 100%;
- font-weight: bold;
+.directory td.entry a img {
+ border: none;
 }
 
-.directory-alt h3 {
- margin: 0px;
- margin-top: 1em;
- font-size: 11pt;
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
 }
 
-.directory-alt > h3 {
- margin-top: 0;
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
 }
 
-.directory-alt p {
- margin: 0px;
- white-space: nowrap;
+.directory img {
+ vertical-align: -30%;
 }
 
-.directory-alt div {
- display: none;
- margin: 0px;
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
 }
 
-.directory-alt img {
- vertical-align: -30%;
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
 }
 
-/* @end */
-
 div.dynheader {
         margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
 }
 
 address {
@@ -606,6 +745,8 @@
 
 table.doxtable {
         border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
 }
 
 table.doxtable td, table.doxtable th {
@@ -619,9 +760,72 @@
         font-size: 110%;
         padding-bottom: 4px;
         padding-top: 5px;
- text-align:left;
 }
 
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
 .tabsearch {
         top: 0px;
         left: 10px;
@@ -637,6 +841,7 @@
         font-size: 11px;
         background-image:url('tab_b.png');
         background-repeat:repeat-x;
+ background-position: 0 -5px;
         height:30px;
         line-height:30px;
         color:#8AA0CC;
@@ -664,6 +869,10 @@
         display:block;
         text-decoration: none;
         outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
 }
 
 .navpath li.navelem a:hover
@@ -702,7 +911,6 @@
 div.ingroups
 {
         font-size: 8pt;
- padding-left: 5px;
         width: 50%;
         text-align: left;
 }
@@ -731,47 +939,74 @@
         padding: 0 0 0 10px;
 }
 
-dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
 {
- border-left:4px solid;
- padding: 0 0 0 6px;
+ margin-left: 0px;
+ padding-left: 0px;
 }
 
 dl.note
 {
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
         border-color: #D0C000;
 }
 
 dl.warning, dl.attention
 {
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
         border-color: #FF0000;
 }
 
 dl.pre, dl.post, dl.invariant
 {
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
         border-color: #00D000;
 }
 
 dl.deprecated
 {
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
         border-color: #505050;
 }
 
 dl.todo
 {
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
         border-color: #00C0E0;
 }
 
 dl.test
 {
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
         border-color: #3030E0;
 }
 
 dl.bug
 {
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
         border-color: #C08050;
 }
 
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
 #projectlogo
 {
         text-align: center;
@@ -833,3 +1068,117 @@
         font-weight: bold;
 }
 
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 20px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+

Modified: branches/release/libs/geometry/doc/doxy/doxygen_output/html/doxygen.png
==============================================================================
Binary files. No diff available.

Modified: branches/release/libs/geometry/doc/doxy/doxygen_output/html/tabs.css
==============================================================================
--- branches/release/libs/geometry/doc/doxy/doxygen_output/html/tabs.css (original)
+++ branches/release/libs/geometry/doc/doxy/doxygen_output/html/tabs.css 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -3,6 +3,7 @@
     width: 100%;
     z-index: 101;
     font-size: 13px;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
 }
 
 .tabs2 {

Modified: branches/release/libs/geometry/doc/geometry.qbk
==============================================================================
--- branches/release/libs/geometry/doc/geometry.qbk (original)
+++ branches/release/libs/geometry/doc/geometry.qbk 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -12,8 +12,8 @@
 
 [library Geometry
     [quickbook 1.5]
- [authors [Gehrels, Barend], [Lalande, Bruno], [Loskot, Mateusz]]
- [copyright 2009-2012 Barend Gehrels, Bruno Lalande, Mateusz Loskot]
+ [authors [Gehrels, Barend], [Lalande, Bruno], [Loskot, Mateusz], [Wulkiewicz, Adam]]
+ [copyright 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz]
     [purpose Documentation of Boost.Geometry library]
     [license
         Distributed under the Boost Software License, Version 1.0.
@@ -35,7 +35,8 @@
 [def __geo__ Geographic]
 [def __rev__ Reversed polygon (coordinates not according their orientiation)]
 [def __empty__ Empty (e.g. polygon without points)]
-[def __box__ Rectangle]
+[def __box__ Box]
+[def __rectangle__ Rectangle]
 [def __segment__ Segment]
 [def __point__ Point]
 [def __linestring__ Linestring]
@@ -108,8 +109,7 @@
 
 * Akira Takahashi (adaption of Boost.Fusion)
 * Alfredo Correa (adaption of Boost.Array)
-* Adam Wulkiewicz (spatial indexes) [footnote Currently an extension]
-* Federico Fern\u00E1ndez (spatial indexes) [footnote Currently an extension]
+* Federico Fern\u00E1ndez (preliminary version of R-tree spatial index)
 * Karsten Ahnert (patch for cross-track distance)
 
 [include imports.qbk]
@@ -120,6 +120,10 @@
 [include design_rationale.qbk]
 [include compiling.qbk]
 
+[section Spatial indexes]
+[include index/index.qbk]
+[endsect]
+
 [section Indexes]
 [include matrix.qbk]
 [section Alphabetical Index]

Modified: branches/release/libs/geometry/doc/html/index.html
==============================================================================
--- branches/release/libs/geometry/doc/html/index.html (original)
+++ branches/release/libs/geometry/doc/html/index.html 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -31,8 +31,10 @@
 <div><div class="author"><h3 class="author">
 <span class="firstname">Mateusz</span> <span class="surname">Loskot</span>
 </h3></div></div>
-<div><p class="copyright">Copyright &#169; 2009-2012 Barend
- Gehrels, Bruno Lalande, Mateusz Loskot</p></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Adam</span> <span class="surname">Wulkiewicz</span>
+</h3></div></div>
+<div><p class="copyright">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz</p></div>
 <div><div class="legalnotice">
 <a name="geometry.legal"></a><p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -47,6 +49,8 @@
 <dt><span class="section">Quick Start</span></dt>
 <dt><span class="section">Design Rationale</span></dt>
 <dt><span class="section">Compilation</span></dt>
+<dt><span class="section">Spatial indexes</span></dt>
+<dd><dl><dt><span class="section">R-tree</span></dt></dl></dd>
 <dt><span class="section">Indexes</span></dt>
 <dd><dl>
 <dt><span class="section">Reference matrix</span></dt>
@@ -66,6 +70,7 @@
 <dt><span class="section">Exceptions</span></dt>
 <dt><span class="section">Iterators</span></dt>
 <dt><span class="section">Models</span></dt>
+<dt><span class="section">Spatial indexes</span></dt>
 <dt><span class="section">Strategies</span></dt>
 <dt><span class="section">Views</span></dt>
 </dl></dd>
@@ -89,27 +94,15 @@
         Alfredo Correa (adaption of Boost.Array)
       </li>
 <li class="listitem">
- Adam Wulkiewicz (spatial indexes) <sup>[<a name="geometry.f0" href="#ftn.geometry.f0" class="footnote">1</a>]</sup>
- </li>
-<li class="listitem">
- Federico Fern&#225;ndez (spatial indexes) <sup>[<a name="geometry.f1" href="#ftn.geometry.f1" class="footnote">2</a>]</sup>
+ Federico Fern&#225;ndez (preliminary version of R-tree spatial index)
       </li>
 <li class="listitem">
         Karsten Ahnert (patch for cross-track distance)
       </li>
 </ul></div>
-<div class="footnotes">
-<br><hr width="100" align="left">
-<div class="footnote"><p><sup>[<a id="ftn.geometry.f0" href="#geometry.f0" class="para">1</a>] </sup>
- Currently an extension
- </p></div>
-<div class="footnote"><p><sup>[<a id="ftn.geometry.f1" href="#geometry.f1" class="para">2</a>] </sup>
- Currently an extension
- </p></div>
-</div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: August 21, 2012 at 16:43:26 GMT</small></p></td>
+<td align="left"><p><small>Last revised: May 12, 2013 at 10:55:03 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>

Modified: branches/release/libs/geometry/doc/make_qbk.py
==============================================================================
--- branches/release/libs/geometry/doc/make_qbk.py (original)
+++ branches/release/libs/geometry/doc/make_qbk.py 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -148,4 +148,9 @@
 group_to_quickbook("register")
 group_to_quickbook("enum")
 
-os.system("../../../b2")
+os.chdir("index")
+execfile("make_qbk.py")
+os.chdir("..")
+
+# Use either bjam or b2 or ../../../b2 (the last should be done on Release branch)
+os.system("bjam")

Modified: branches/release/libs/geometry/doc/quickref.xml
==============================================================================
--- branches/release/libs/geometry/doc/quickref.xml (original)
+++ branches/release/libs/geometry/doc/quickref.xml 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -8,6 +8,7 @@
   Copyright (c) 2009-2011 Mateusz Loskot, London, UK.
   Copyright (c) 2009-2011 Barend Gehrels, Amsterdam, the Netherlands.
   Copyright (c) 2009-2011 Bruno Lalande, Paris, France.
+ Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
 
   Use, modification and distribution is subject to the Boost Software License,
   Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -624,5 +625,128 @@
   </row>
  </tbody>
 </tgroup>
+
+<!-- ###### SPATIAL INDEXES ######################################################################### -->
+<tgroup cols="3">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <colspec colname="c"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="c">
+ <bridgehead renderas="sect2">Spatial indexes</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">R-tree</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree">boost::geometry::index::rtree</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">R-tree parameters</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.parameters.boost__geometry__index__linear">boost::geometry::index::linear</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.parameters.boost__geometry__index__quadratic">boost::geometry::index::quadratic</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.parameters.boost__geometry__index__rstar">boost::geometry::index::rstar</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.parameters.boost__geometry__index__dynamic_linear">boost::geometry::index::dynamic_linear</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.parameters.boost__geometry__index__dynamic_quadratic">boost::geometry::index::dynamic_quadratic</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.parameters.boost__geometry__index__dynamic_rstar">boost::geometry::index::dynamic_rstar</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">R-tree constructors and destructor</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.rtree__">rtree()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.rtree_parameters_type_const____indexable_getter_const____value_equal_const____allocator_type_const___">rtree(parameters_type const &amp;, indexable_getter const &amp;, value_equal const &amp;, allocator_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.rtree_iterator__iterator_">rtree(Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.rtree_range_const___">rtree(Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.rtree_rtree_const___">rtree(rtree const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.rtree_rtree_const____allocator_type_const___">rtree(rtree const &amp;, allocator_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.rtree_rtree____">rtree(rtree &amp;&amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.rtree_rtree_____allocator_type_const___">rtree(rtree &amp;&amp;, allocator_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree._rtree__">~rtree()</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">R-tree member functions</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.operator__rtree_const___">operator=(const rtree &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.operator__rtree____">operator=(rtree &amp;&amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.swap_rtree___">swap(rtree &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.insert_value_type_const___">insert(value_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.insert_iterator__iterator_">insert(Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.insert_range_const___">insert(Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.remove_value_type_const___">remove(value_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.remove_iterator__iterator_">remove(Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.remove_range_const___">remove(Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.query_predicates_const____outiter_">query(Predicates const &amp;, OutIter)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.size__">size()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.empty__">empty()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.clear__">clear()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.bounds__">bounds()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.count_valueorindexable_const___">count(ValueOrIndexable const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.parameters__">parameters()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.indexable_get__">indexable_get()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.value_eq__">value_eq()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.boost__geometry__index__rtree.get_allocator__">get_allocator()</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">R-tree free functions (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.insert_rtree_________value_const___">insert(rtree&lt;...&gt; &amp;, Value const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.insert_rtree_________iterator__iterator_">insert(rtree&lt;...&gt; &amp;, Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.insert_rtree_________range_const___">insert(rtree&lt;...&gt; &amp;, Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.remove_rtree_________value_const___">remove(rtree&lt;...&gt; &amp;, Value const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.remove_rtree_________iterator__iterator_">remove(rtree&lt;...&gt; &amp;, Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.remove_rtree_________range_const___">remove(rtree&lt;...&gt; &amp;, Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.query_rtree______const____predicates_const____outiter_">query(rtree&lt;...&gt; const &amp;, Predicates const &amp;, OutIter)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.clear_rtree________">clear(rtree&lt;...&gt; &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.size_rtree______const___">size(rtree&lt;...&gt; const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.empty_rtree______const___">empty(rtree&lt;...&gt; const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.bounds_rtree______const___">bounds(rtree&lt;...&gt; const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.rtree.group__rtree__functions.swap_rtree_________rtree________">swap(rtree&lt;...&gt; &amp;, rtree&lt;...&gt; &amp;)</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Observers (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.observers.boost__geometry__index__indexable">boost::geometry::index::indexable</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.observers.boost__geometry__index__equal_to">boost::geometry::index::equal_to</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Inserters (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__inserters.inserter_container___">inserter(Container &amp;)</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Adaptors (boost::geometry::index::adaptors::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__adaptors.queried_predicates_const___">queried(Predicates const &amp;)</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Predicates (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.covered_by_geometry_const___">covered_by(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.disjoint_geometry_const___">disjoint(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.intersects_geometry_const___">intersects(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.overlaps_geometry_const___">overlaps(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.within_geometry_const___">within(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.satisfies_unarypredicate_const___">satisfies(UnaryPredicate const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.nearest_point_const____unsigned_">nearest(Point const &amp;, unsigned)</link></member>
+ </simplelist>
+ </entry>
+ <!--entry valign="top">
+ <bridgehead renderas="sect3">Nearest relations (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__nearest__relations.to_nearest_t_const___">to_nearest(T const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__nearest__relations.to_centroid_t_const___">to_centroid(T const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__nearest__relations.to_furthest_t_const___">to_furthest(T const &amp;) </link></member>
+ </simplelist>
+ </entry-->
+ </row>
+ </tbody>
+</tgroup>
 
 </informaltable>

Modified: branches/release/libs/geometry/doc/readme.txt
==============================================================================
--- branches/release/libs/geometry/doc/readme.txt (original)
+++ branches/release/libs/geometry/doc/readme.txt 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -15,9 +15,10 @@
 
 1) install Doxygen
 2) install QuickBook using http://www.boost.org/doc/libs/1_45_0/doc/html/quickbook/install.html#quickbook.install.linux
-3) compile doxygen_xml2qbk, in src/docutils/tools/doxygen_xml2qbk
-4) put binary somewhere, e.g. in /usr/local/bin/doxygen_xml2qbk
-5) execute python file "make_qbk.py" (calling doxygen, doxygen_xml2qbk, bjam)
+3) unpack RapidXML, see src/docutils/tools/doxygen_xml2qbk/contrib/readme.txt
+4) compile doxygen_xml2qbk, in src/docutils/tools/doxygen_xml2qbk
+5) put binary somewhere, e.g. in /usr/local/bin/doxygen_xml2qbk
+6) execute python file "make_qbk.py" (calling doxygen, doxygen_xml2qbk, bjam)
 
 Folders in this folder:
 concept: manually written documentation QBK files, on concept

Modified: branches/release/libs/geometry/doc/reference.qbk
==============================================================================
--- branches/release/libs/geometry/doc/reference.qbk (original)
+++ branches/release/libs/geometry/doc/reference.qbk 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -4,6 +4,7 @@
   Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
   Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
   Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
 
   Use, modification and distribution is subject to the Boost Software License,
   Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -241,6 +242,34 @@
 [endsect]
 
 
+[section:spatial_indexes Spatial indexes]
+
+[section:rtree R-tree]
+[include index/generated/rtree.qbk]
+[include index/generated/rtree_functions.qbk]
+[section:parameters R-tree parameters (boost::geometry::index::)]
+[include index/generated/rtree_linear.qbk]
+[include index/generated/rtree_quadratic.qbk]
+[include index/generated/rtree_rstar.qbk]
+[include index/generated/rtree_dynamic_linear.qbk]
+[include index/generated/rtree_dynamic_quadratic.qbk]
+[include index/generated/rtree_dynamic_rstar.qbk]
+[endsect]
+[endsect]
+
+[section:observers Observers (boost::geometry::index::)]
+[include index/generated/indexable.qbk]
+[include index/generated/equal_to.qbk]
+[endsect]
+[include index/generated/inserters.qbk]
+[include index/generated/adaptors.qbk]
+
+[include index/generated/predicates.qbk]
+[/include index/generated/nearest_relations.qbk]
+
+[endsect]
+
+
 [section:strategies Strategies]
 [include generated/distance_pythagoras.qbk]
 [include generated/distance_haversine.qbk]

Modified: branches/release/libs/geometry/doc/reference/core/max_corner.qbk
==============================================================================
--- branches/release/libs/geometry/doc/reference/core/max_corner.qbk (original)
+++ branches/release/libs/geometry/doc/reference/core/max_corner.qbk 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,8 +19,8 @@
 
 [heading See also]
 * [link geometry.reference.constants.min_corner min_corner]
-* [link geometry.reference.access.get.get_2_with_index get with index]
-* [link geometry.reference.access.set.set_3_with_index set with index]
+* [link geometry.reference.access.get.get_1_with_index get with index]
+* [link geometry.reference.access.set.set_2_with_index set with index]
 
 [endsect]
 

Modified: branches/release/libs/geometry/doc/reference/core/min_corner.qbk
==============================================================================
--- branches/release/libs/geometry/doc/reference/core/min_corner.qbk (original)
+++ branches/release/libs/geometry/doc/reference/core/min_corner.qbk 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,7 +19,7 @@
 
 [heading See also]
 * [link geometry.reference.constants.max_corner max_corner]
-* [link geometry.reference.access.get.get_2_with_index get with index]
-* [link geometry.reference.access.set.set_3_with_index set with index]
+* [link geometry.reference.access.get.get_1_with_index get with index]
+* [link geometry.reference.access.set.set_2_with_index set with index]
 
 [endsect]

Modified: branches/release/libs/geometry/doc/release_notes.qbk
==============================================================================
--- branches/release/libs/geometry/doc/release_notes.qbk (original)
+++ branches/release/libs/geometry/doc/release_notes.qbk 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,9 +1,10 @@
 [/============================================================================
   Boost.Geometry (aka GGL, Generic Geometry Library)
 
- Copyright (c) 2009-2012 Barend Gehrels, Geodan, Amsterdam, the Netherlands.
- Copyright (c) 2009-2012 Mateusz Loskot (mateusz_at_[hidden])
- Copyright (c) 2009-2012 Mateusz Lalande, Paris, France.
+ Copyright (c) 2009-2013 Barend Gehrels, Geodan, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2013 Mateusz Loskot (mateusz_at_[hidden])
+ Copyright (c) 2009-2013 Mateusz Lalande, Paris, France.
+ Copyright (c) 2011-2013 Adam Wulkiewicz
 
   Use, modification and distribution is subject to the Boost Software License,
   Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -12,6 +13,27 @@
 
 [section:release_notes Release Notes]
 
+[/=================]
+[heading Boost 1.54]
+[/=================]
+
+[*Additional functionality]
+
+* added Spatial Index, developed for Boost.Geometry by Adam Wulkiewicz. The spatial index was originally started by Federico J. Fernandez during the Google Summer of Code 2008 program, mentored by Hartmut Kaiser.
+
+[*Bugfixes]
+* collinear opposite segments did sometimes (in circles) have a robustness issue, fixed
+
+[*Solved tickets]
+
+* [@https://svn.boost.org/trac/boost/ticket/7462 7462] degenerate union result for float, fixed
+* [@https://svn.boost.org/trac/boost/ticket/7465 7465] wrong construtors access type in scale_transformer class, fixed
+* [@https://svn.boost.org/trac/boost/ticket/7802 7802] cart_intersect.hpp unused parameter warnings, fixed
+* [@https://svn.boost.org/trac/boost/ticket/8254 8254] faulty intersection, fixed
+* [@https://svn.boost.org/trac/boost/ticket/8393 8393] polygon model doesn't adhere to stated Polygon concept rules, doc updated.
+* [@https://svn.boost.org/trac/boost/ticket/8403 8403] silenced compiler warning C4127: conditional expression is constant
+* [@https://svn.boost.org/trac/boost/ticket/8405 8405] silenced compiler warning C4189: '...' : local variable is initialized but not referenced
+
 
 [/=================]
 [heading Boost 1.53]

Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/configuration.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/configuration.hpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/configuration.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,6 +1,7 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 //
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
 // Use, modification and distribution is subject to the Boost Software License,
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
@@ -14,6 +15,7 @@
 #include <vector>
 
 
+
 struct configuration
 {
     // To transfer e.g. c:/_svn/boost/trunk/boost/geometry/algorithms/area.hpp
@@ -27,6 +29,10 @@
     std::vector<std::string> convenience_headers;
 
     std::string skip_namespace;
+
+ enum output_style_type {def, alt};
+ output_style_type output_style;
+ configuration() : output_style(def) {}
 };
 
 

Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,6 +1,7 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 //
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
 // Use, modification and distribution is subject to the Boost Software License,
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
@@ -22,18 +23,20 @@
 {
     function_unknown,
     function_define,
- function_constructor,
+ function_constructor_destructor,
     function_member,
- function_free
+ function_free,
 };
 
 struct base_element
 {
     std::string name;
     std::string brief_description;
-
+
     bool skip;
 
+ std::string id;
+
     base_element(std::string const& n = "")
         : name(n)
         , skip(false)
@@ -47,6 +50,7 @@
     std::string type;
     std::string default_value; // for template parameters
     std::string fulltype; // post-processed
+ std::string fulltype_without_links;
 };
 
 struct enumeration_value : public base_element
@@ -85,6 +89,12 @@
     }
 };
 
+struct paragraph
+{
+ std::string title;
+ std::string text;
+};
+
 // Base of a class/struct, function, define
 struct element : public base_element
 {
@@ -103,6 +113,10 @@
     std::vector<parameter> template_parameters;
     std::vector<parameter> parameters;
 
+ std::vector<paragraph> paragraphs;
+ std::string warning;
+ std::string note;
+
     element()
         : line(0)
     {}
@@ -114,12 +128,17 @@
     function_type type;
     std::string definition, argsstring;
     std::string return_type, return_description;
+ std::string precondition;
+
+ std::string return_type_without_links;
+ bool is_static, is_const, is_explicit, is_virtual;
 
     bool unique;
 
     function()
         : type(function_unknown)
         , unique(true)
+ , is_static(false), is_const(false), is_explicit(false), is_virtual(false)
     {}
 
 };
@@ -153,6 +172,9 @@
 
 struct documentation
 {
+ std::string group_id;
+ std::string group_title;
+
     // Only one expected (no grouping)
     class_or_struct cos;
 

Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,6 +1,7 @@
 // doxml2qbk (developed in the context of Boost.Geometry documentation)
 //
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
 // Use, modification and distribution is subject to the Boost Software License,
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
@@ -18,8 +19,6 @@
 // to an example.
 // - currently still in draft
 
-// Aug 14/15: added classes, defines, various enhancements.
-
 #include <iostream>
 #include <fstream>
 #include <sstream>
@@ -43,6 +42,23 @@
 #include <quickbook_output.hpp>
 #include <rapidxml_util.hpp>
 
+static const std::string version = "1.1.0";
+
+inline std::string program_description(bool decorated)
+{
+ std::string result;
+ if (decorated)
+ {
+ result = "=== ";
+ }
+ result += "doxygen_xml2qbk ";
+ result += version;
+ if (decorated)
+ {
+ result += " ===";
+ }
+ return result;
+}
 
 
 int main(int argc, char** argv)
@@ -52,17 +68,18 @@
     {
         configuration config;
         std::string copyright_filename;
+ std::string output_style;
 
         // Read/get configuration
         {
             namespace po = boost::program_options;
- po::options_description description("=== doxml2qbk ===\nAllowed options");
-
+ po::options_description description;
 
             std::string convenience_headers;
 
             description.add_options()
                 ("help", "Help message")
+ ("version", "Version description")
                 ("xml", po::value<std::string>(&filename),
                             "Name of XML file written by Doxygen")
                 ("start_include", po::value<std::string>(&config.start_include),
@@ -72,9 +89,12 @@
                 ("convenience_headers", po::value<std::string>(&convenience_headers),
                             "Convenience header(s) (comma-separated)")
                 ("skip_namespace", po::value<std::string>(&config.skip_namespace),
- "Namespace to skip (e.g. boost::mylib::")
+ "Namespace to skip (e.g. boost::mylib::)")
                 ("copyright", po::value<std::string>(&copyright_filename),
                             "Name of QBK file including (commented) copyright and license")
+
+ ("output_style", po::value<std::string>(&output_style),
+ "Docbook output style. Available values: 'alt'")
             ;
 
             po::variables_map varmap;
@@ -92,9 +112,25 @@
 
             po::notify(varmap);
 
- if (varmap.count("help") || filename.empty())
+ if (varmap.count("version"))
+ {
+ std::cout << version << std::endl;
+ return 0;
+ }
+ else if (varmap.count("help"))
             {
- std::cout << description << std::endl;
+ std::cout
+ << program_description(true) << std::endl
+ << "Available options:" << std::endl
+ << description << std::endl;
+ return 0;
+ }
+ else if (filename.empty())
+ {
+ std::cout
+ << program_description(true) << std::endl
+ << "Allowed options:" << std::endl
+ << description << std::endl;
                 return 1;
             }
 
@@ -105,6 +141,10 @@
             }
         }
 
+ // Set output style
+ if ( "alt" == output_style )
+ config.output_style = configuration::alt;
+
         // Read files into strings
         std::string xml_string = file_to_string(filename);
         std::string license = copyright_filename.empty()
@@ -146,29 +186,42 @@
 
         // Write warning comment
         std::cout
- << "[/ Generated by doxygen_xml2qbk, don't change, will be overwritten automatically]" << std::endl
+ << "[/ Generated by " << program_description(false) << ", don't change, will be overwritten automatically]" << std::endl
             << "[/ Generated from " << filename << "]" << std::endl;
 
- // Write the rest: functions, defines, classes or structs
- BOOST_FOREACH(function const& f, doc.functions)
+ if ( configuration::def == config.output_style )
         {
- quickbook_output(f, config, std::cout);
- }
- BOOST_FOREACH(function const& f, doc.defines)
- {
- quickbook_output(f, config, std::cout);
+ // Write the rest: functions, defines, classes or structs
+ BOOST_FOREACH(function const& f, doc.functions)
+ {
+ quickbook_output(f, config, std::cout);
+ }
+ BOOST_FOREACH(function const& f, doc.defines)
+ {
+ quickbook_output(f, config, std::cout);
+ }
+ BOOST_FOREACH(enumeration const& e, doc.enumerations)
+ {
+ quickbook_output(e, config, std::cout);
+ }
+
+ if (! doc.cos.name.empty())
+ {
+ std::sort(doc.cos.functions.begin(), doc.cos.functions.end(), sort_on_line<function>());
+ quickbook_output(doc.cos, config, std::cout);
+ }
         }
- BOOST_FOREACH(enumeration const& e, doc.enumerations)
+ else if ( configuration::alt == config.output_style )
         {
- quickbook_output(e, config, std::cout);
- }
+ if (! doc.cos.name.empty())
+ {
+ std::sort(doc.cos.functions.begin(), doc.cos.functions.end(), sort_on_line<function>());
+ quickbook_output_alt(doc.cos, config, std::cout);
+ }
 
- if (! doc.cos.name.empty())
- {
- std::sort(doc.cos.functions.begin(), doc.cos.functions.end(), sort_on_line<function>());
- quickbook_output(doc.cos, config, std::cout);
+ if ( !doc.group_id.empty() )
+ quickbook_output_alt(doc, config, std::cout);
         }
-
     }
     catch(std::exception const& e)
     {

Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,6 +1,7 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 //
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
 // Use, modification and distribution is subject to the Boost Software License,
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
@@ -62,7 +63,16 @@
 So we have to list explicitly either where to recurse, or where not to...
 
 */
-static void parse_para(rapidxml::xml_node<>* node, std::string& contents, bool& skip, bool first = true)
+
+// Type used to store parsing state. It indicates if QBK formatting block was opened - [*...], [^...], etc.
+enum text_block
+{
+ not_in_block,
+ in_code_block,
+ in_block
+};
+
+static void parse_para(rapidxml::xml_node<>* node, configuration const& config, std::string& contents, bool& skip, bool first = true, text_block tb = not_in_block)
 {
     if (node != NULL)
     {
@@ -70,18 +80,73 @@
         {
             //std::cout << "ELEMENT: " << node->name() << "=" << node->value() << std::endl;
             std::string name = node->name();
- if (boost::equals(name, "qbk.skip"))
+ if ( boost::equals(name, "itemizedlist") )
+ {
+ contents += "\n\n";
+ parse_para(node->first_node(), config, contents, skip, true, tb);
+ contents += "\n";
+ parse_para(node->next_sibling(), config, contents, skip, true, tb);
+ return;
+ }
+ else if ( boost::equals(name, "listitem") )
+ {
+ contents += "* ";
+ parse_para(node->first_node(), config, contents, skip, true, tb);
+ contents += "\n";
+ parse_para(node->next_sibling(), config, contents, skip, true, tb);
+ return;
+ }
+ else if ( boost::equals(name, "verbatim") )
+ {
+ contents += "\n``\n";
+ parse_para(node->first_node(), config, contents, skip, false, tb);
+ contents += "``\n";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ else if ( boost::equals(name, "bold") )
+ {
+ contents += "[*";
+ parse_para(node->first_node(), config, contents, skip, false, in_block);
+ contents += "]";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ else if ( boost::equals(name, "emphasis") )
             {
- skip = true;
+ contents += "['";
+ parse_para(node->first_node(), config, contents, skip, false, in_block);
+ contents += "]";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
                 return;
             }
+ else if ( boost::equals(name, "computeroutput") )
+ {
+ contents += "[^";
+ parse_para(node->first_node(), config, contents, skip, false, tb == in_block ? in_block : in_code_block);
+ contents += "]";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ else if ( boost::equals(name, "ref") )
+ {
+ // If alternative output is used - insert links
+ if ( configuration::alt == config.output_style )
+ {
+ std::string refid = node->first_attribute("refid")->value();
+ if ( !refid.empty() )
+ {
+ contents += std::string("[link ") + refid + " ";
+ parse_para(node->first_node(), config, contents, skip, false, in_block);
+ contents += "]";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ }
+ }
             else if (! (
                 (boost::equals(name, "para") && first)
- || boost::equals(name, "ref")
                 || boost::equals(name, "defval")
- || boost::equals(name, "verbatim")
- || boost::equals(name, "bold")
- || boost::equals(name, "emphasis")
                 || boost::equals(name, "linebreak")
                 ))
             {
@@ -90,20 +155,33 @@
         }
         else if (node->type() == rapidxml::node_data)
         {
- contents += node->value();
+ std::string str = node->value();
+ if ( tb == in_block )
+ {
+ boost::replace_all(str, "\\", "\\\\");
+ boost::replace_all(str, "[", "\\[");
+ boost::replace_all(str, "]", "\\]");
+ }
+ else if ( tb == in_code_block )
+ {
+ if ( str.find('`') == std::string::npos )
+ str = std::string("`") + str + "`";
+ }
+ contents += str;
             //std::cout << "DATA: " << node->name() << "=" << node->value() << std::endl;
         }
         else
         {
             //std::cout << "OTHER: " << node->name() << "=" << node->value() << std::endl;
         }
- parse_para(node->first_node(), contents, skip, false);
- parse_para(node->next_sibling(), contents, skip, false);
+
+ parse_para(node->first_node(), config, contents, skip, false, tb);
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
     }
 }
 
 
-static void parse_parameter(rapidxml::xml_node<>* node, parameter& p)
+static void parse_parameter(rapidxml::xml_node<>* node, configuration const& config, parameter& p)
 {
     // #define: <param><defname>Point</defname></param>
     // template: <param><type>typename</type><declname>CoordinateType</declname><defname>CoordinateType</defname></param>
@@ -121,25 +199,33 @@
             boost::replace_all(p.type, "&", "");
             boost::replace_all(p.type, "*", "");
             boost::trim(p.type);
+
+ // If alt output is used retrieve type with QBK links
+ if ( configuration::alt == config.output_style )
+ {
+ p.fulltype_without_links = p.fulltype;
+ p.fulltype.clear();
+ parse_para(node->first_node(), config, p.fulltype, p.skip);
+ }
         }
         else if (name == "declname") p.name = node->value();
         else if (name == "parametername") p.name = node->value();
         else if (name == "defname") p.name = node->value();
         else if (name == "defval")
         {
- parse_para(node, p.default_value, p.skip);
+ parse_para(node, config, p.default_value, p.skip);
         }
         else if (name == "para")
         {
- parse_para(node, p.brief_description, p.skip);
+ parse_para(node, config, p.brief_description, p.skip);
         }
 
- parse_parameter(node->first_node(), p);
- parse_parameter(node->next_sibling(), p);
+ parse_parameter(node->first_node(), config, p);
+ parse_parameter(node->next_sibling(), config, p);
     }
 }
 
-static void parse_enumeration_value(rapidxml::xml_node<>* node, enumeration_value& value)
+static void parse_enumeration_value(rapidxml::xml_node<>* node, configuration const& config, enumeration_value& value)
 {
     // <enumvalue><name>green</name><initializer> 2</initializer>
     // <briefdescription><para>...</para></briefdescription>
@@ -153,21 +239,21 @@
         else if (node_name == "para")
         {
             // Parses both brief AND detailed into this description
- parse_para(node, value.brief_description, value.skip);
+ parse_para(node, config, value.brief_description, value.skip);
         }
         else if (node_name == "initializer")
         {
             value.initializer = node->value();
         }
 
- parse_enumeration_value(node->first_node(), value);
- parse_enumeration_value(node->next_sibling(), value);
+ parse_enumeration_value(node->first_node(), config, value);
+ parse_enumeration_value(node->next_sibling(), config, value);
     }
 }
 
 // Definition is a function or a class/struct
 template <typename Parameters>
-static void parse_parameter_list(rapidxml::xml_node<>* node, Parameters& parameters)
+static void parse_parameter_list(rapidxml::xml_node<>* node, configuration const& config, Parameters& parameters)
 {
     if (node != NULL)
     {
@@ -176,7 +262,7 @@
         if (name == "parameteritem")
         {
             parameter p;
- parse_parameter(node->first_node(), p);
+ parse_parameter(node->first_node(), config, p);
             if (! p.name.empty())
             {
                 // Copy its description
@@ -196,7 +282,7 @@
         {
             // Element of 'templateparamlist.param (.type,.declname,.defname)'
             parameter p;
- parse_parameter(node->first_node(), p);
+ parse_parameter(node->first_node(), config, p);
 
             // Doxygen handles templateparamlist param's differently:
             //
@@ -223,8 +309,8 @@
             add_or_set(parameters, p);
         }
 
- parse_parameter_list(node->first_node(), parameters);
- parse_parameter_list(node->next_sibling(), parameters);
+ parse_parameter_list(node->first_node(), config, parameters);
+ parse_parameter_list(node->next_sibling(), config, parameters);
     }
 }
 
@@ -279,12 +365,12 @@
 
         if (full == ".briefdescription.para")
         {
- parse_para(node, el.brief_description, el.skip);
+ parse_para(node, config, el.brief_description, el.skip);
         }
         else if (full == ".detaileddescription.para")
         {
             std::string para;
- parse_para(node, para, el.skip);
+ parse_para(node, config, para, el.skip);
             if (!para.empty() && !el.detailed_description.empty())
             {
                 el.detailed_description += "\n\n";
@@ -323,7 +409,7 @@
         }
         else if (full == ".templateparamlist")
         {
- parse_parameter_list(node->first_node(), el.template_parameters);
+ parse_parameter_list(node->first_node(), config, el.template_parameters);
         }
         else if (full == ".detaileddescription.para.parameterlist")
         {
@@ -333,19 +419,43 @@
                 // Parse parameters and their descriptions.
                 // NOTE: they are listed here, but the order might not be the order in the function call
                 std::vector<parameter> parameters;
- parse_parameter_list(node->first_node(), parameters);
+ parse_parameter_list(node->first_node(), config, parameters);
                 copy_parameters_properties(parameters, el.parameters);
             }
             else if (kind == "templateparam")
             {
- parse_parameter_list(node->first_node(), el.template_parameters);
+ parse_parameter_list(node->first_node(), config, el.template_parameters);
+ }
+ }
+ else if (full == ".detaileddescription.para.simplesect")
+ {
+ std::string kind = get_attribute(node, "kind");
+ if (kind == "par")
+ {
+ paragraph p;
+
+ rapidxml::xml_node<> * title_node = node->first_node("title");
+ if ( title_node )
+ p.title = title_node->value();
+
+ parse_para(node->first_node("para"), config, p.text, el.skip);
+
+ el.paragraphs.push_back(p);
+ }
+ else if (kind == "warning")
+ {
+ parse_para(node->first_node("para"), config, el.warning, el.skip);
+ }
+ else if (kind == "note")
+ {
+ parse_para(node->first_node("para"), config, el.note, el.skip);
             }
         }
         else if (full == ".param")
         {
             // Parse one parameter, and add it to el.parameters
             parameter p;
- parse_parameter(node->first_node(), p);
+ parse_parameter(node->first_node(), config, p);
             el.parameters.push_back(p);
         }
 
@@ -375,24 +485,37 @@
         else if (full == ".param")
         {
             parameter p;
- parse_parameter(node->first_node(), p);
+ parse_parameter(node->first_node(), config, p);
             add_or_set(f.parameters, p);
         }
         else if (full == ".type")
         {
             get_contents(node->first_node(), f.return_type);
+
+ // If alt output is used, retrieve return type with links
+ if ( configuration::alt == config.output_style )
+ {
+ f.return_type_without_links = f.return_type;
+ bool dummy_skip;
+ f.return_type.clear();
+ parse_para(node->first_node(), config, f.return_type, dummy_skip);
+ }
         }
         else if (full == ".detaileddescription.para.simplesect")
         {
             std::string kind = get_attribute(node, "kind");
             if (kind == "return")
             {
- get_contents(node->first_node(), f.return_description);
+ parse_para(node->first_node(), config, f.return_description, f.skip);
             }
             /*else if (kind == "param")
             {
                 get_contents(node->first_node(), f.paragraphs);
             }*/
+ else if (kind == "pre")
+ {
+ parse_para(node->first_node(), config, f.precondition, f.skip);
+ }
         }
         else if (full == ".detaileddescription.para.image")
         {
@@ -414,7 +537,7 @@
         else if (full == ".enumvalue")
         {
             enumeration_value value;
- parse_enumeration_value(node->first_node(), value);
+ parse_enumeration_value(node->first_node(), config, value);
             e.enumeration_values.push_back(value);
         }
 
@@ -479,35 +602,54 @@
         else if (nodename == "compounddef")
         {
             std::string kind = get_attribute(node, "kind");
+ std::string id = get_attribute(node, "id");
             if (kind == "group")
             {
                 recurse = true;
+ doc.group_id = id;
+ rapidxml::xml_node<> * n = node->first_node("title");
+ if ( n )
+ doc.group_title = n->value();
             }
             else if (kind == "struct")
             {
                 recurse = true;
                 doc.cos.is_class = false;
+ doc.cos.id = id;
                 parse_element(node->first_node(), config, "", doc.cos);
             }
             else if (kind == "class")
             {
                 recurse = true;
                 doc.cos.is_class = true;
+ doc.cos.id = id;
                 parse_element(node->first_node(), config, "", doc.cos);
             }
         }
         else if (nodename == "memberdef")
         {
             std::string kind = get_attribute(node, "kind");
+ std::string id = get_attribute(node, "id");
+
             if (kind == "function")
             {
                 function f;
+ f.id = id;
+ f.is_static = get_attribute(node, "static") == "yes" ? true : false;
+ f.is_const = get_attribute(node, "const") == "yes" ? true : false;
+ f.is_explicit = get_attribute(node, "explicit") == "yes" ? true : false;
+ f.is_virtual = get_attribute(node, "virt") == "virtual" ? true : false;
+
                 parse_element(node->first_node(), config, "", f);
                 parse_function(node->first_node(), config, "", f);
+
                 if (member)
                 {
- f.type = boost::equals(f.name, doc.cos.name)
- ? function_constructor
+ bool c_or_d = boost::equals(f.name, doc.cos.name) ||
+ boost::equals(f.name, std::string("~") + doc.cos.name);
+
+ f.type = c_or_d
+ ? function_constructor_destructor
                         : function_member;
                     doc.cos.functions.push_back(f);
                 }
@@ -520,14 +662,16 @@
             else if (kind == "define")
             {
                 function f;
+ f.id = id;
                 f.type = function_define;
                 parse_element(node->first_node(), config, "", f);
                 parse_function(node->first_node(), config, "", f);
- doc.functions.push_back(f);
+ doc.defines.push_back(f);
             }
             else if (kind == "enum")
             {
                 enumeration e;
+ e.id = id;
                 parse_element(node->first_node(), config, "", e);
                 parse_enumeration(node->first_node(), config, "", e);
                 doc.enumerations.push_back(e);
@@ -538,6 +682,11 @@
                 {
                     std::string name = parse_named_node(node->first_node(), "name");
                     doc.cos.typedefs.push_back(base_element(name));
+ doc.cos.typedefs.back().id = id;
+
+ element dummy;
+ parse_element(node->first_node(), config, "", dummy);
+ doc.cos.typedefs.back().brief_description = dummy.brief_description;
                 }
             }
             else if (kind == "variable")
@@ -548,6 +697,7 @@
                 {
                     std::string name = parse_named_node(node->first_node(), "name");
                     doc.cos.variables.push_back(base_element(name));
+ doc.cos.variables.back().id = id;
                 }
             }
 

Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/file_to_string.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/file_to_string.hpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/file_to_string.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,6 +1,7 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 //
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
 // Use, modification and distribution is subject to the Boost Software License,
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,6 +1,7 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 //
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
 // Use, modification and distribution is subject to the Boost Software License,
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,6 +1,7 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 //
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
 // Use, modification and distribution is subject to the Boost Software License,
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
@@ -58,7 +59,7 @@
 
 
 
-void quickbook_template_parameter_list(std::vector<parameter> const& parameters, std::ostream& out, bool name = false)
+void quickbook_template_parameter_list(std::vector<parameter> const& parameters, std::ostream& out)
 {
     if (!parameters.empty())
     {
@@ -78,9 +79,10 @@
 {
     out << "``";
     quickbook_template_parameter_list(f.template_parameters, out);
+
     switch(f.type)
     {
- case function_constructor :
+ case function_constructor_destructor :
             out << f.name;
             break;
         case function_member :
@@ -96,7 +98,7 @@
             // do nothing
             break;
     }
-
+
     // Output the parameters
     // Because we want to be able to skip, we cannot use the argstring
     {
@@ -139,7 +141,9 @@
         out << (first ? " {" : ", ") << value.name;
         if (! value.initializer.empty())
         {
- out << " = " << boost::trim_copy(value.initializer);
+ // Doxygen 1.6 does not include "=" in the <initializer> tag, Doxygen 1.8 does.
+ // We just remove the "=" to have consisten output
+ out << " = " << boost::trim_copy(boost::replace_all_copy(value.initializer, "=", ""));
         }
         first = false;
     }
@@ -418,7 +422,6 @@
     out << std::endl;
 }
 
-
 void quickbook_output(enumeration const& e, configuration const& config, std::ostream& out)
 {
     out << "[section:" << to_section_name(e.name);
@@ -469,12 +472,12 @@
     out << std::endl;
 }
 
-void quickbook_output_member(std::vector<function> const& functions,
- function_type type,
- std::string const& title,
- configuration const& config, std::ostream& out)
+void quickbook_output_function(std::vector<function> const& functions,
+ function_type type,
+ std::string const& title,
+ configuration const& config, std::ostream& out)
 {
- std::string returns = type == function_constructor ? "" : " [Returns]";
+ std::string returns = type == function_constructor_destructor ? "" : " [Returns]";
     out << "[heading " << title << "(s)]" << std::endl
         << "[table" << std::endl
         << "[[Function] [Description] [Parameters] " << returns << "]" << std::endl;
@@ -494,7 +497,6 @@
         << std::endl;
 }
 
-
 void quickbook_output(class_or_struct const& cos, configuration const& config, std::ostream& out)
 {
     // Skip namespace
@@ -584,14 +586,14 @@
         counts[f.type]++;
     }
 
- if (counts[function_constructor] > 0)
+ if (counts[function_constructor_destructor] > 0)
     {
- quickbook_output_member(cos.functions, function_constructor, "Constructor", config, out);
+ quickbook_output_function(cos.functions, function_constructor_destructor, "Constructor", config, out);
     }
 
     if (counts[function_member] > 0)
     {
- quickbook_output_member(cos.functions, function_member, "Member Function", config, out);
+ quickbook_output_function(cos.functions, function_member, "Member Function", config, out);
     }
 
     quickbook_header(cos.location, config, out);
@@ -602,4 +604,780 @@
 }
 
 
+// ----------------------------------------------------------------------------------------------- //
+// ALT
+// ----------------------------------------------------------------------------------------------- //
+
+std::string remove_template_parameters(std::string const& name)
+{
+ std::string res;
+ std::string::size_type prev_i = 0, i = 0;
+ int blocks_counter = 0;
+ for ( ;; )
+ {
+ std::string::size_type next_begin = name.find('<', i);
+ std::string::size_type next_end = name.find('>', i);
+
+ if ( next_begin == next_end )
+ {
+ res += name.substr(prev_i, next_begin - prev_i);
+ break;
+ }
+ else if ( next_begin < next_end )
+ {
+ i = next_begin + 1;
+ if ( blocks_counter == 0 )
+ res += name.substr(prev_i, next_begin - prev_i) + "<...>";
+ blocks_counter++;
+ }
+ else
+ {
+ i = next_end + 1;
+ blocks_counter--;
+ if ( blocks_counter == 0 )
+ prev_i = i;
+ }
+ }
+
+ return res;
+}
+
+std::string replace_brackets(std::string const& str)
+{
+ return boost::replace_all_copy(boost::replace_all_copy(str, "[", "\\["), "]", "\\]");
+}
+
+void quickbook_output_enumerations(std::vector<enumeration> const& enumerations,
+ configuration const& config,
+ std::ostream& out)
+{
+ out << "[table" << std::endl
+ << "[[Enumeration][Description]]" << std::endl;
+
+ for ( size_t i = 0 ; i < enumerations.size() ; ++i )
+ {
+ enumeration const& e = enumerations[i];
+
+ out << "[[[link " << e.id << " `";
+ out << e.name;
+ out << "`]][" << e.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+}
+
+void quickbook_synopsis_short(function const& f, std::ostream& out)
+{
+ if ( f.type != function_unknown )
+ out << f.name;
+
+ bool first = true;
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if ( !p.skip && p.default_value.empty() )
+ {
+ out << (first ? "(" : ", ") << remove_template_parameters(p.fulltype_without_links);
+ first = false;
+ }
+ }
+
+
+ if (! first)
+ out << ")";
+ else if (f.type != function_define)
+ out << "()";
+}
+
+void quickbook_output_functions(std::vector<function> const& functions,
+ function_type type,
+ configuration const& config,
+ std::ostream& out,
+ bool display_all = false,
+ std::string const& ColTitle = "Function")
+{
+ bool show_modifiers = false;
+ BOOST_FOREACH(function const& f, functions)
+ {
+ if ( (display_all || f.type == type) && (f.is_const || f.is_static) && !f.brief_description.empty() )
+ show_modifiers = true;
+ }
+
+ out << "[table\n"
+ << "[";
+ if ( show_modifiers )
+ out << "[Modifier]";
+ out << "[" << ColTitle << "]";
+ out << "[Description]";
+ out << "]" << std::endl;
+
+ for ( size_t i = 0 ; i < functions.size() ; ++i )
+ {
+ function const& f = functions[i];
+
+ if ( f.brief_description.empty() )
+ continue;
+
+ if (display_all || f.type == type)
+ {
+ out << "[";
+ if ( show_modifiers )
+ {
+ out << "[";
+ out << (f.is_static ? "`static`" : "");
+ out << (f.is_const ? " `const`" : "");
+ out << "]";
+ }
+ out << "[[link " << f.id << " `";
+ quickbook_synopsis_short(f, out);
+ out << "`]]";
+ out << "[" << f.brief_description << "]";
+ out << "]" << std::endl;
+ }
+ }
+ out << "]" << std::endl
+ << std::endl;
+}
+
+void output_paragraphs_note_warning(element const& el, std::ostream & out)
+{
+ // Additional paragraphs
+ if ( !el.paragraphs.empty() )
+ {
+ BOOST_FOREACH(paragraph const& p, el.paragraphs)
+ {
+ if ( !p.title.empty() )
+ out << "[heading " << p.title << "]" << std::endl;
+ else
+ out << "\n\n" << std::endl;
+ out << p.text << std::endl;
+ out << std::endl;
+ }
+ }
+
+ // Note
+ if ( !el.note.empty() )
+ {
+ out << "[note " << el.note << "]" << std::endl;
+ out << std::endl;
+ }
+
+ // Warning
+ if ( !el.warning.empty() )
+ {
+ out << "[warning " << el.warning << "]" << std::endl;
+ out << std::endl;
+ }
+}
+
+void inline_str_with_links(std::string const& str, std::ostream & out)
+{
+ typedef std::string::size_type ST;
+
+ bool link_started = false;
+ bool first = true;
+ for ( ST i = 0 ; i < str.size() ; ++i )
+ {
+ if ( !link_started )
+ {
+ if ( str[i] == '[' && str.substr(i, 6) == "[link " )
+ {
+ if ( !first )
+ {
+ out << "`";
+ first = true;
+ }
+ link_started = true;
+ out << "[^[link ";
+ i += 5; // (+ 6 - 1)
+ }
+ else
+ {
+ if ( first )
+ {
+ out << "`";
+ first = false;
+ }
+ out << str[i];
+ }
+ }
+ else
+ {
+ if ( str[i] == '\\' )
+ {
+ out << str[i];
+ ++i;
+ if ( i < str.size() )
+ out << str[i];
+ }
+ else if ( str[i] == ']' )
+ {
+ out << "]]";
+ link_started = false;
+ }
+ else
+ out << str[i];
+ }
+ }
+
+ if ( !first )
+ out << "`";
+ if ( link_started )
+ out << "]]";
+}
+
+void quickbook_template_parameter_list_alt(std::vector<parameter> const& parameters, std::ostream& out)
+{
+ std::string next_param;
+
+ if ( 2 < parameters.size() )
+ next_param = std::string("`,`\n") + " ";
+ else
+ next_param = "`,` ";
+
+ if (!parameters.empty())
+ {
+ out << "`template<`" ;
+ bool first = true;
+ BOOST_FOREACH(parameter const& p, parameters)
+ {
+ out << (first ? "" : next_param.c_str());
+ inline_str_with_links(p.fulltype, out);
+
+ if ( !p.default_value.empty() )
+ {
+ out << " = ";
+ inline_str_with_links(p.default_value, out);
+ }
+
+ first = false;
+ }
+ out << "`>`";
+ }
+}
+
+void quickbook_synopsis_alt(function const& f, std::ostream& out)
+{
+ out << "[pre\n";
+ quickbook_template_parameter_list_alt(f.template_parameters, out);
+ out << "\n";
+
+ std::size_t offset = 1; // '('
+ switch(f.type)
+ {
+ case function_constructor_destructor :
+ out << "`" << f.name << "`";
+ offset += f.name.size();
+ break;
+ case function_member :
+ inline_str_with_links(f.return_type, out);
+ out << " `" << f.name << "`";
+ offset += f.return_type_without_links.size() + 1 + f.name.size();
+ break;
+ case function_free :
+ inline_str_with_links(f.definition, out);
+ offset += f.definition.size();
+ break;
+ case function_define :
+ out << "`#define " << f.name << "`";
+ offset += 8 + f.name.size();
+ break;
+ case function_unknown :
+ // do nothing
+ break;
+ }
+
+ std::string par_end("`,` ");
+ if ( 2 < f.parameters.size() )
+ par_end = std::string("`,`\n") + std::string(offset, ' ');
+
+ // Output the parameters
+ // Because we want to be able to skip, we cannot use the argstring
+ {
+ bool first = true;
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if (! p.skip)
+ {
+ out << (first ? "`(`" : par_end);
+ if ( !p.fulltype.empty() )
+ {
+ inline_str_with_links(p.fulltype, out);
+ out << " ";
+ }
+ if ( !p.name.empty() )
+ out << "`" << p.name << "`";
+ if ( !p.default_value.empty() )
+ {
+ out << " = ";
+ inline_str_with_links(p.default_value, out);
+ }
+ first = false;
+ }
+ }
+
+ if (! first)
+ out << "`)`\n";
+ else if (f.type != function_define)
+ out << "`()`\n";
+ }
+
+ out << "]"
+ << std::endl
+ << std::endl;
+}
+
+void quickbook_synopsis_alt(class_or_struct const& cos, configuration const& config, std::ostream & out)
+{
+ std::string short_name = namespace_skipped(cos.fullname, config);
+
+ out << "[pre\n";
+
+ quickbook_template_parameter_list_alt(cos.template_parameters, out);
+ out << "\n";
+
+ out << (cos.is_class ? "`class " : "`struct ");
+ {
+ std::string::size_type last_scope = std::string::npos;
+ std::string::size_type i = short_name.find("<");
+ for(std::string::size_type j = short_name.find("::") ; j < i ; j = short_name.find("::", j+1))
+ last_scope = j;
+ if ( last_scope == std::string::npos )
+ out << short_name << "`" << std::endl;
+ else
+ out << short_name.substr(last_scope + 2) << "`" << std::endl;
+ }
+
+ if (! cos.base_classes.empty())
+ {
+ out << "` : ";
+ bool first = true;
+ BOOST_FOREACH(base_class const& bc, cos.base_classes)
+ {
+ if (! first)
+ {
+ out << std::endl << " , ";
+ }
+ out << output_if_different(bc.derivation, "private")
+ << output_if_different(bc.virtuality, "non-virtual")
+ << namespace_skipped(bc.name, config);
+ first = false;
+ }
+ out << "`" << std::endl;
+ }
+
+ out << "`{`" << std::endl
+ << "` // ...`" << std::endl
+ << "`};`" << std::endl
+ << "]" << std::endl << std::endl;
+}
+
+void quickbook_synopsis_alt(enumeration const& e, std::ostream& out)
+{
+ std::string values_separator =
+ e.enumeration_values.size() <= 2 ?
+ std::string(", ") :
+ ( std::string(",\n") + std::string(e.name.size() + 7, ' ') );
+
+ out << "``enum " << e.name << " ";
+ bool first = true;
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ out << (first ? "{" : values_separator.c_str());
+ out << value.name;
+ if ( !value.initializer.empty() )
+ {
+ out << " = " << boost::trim_copy(boost::replace_all_copy(value.initializer, "=", ""));
+ }
+ first = false;
+ }
+ if (! first)
+ {
+ out << "};";
+ }
+ out << "``"
+ << std::endl
+ << std::endl;
+}
+
+template <typename Range>
+bool has_brief_description(Range const& rng)
+{
+ typedef typename Range::value_type V;
+ BOOST_FOREACH(V const& bc, rng)
+ {
+ if ( !bc.brief_description.empty() )
+ return true;
+ }
+ return false;
+}
+
+template <typename Range>
+bool has_brief_description(Range const& rng, function_type t)
+{
+ typedef typename Range::value_type V;
+ BOOST_FOREACH(V const& bc, rng)
+ {
+ if ( bc.type == t && !bc.brief_description.empty() )
+ return true;
+ }
+ return false;
+}
+
+void quickbook_output_functions_details(std::vector<function> const& functions,
+ function_type type,
+ configuration const& config,
+ std::ostream& out,
+ bool display_all = false)
+{
+ for ( size_t i = 0 ; i < functions.size() ; ++i )
+ {
+ function const& f = functions[i];
+
+ if ( f.brief_description.empty() )
+ continue;
+
+ if ( display_all || f.type == type )
+ {
+ // Section
+ std::stringstream ss;
+ quickbook_synopsis_short(f, ss);
+ out << "[#" << f.id << "]" << std::endl;
+ out << "[section " << replace_brackets(ss.str()) << "]" << std::endl;
+
+ quickbook_output_indexterm(f.name, out);
+
+ // Brief description
+ out << f.brief_description << std::endl;
+ out << std::endl;
+
+ // Detail description
+ if ( !f.detailed_description.empty() )
+ {
+ out << "[heading Description]" << std::endl;
+ out << f.detailed_description;
+ }
+
+ // Synopsis
+ quickbook_markup(f.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl;
+ quickbook_synopsis_alt(f, out);
+ quickbook_markup(f.qbk_markup, markup_after, markup_synopsis, out);
+
+ if ( f.is_static || f.is_virtual || f.is_explicit || f.is_const )
+ {
+ out << "[heading Modifier(s)]" << std::endl;
+ out << "``"
+ << (f.is_static ? "static " : "")
+ << (f.is_virtual ? "virtual " : "")
+ << (f.is_explicit ? "explicit " : "")
+ << (f.is_const ? "const " : "")
+ << "``";
+ }
+
+ // Template parameters
+ if ( !f.template_parameters.empty() && has_brief_description(f.template_parameters) )
+ {
+ out << "[heading Template parameter(s)]" << std::endl
+ << "[table" << std::endl
+ << "[[Parameter] [Description]]" << std::endl;
+
+ BOOST_FOREACH(parameter const& p, f.template_parameters)
+ {
+ if ( p.brief_description.empty() )
+ continue;
+
+ out << "[[`";
+ if ( p.fulltype.find("typename ") == 0 )
+ out << p.fulltype.substr(9);
+ else if ( p.fulltype.find("class ") == 0 )
+ out << p.fulltype.substr(6);
+ else
+ out << p.fulltype;
+ out << "`][" << p.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+ }
+
+ // Parameters
+ if ( !f.parameters.empty() && has_brief_description(f.parameters) )
+ {
+ out << "[heading Parameter(s)]" << std::endl;
+ out << "[table " << std::endl;
+ out << "[";
+ if ( f.type != function_define )
+ out << "[Type]";
+ out << "[Name][Description]]" << std::endl;
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if (!p.skip)
+ {
+ out << "[";
+ if ( f.type != function_define )
+ {
+ out << "[";
+ inline_str_with_links(p.fulltype, out);
+ out << "]";
+ }
+ out << "[ `" << p.name << "` ][" << p.brief_description << "]]"<< std::endl;
+ }
+ }
+ out << "]" << std::endl;
+ }
+
+ // Precondition
+ if ( !f.precondition.empty() )
+ {
+ out << "[heading Precondition(s)]" << std::endl;
+ out << f.precondition << std::endl;
+ out << std::endl;
+ }
+
+ // Return
+ if ( !f.return_description.empty() )
+ {
+ out << "[heading Returns]" << std::endl;
+ out << f.return_description << std::endl;
+ }
+
+ // Additional paragraphs, note, warning
+ output_paragraphs_note_warning(f, out);
+
+ // QBK markup
+ quickbook_markup(f.qbk_markup, markup_any, markup_default, out);
+
+ // Section end
+ out << "[endsect]" << std::endl
+ //<< "[br]" << std::endl
+ << std::endl;
+ }
+ }
+}
+
+void quickbook_output_enumeration_details(enumeration const& e, configuration const& config, std::ostream& out)
+{
+ out << "[#" << e.id << "]\n";
+ out << "[section " << e.name << "]" << std::endl
+ << std::endl;
+
+ quickbook_output_indexterm(e.name, out);
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ quickbook_output_indexterm(value.name, out);
+ }
+
+ out << e.brief_description << std::endl;
+ out << std::endl;
+
+ if ( !e.detailed_description.empty() )
+ {
+ out << "[heading Description]\n\n";
+ out << e.detailed_description << "\n\n";
+ }
+
+ // Additional paragraphs, note, warning
+ output_paragraphs_note_warning(e, out);
+
+ quickbook_markup(e.qbk_markup, markup_any, markup_default, out);
+
+ // Synopsis
+ quickbook_markup(e.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl;
+ quickbook_synopsis_alt(e, out);
+ quickbook_markup(e.qbk_markup, markup_after, markup_synopsis, out);
+
+
+ out << "[heading Values]" << std::endl
+ << std::endl;
+
+ out << "[table" << std::endl << "[";
+ out << "[Value] [Description] ]" << std::endl;
+
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ out << "[[" << value.name << "] [" << value.brief_description << "]]\n";
+ }
+ out << "]\n\n\n";
+
+ out << std::endl;
+ out << "[endsect]" << std::endl;
+ out << std::endl;
+}
+
+void quickbook_output_alt(documentation const& doc, configuration const& config, std::ostream& out)
+{
+ if ( !doc.group_id.empty() )
+ {
+ std::cout << "[section:" << doc.group_id << " " << doc.group_title << "]" << std::endl;
+ }
+
+ if ( !doc.enumerations.empty() )
+ {
+ std::cout << "[heading Enumerations]\n";
+ quickbook_output_enumerations(doc.enumerations, config, out);
+ }
+
+ if ( !doc.defines.empty() )
+ {
+ std::cout << "[heading Defines]\n";
+ quickbook_output_functions(doc.defines, function_unknown, config, out, true, "Define");
+ }
+
+ if ( !doc.functions.empty() )
+ {
+ std::cout << "[heading Functions]\n";
+ quickbook_output_functions(doc.functions, function_unknown, config, out, true, "Function");
+ }
+
+ BOOST_FOREACH(enumeration const& e, doc.enumerations)
+ {
+ quickbook_output_enumeration_details(e, config, out);
+ }
+
+ quickbook_output_functions_details(doc.defines, function_unknown, config, out, true);
+ quickbook_output_functions_details(doc.functions, function_unknown, config, out, true);
+
+ if ( !doc.group_id.empty() )
+ {
+ out << "[endsect]" << std::endl
+ << std::endl;
+ }
+}
+
+void quickbook_output_alt(class_or_struct const& cos, configuration const& config, std::ostream& out)
+{
+ // Skip namespace
+ std::string short_name = namespace_skipped(cos.fullname, config);
+
+ BOOST_ASSERT(configuration::alt == config.output_style);
+
+ if ( !cos.id.empty() )
+ out << "[#" << cos.id << "]" << std::endl;
+ out << "[section " << short_name << "]" << std::endl << std::endl;
+
+ // WARNING! Can't be used in the case of specializations
+ quickbook_output_indexterm(short_name, out);
+
+ // Brief
+
+ out << cos.brief_description << std::endl;
+ out << std::endl;
+
+ // Description
+
+ quickbook_string_with_heading_if_present("Description", cos.detailed_description, out);
+
+ // Additional paragraphs, note, warning
+ output_paragraphs_note_warning(cos, out);
+
+ // Markup
+ quickbook_markup(cos.qbk_markup, markup_any, markup_default, out);
+
+ // Header
+
+ quickbook_header(cos.location, config, out);
+
+ // Class synposis
+
+ quickbook_markup(cos.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl;
+ quickbook_synopsis_alt(cos, config, out);
+ quickbook_markup(cos.qbk_markup, markup_after, markup_synopsis, out);
+
+ // Template parameters
+
+ if (! cos.template_parameters.empty())
+ {
+ if ( has_brief_description(cos.template_parameters) )
+ {
+ out << "[heading Template parameter(s)]" << std::endl
+ << "[table" << std::endl
+ << "[[Parameter] [Description]]" << std::endl;
+
+ BOOST_FOREACH(parameter const& p, cos.template_parameters)
+ {
+ if ( p.brief_description.empty() )
+ continue;
+
+ out << "[[`";
+ if ( p.fulltype.find("typename ") == 0 )
+ out << p.fulltype.substr(9);
+ else if ( p.fulltype.find("class ") == 0 )
+ out << p.fulltype.substr(6);
+ else
+ out << p.fulltype;
+ out << "`][" << p.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+ }
+ }
+
+ // Typedefs
+
+ if ( !cos.typedefs.empty() )
+ {
+ if ( has_brief_description(cos.typedefs) )
+ {
+ out << "[heading Typedef(s)]" << std::endl
+ << "[table" << std::endl
+ << "[[Type]";
+ out << " [Description]]" << std::endl;
+
+ BOOST_FOREACH(base_element const& e, cos.typedefs)
+ {
+ if ( e.brief_description.empty() )
+ continue;
+
+ out << "[[";
+ if ( !e.id.empty() )
+ out << "[#" << e.id << "]" << " ";
+ out << "`" << e.name << "`";
+ out << "][" << e.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+ }
+ }
+
+ // Members
+
+ bool display_ctors = has_brief_description(cos.functions, function_constructor_destructor);
+ bool display_members = has_brief_description(cos.functions, function_member);
+
+ std::map<function_type, int> counts;
+ BOOST_FOREACH(function const& f, cos.functions)
+ {
+ counts[f.type]++;
+ }
+
+ if (display_ctors && counts[function_constructor_destructor] > 0)
+ {
+ out << "[heading Constructor(s) and destructor]" << std::endl;
+ quickbook_output_functions(cos.functions, function_constructor_destructor, config, out);
+ }
+
+ if (display_members && counts[function_member] > 0)
+ {
+ out << "[heading Member(s)]" << std::endl;
+ quickbook_output_functions(cos.functions, function_member, config, out);
+ }
+
+ // Details start
+
+ //if ( display_ctors || display_members )
+ // out << "[br]" << std::endl;
+
+ if (display_ctors && counts[function_constructor_destructor] > 0)
+ quickbook_output_functions_details(cos.functions, function_constructor_destructor, config, out);
+
+ if (display_members && counts[function_member] > 0)
+ quickbook_output_functions_details(cos.functions, function_member, config, out);
+
+ // Details end
+
+ out << "[endsect]" << std::endl
+ << std::endl;
+}
+
 #endif // QUICKBOOK_OUTPUT_HPP

Modified: branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -1,6 +1,7 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 //
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
 // Use, modification and distribution is subject to the Boost Software License,
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/release/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp
==============================================================================
--- branches/release/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp (original)
+++ branches/release/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -45,6 +45,7 @@
 #include <boost/geometry/algorithms/simplify.hpp>
 #include <boost/geometry/algorithms/transform.hpp>
 #include <boost/geometry/algorithms/unique.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
 #include <boost/geometry/multi/algorithms/append.hpp>
 #include <boost/geometry/multi/algorithms/area.hpp>
 #include <boost/geometry/multi/algorithms/centroid.hpp>
@@ -65,6 +66,7 @@
 #include <boost/geometry/multi/algorithms/simplify.hpp>
 #include <boost/geometry/multi/algorithms/transform.hpp>
 #include <boost/geometry/multi/algorithms/unique.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
 #include <boost/geometry/strategies/strategies.hpp>
 
 #include "text_outputter.hpp"
@@ -132,6 +134,7 @@
 DECLARE_BINARY_ALGORITHM(transform)
 DECLARE_UNARY_ALGORITHM(unique)
 DECLARE_BINARY_ALGORITHM(within)
+DECLARE_UNARY_ALGORITHM(wkt)
 
 
 template <template <typename> class Dispatcher, typename Outputter, typename G>
@@ -267,6 +270,7 @@
     test_binary_algorithm<transform, all_types, all_types, OutputFactory>("transform");
     test_unary_algorithm<unique, all_types, OutputFactory>("unique");
     test_binary_algorithm<within, all_types, all_types, OutputFactory>("within");
+ test_unary_algorithm<wkt, all_types, OutputFactory>("wkt");
 }
 
 

Modified: branches/release/libs/geometry/doc/src/examples/algorithms/create_svg_overlay.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/examples/algorithms/create_svg_overlay.hpp (original)
+++ branches/release/libs/geometry/doc/src/examples/algorithms/create_svg_overlay.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -17,7 +17,7 @@
 #include <boost/algorithm/string.hpp>
 
 #if defined(HAVE_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 template <typename Geometry, typename Range>

Modified: branches/release/libs/geometry/doc/src/examples/algorithms/create_svg_two.hpp
==============================================================================
--- branches/release/libs/geometry/doc/src/examples/algorithms/create_svg_two.hpp (original)
+++ branches/release/libs/geometry/doc/src/examples/algorithms/create_svg_two.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -15,7 +15,7 @@
 #include <boost/algorithm/string.hpp>
 
 #if defined(HAVE_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 template <typename Geometry1, typename Geometry2>

Modified: branches/release/libs/geometry/example/05_a_overlay_polygon_example.cpp
==============================================================================
--- branches/release/libs/geometry/example/05_a_overlay_polygon_example.cpp (original)
+++ branches/release/libs/geometry/example/05_a_overlay_polygon_example.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -24,7 +24,7 @@
 #include <boost/geometry/geometries/adapted/c_array.hpp>
 
 #if defined(HAVE_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)

Modified: branches/release/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp
==============================================================================
--- branches/release/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp (original)
+++ branches/release/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -29,7 +29,7 @@
 #include <boost/geometry/geometries/adapted/c_array.hpp>
 
 #if defined(HAVE_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian);

Modified: branches/release/libs/geometry/example/06_b_transformation_example.cpp
==============================================================================
--- branches/release/libs/geometry/example/06_b_transformation_example.cpp (original)
+++ branches/release/libs/geometry/example/06_b_transformation_example.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -24,7 +24,7 @@
 #include <boost/geometry/io/wkt/read.hpp>
 
 #if defined(HAVE_SVG)
-# include <boost/geometry/extensions/io/svg/write_svg.hpp>
+# include <boost/geometry/io/svg/write_svg.hpp>
 #endif
 
 #include <boost/bind.hpp>

Modified: branches/release/libs/geometry/example/07_a_graph_route_example.cpp
==============================================================================
--- branches/release/libs/geometry/example/07_a_graph_route_example.cpp (original)
+++ branches/release/libs/geometry/example/07_a_graph_route_example.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -28,16 +28,14 @@
 #include <boost/geometry/io/wkt/read.hpp>
 
 
-// Yes, this example currently uses some extensions:
-
- // For output:
- #if defined(HAVE_SVG)
- # include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
- #endif
+// For output:
+#include <boost/geometry/io/svg/svg_mapper.hpp>
 
- // For distance-calculations over the Earth:
- //#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
+// Yes, this example currently uses an extension:
 
+// For distance-calculations over the Earth:
+//#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
+// Yes, this example currently uses some extensions:
 
 
 // Read an ASCII file containing WKT's, fill a vector of tuples

Modified: branches/release/libs/geometry/example/07_b_graph_route_example.cpp
==============================================================================
--- branches/release/libs/geometry/example/07_b_graph_route_example.cpp (original)
+++ branches/release/libs/geometry/example/07_b_graph_route_example.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -31,16 +31,13 @@
 #include <boost/geometry/geometries/linestring.hpp>
 #include <boost/geometry/io/wkt/read.hpp>
 
+// For output:
+#include <boost/geometry/io/svg/svg_mapper.hpp>
 
-// Yes, this example currently uses some extensions:
+// Yes, this example currently uses an extension:
 
- // For output:
- #if defined(HAVE_SVG)
- # include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
- #endif
-
- // For distance-calculations over the Earth:
- //#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
+// For distance-calculations over the Earth:
+//#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
 
 
 

Modified: branches/release/libs/geometry/test/Jamfile.v2
==============================================================================
--- branches/release/libs/geometry/test/Jamfile.v2 (original)
+++ branches/release/libs/geometry/test/Jamfile.v2 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -30,4 +30,3 @@
 build-project util ;
 build-project views ;
 build-project multi ;
-#build-project domains ;
\ No newline at end of file

Modified: branches/release/libs/geometry/test/algorithms/append.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/append.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/append.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -25,6 +25,7 @@
 #include <boost/geometry/algorithms/num_points.hpp>
 #include <boost/geometry/geometries/geometries.hpp>
 #include <boost/geometry/geometries/register/linestring.hpp>
+#include <boost/variant/variant.hpp>
 
 #include <test_common/test_point.hpp>
 #include <test_geometries/wrapped_boost_array.hpp>
@@ -34,9 +35,8 @@
 
 
 template <typename G>
-void test_geometry(bool check = true)
+void test_geometry(G& geometry, bool check)
 {
- G geometry;
     typedef typename bg::point_type<G>::type P;
 
     bg::append(geometry, bg::make_zero<P>());
@@ -66,19 +66,28 @@
     //P p = boost::range::front(geometry);
 }
 
+template <typename G>
+void test_geometry_and_variant(bool check = true)
+{
+ G geometry;
+ boost::variant<G> variant_geometry = G();
+ test_geometry(geometry, check);
+ test_geometry(variant_geometry, check);
+}
+
 template <typename P>
 void test_all()
 {
- test_geometry<P>(false);
- test_geometry<bg::model::box<P> >(false);
- test_geometry<bg::model::segment<P> >(false);
- test_geometry<bg::model::linestring<P> >();
- test_geometry<bg::model::ring<P> >();
- test_geometry<bg::model::polygon<P> >();
-
- test_geometry<std::vector<P> >();
- test_geometry<std::deque<P> >();
- //test_geometry<std::list<P> >();
+ test_geometry_and_variant<P>(false);
+ test_geometry_and_variant<bg::model::box<P> >(false);
+ test_geometry_and_variant<bg::model::segment<P> >(false);
+ test_geometry_and_variant<bg::model::linestring<P> >();
+ test_geometry_and_variant<bg::model::ring<P> >();
+ test_geometry_and_variant<bg::model::polygon<P> >();
+
+ test_geometry_and_variant<std::vector<P> >();
+ test_geometry_and_variant<std::deque<P> >();
+ //test_geometry_and_variant<std::list<P> >();
 }
 
 int test_main(int, char* [])

Modified: branches/release/libs/geometry/test/algorithms/detail/partition.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/detail/partition.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/detail/partition.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,7 +21,7 @@
 #include <boost/geometry/multi/io/wkt/wkt.hpp>
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 #include <boost/random/linear_congruential.hpp>

Modified: branches/release/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -30,7 +30,7 @@
 #include <test_common/test_point.hpp>
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 # include <boost/geometry/algorithms/buffer.hpp>
 # include <boost/geometry/algorithms/centroid.hpp>
 #endif

Modified: branches/release/libs/geometry/test/algorithms/difference.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/difference.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/difference.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -249,6 +249,19 @@
         1, 5, 1,
         1, 5, 1);
 
+ test_one<polygon, polygon, polygon>("buffer_mp1",
+ buffer_mp1[0], buffer_mp1[1],
+ 1, 61, 10.2717,
+ 1, 61, 10.2717);
+
+ if (boost::is_same<ct, double>::value)
+ {
+ test_one<polygon, polygon, polygon>("buffer_mp2",
+ buffer_mp2[0], buffer_mp2[1],
+ 1, 92, 12.09857,
+ 1, 157, 24.19787);
+ }
+
     /*** TODO: self-tangencies for difference
     test_one<polygon, polygon, polygon>("wrapped_a",
         wrapped[0], wrapped[1],

Modified: branches/release/libs/geometry/test/algorithms/disjoint.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/disjoint.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/disjoint.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -205,6 +205,22 @@
 
 }
 
+
+template <typename P>
+void test_3d()
+{
+ typedef bg::model::box<P> box;
+
+ test_disjoint<P, P>("pp 3d 1", "point(1 1 1)", "point(1 1 1)", false);
+ test_disjoint<P, P>("pp 3d 2", "point(1 1 1)", "point(1.001 1 1)", true);
+
+ test_disjoint<box, box>("bb1", "box(1 1 1, 2 2 2)", "box(3 1 1, 4 2 1)", true);
+ test_disjoint<box, box>("bb2", "box(1 1 1, 2 2 2)", "box(2 1 1, 3 2 1)", false);
+ test_disjoint<box, box>("bb3", "box(1 1 1, 2 2 2)", "box(2 2 1, 3 3 1)", false);
+ test_disjoint<box, box>("bb4", "box(1 1 1, 2 2 2)", "box(2.001 2 1, 3 3 1)", true);
+
+}
+
 int test_main(int, char* [])
 {
     test_all<bg::model::d2::point_xy<float> >();
@@ -214,5 +230,8 @@
     test_all<bg::model::d2::point_xy<ttmath_big> >();
 #endif
 
+ test_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+
     return 0;
 }

Modified: branches/release/libs/geometry/test/algorithms/intersection.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/intersection.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/intersection.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -213,6 +213,15 @@
     test_one<Polygon, Polygon, Polygon>("buffer_rt_g", buffer_rt_g[0], buffer_rt_g[1],
                 1, 0, 2.914213562373);
 
+ test_one<Polygon, Polygon, Polygon>("ticket_8254", ticket_8254[0], ticket_8254[1],
+ 1, 4, 3.63593e-08, 0.01);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_mp1", buffer_mp1[0], buffer_mp1[1],
+ 1, 31, 2.271707796);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_mp2", buffer_mp2[0], buffer_mp2[1],
+ 1, 29, 0.457126);
+
     return;
 
 

Modified: branches/release/libs/geometry/test/algorithms/overlay/assemble.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/assemble.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/assemble.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -34,7 +34,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 template <typename Geometry>

Modified: branches/release/libs/geometry/test/algorithms/overlay/ccw_traverse.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/ccw_traverse.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/ccw_traverse.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,7 +21,7 @@
 #include <boost/geometry/io/wkt/wkt.hpp>
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 #include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>

Modified: branches/release/libs/geometry/test/algorithms/overlay/dissolver.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/dissolver.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/dissolver.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -20,7 +20,6 @@
 #include <boost/geometry/multi/multi.hpp>
 #include <boost/geometry/multi/geometries/multi_polygon.hpp>
 #include <boost/geometry/multi/io/wkt/read.hpp>
-#include <boost/geometry/extensions/io/svg/write_svg_multi.hpp>
 
 
 #include <test_common/test_point.hpp>
@@ -28,7 +27,8 @@
 
 //#define TEST_WITH_SVG
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/write_svg_multi.hpp>
 #endif
 
 // Collection might be a multi-geometry, or std::vector<ring>

Modified: branches/release/libs/geometry/test/algorithms/overlay/enrich_intersection_points.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/enrich_intersection_points.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/enrich_intersection_points.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -32,7 +32,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 struct test_enrich_intersection_points

Modified: branches/release/libs/geometry/test/algorithms/overlay/get_turn_info.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/get_turn_info.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/get_turn_info.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,7 +21,7 @@
 #include <boost/geometry/geometries/point_xy.hpp>
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 

Modified: branches/release/libs/geometry/test/algorithms/overlay/get_turns.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/get_turns.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/get_turns.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -33,7 +33,7 @@
 #include <boost/geometry/io/wkt/write.hpp>
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 #include <algorithms/overlay/overlay_cases.hpp>

Modified: branches/release/libs/geometry/test/algorithms/overlay/overlay_cases.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/overlay_cases.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/overlay_cases.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -560,6 +560,19 @@
     "POLYGON((-95269304 222758,-95260668 419862,-95234760 615696,-95192088 808228,-95132906 996442,-95057214 1178814,-94966028 1354074,-94860110 1520444,-94739968 1676908,-94606618 1822450,-94999048 2214880,-95165164 2033778,-95314770 1838706,-95446850 1631442,-95560388 1413510,-95654368 1186434,-95728282 951992,-95781368 711962,-95813626 468376,-95824294 222758,-95269304 222758))"
     };
 
+static std::string ticket_7462[2] =
+ {
+ "POLYGON((0 0 , -0.3681253195 0.9297761917 , 2.421203136 2.034152031 , 2.789328575 1.104375958 , 0 0))",
+ "POLYGON((2.76143527 1.093332171 , 2.076887131 1.822299719 , 4.263789177 3.875944376 , 4.948337555 3.146976948 , 2.76143527 1.093332171))"
+ };
+
+
+static std::string ticket_8254[2] =
+ {
+ "POLYGON((0 0,-0.27224111308522275232 0.19250353717521062613,-0.27224111308522275232 0.96219700082478931691,0 1.154700537999999943,0 0))",
+ "POLYGON((-0.27224111308522286334 0.57751061210314269534,-0.27201435369399112885 0.57735026899999997152,-0.27224111308522280783 0.57718992589685735872,-0.27224111308522286334 0.57751061210314269534))"
+ };
+
 static std::string ggl_list_20120229_volker[3] =
     {
     "POLYGON((1716 1554,2076 2250,2436 2352,2796 1248,3156 2484,3516 2688,3516 2688,3156 2484,2796 1248,2436 2352,2076 2250, 1716 1554))",
@@ -661,5 +674,38 @@
         "POLYGON((1.7071067811865475 3.2928932188134525,0.70710678118654746 2.2928932188134525,-1.0 0.58578643762690508,-1.0 3.0,-1.0 4.0,-1.0 4.0,-1.0 5.0,-1.0 7.4142135623730958,0.70710678118654746 5.7071067811865479,1.7071067811865475 4.7071067811865479,2.4142135623730954 4.0,1.7071067811865475 3.2928932188134525))"
     };
 
+// Two circles, causing problems in sectionalize. Fixed by adding small buffer
+static std::string buffer_mp1[2] =
+ {
+ "POLYGON((7 5,6.989043790736547 4.790943073464693,6.956295201467611 4.584176618364482,6.902113032590307 4.381966011250105,6.827090915285202 4.1865267138484,6.732050807568878 4,6.618033988749895 3.824429495415054,6.486289650954788 3.661738787282284,6.338261212717717 3.513710349045212,6.175570504584946 3.381966011250105,6 3.267949192431122,5.8134732861516 3.172909084714799,5.618033988749895 3.097886967409693,5.415823381635519 3.043704798532389,5.209056926535308 3.010956209263453,5.000000000000001 3,4.790943073464693 3.010956209263453,4.584176618364483 3.043704798532389,4.381966011250106 3.097886967409693,4.186526713848401 3.172909084714798,4.00 3.267949192431122,3.824429495415055 3.381966011250104,3.661738787282284 3.513710349045211,3.513710349045212 3.661738787282284,3.381966011250105 3.824429495415053,3.267949192431122 4,3.172909084714798 4.1865267138484,3.097886967409693 4.381966011250106,3.043704798532389 4.584176618364483,3.010956209263453 4.790943073464694,3 5.00,3.010956209263453 5.209056926535
308,3.043704798532389 5.415823381635521,3.097886967409694 5.618033988749897,3.172909084714799 5.813473286151603,3.267949192431124 6.00,3.381966011250107 6.175570504584949,3.513710349045214 6.338261212717719,3.661738787282286 6.486289650954791,3.824429495415056 6.618033988749897,4.00 6.732050807568879,4.186526713848402 6.827090915285202,4.381966011250107 6.902113032590307,4.584176618364483 6.956295201467611,4.790943073464693 6.989043790736547,5 7,5.209056926535306 6.989043790736547,5.415823381635518 6.956295201467611,5.618033988749893 6.902113032590307,5.813473286151598 6.827090915285202,6.00 6.732050807568879,6.175570504584943 6.618033988749897,6.338261212717713 6.486289650954792,6.486289650954785 6.33826121271772,6.618033988749891 6.175570504584951,6.732050807568874 6.00,6.827090915285199 5.813473286151607,6.902113032590305 5.618033988749902,6.95629520146761 5.415823381635526,6.989043790736545 5.209056926535316,7 5))",
+ "POLYGON((9 7,8.989043790736547 6.790943073464693,8.956295201467611 6.584176618364482,8.902113032590307 6.381966011250105,8.827090915285202 6.1865267138484,8.732050807568877 6,8.618033988749895 5.824429495415053,8.486289650954788 5.661738787282284,8.338261212717717 5.513710349045212,8.175570504584947 5.381966011250105,8 5.267949192431122,7.8134732861516 5.172909084714799,7.618033988749895 5.097886967409693,7.415823381635519 5.043704798532389,7.209056926535308 5.010956209263453,7.000000000000001 5,6.790943073464693 5.010956209263453,6.584176618364483 5.043704798532389,6.381966011250106 5.097886967409693,6.186526713848401 5.172909084714798,6.00 5.267949192431122,5.824429495415055 5.381966011250104,5.661738787282284 5.513710349045211,5.513710349045212 5.661738787282284,5.381966011250105 5.824429495415053,5.267949192431122 6,5.172909084714798 6.1865267138484,5.097886967409693 6.381966011250106,5.043704798532389 6.584176618364483,5.010956209263453 6.790943073464694,5 7.00,5.010956209263453 7.209056926535
308,5.043704798532389 7.415823381635521,5.097886967409694 7.618033988749897,5.172909084714799 7.813473286151603,5.267949192431124 8.00,5.381966011250107 8.175570504584949,5.513710349045214 8.338261212717718,5.661738787282286 8.486289650954792,5.824429495415057 8.618033988749897,6.00 8.732050807568879,6.186526713848402 8.827090915285202,6.381966011250107 8.902113032590307,6.584176618364483 8.956295201467611,6.790943073464693 8.989043790736547,7 9,7.209056926535306 8.989043790736547,7.415823381635518 8.956295201467611,7.618033988749893 8.902113032590307,7.813473286151598 8.827090915285202,8.00 8.732050807568879,8.175570504584943 8.618033988749897,8.338261212717713 8.486289650954792,8.486289650954785 8.33826121271772,8.618033988749891 8.17557050458495,8.732050807568875 8.00,8.827090915285199 7.813473286151607,8.902113032590306 7.618033988749902,8.95629520146761 7.415823381635526,8.989043790736545 7.209056926535316,9 7))"
+ };
+
+// Union of two circles, unioned with third circle, having undetected inner polygon
+// This is a robustness issue in get_turn_info, collinear_opposite, fixed by checking consistency
+static std::string buffer_mp2[2] =
+ {
+ "POLYGON((7 8,6.9949042292205075 7.8573216336015355,6.9796428837618656 7.7153703234534294,6.954293731942319 7.5748694208940464,6.918985947228995 7.4365348863171405,6.8738994499995236 7.301071640801803,6.8192639907090369 7.1691699739962269,6.7553579791345113 7.0415020265598862,6.682507065662362 6.9187183650888047,6.6010824818487208 6.8014446669773063,6.5114991487085163 6.6902785321094296,6.4142135623730949 6.5857864376269051,6.3097214678905704 6.4885008512914837,6.1985553330226946 6.3989175181512792,6.0812816349111953 6.317492934337638,5.9584979734401138 6.2446420208654887,5.8308300260037731 6.180736009290964,5.698928359198197 6.1261005500004764,5.5634651136828603 6.081014052771005,5.4251305791059536 6.045706268057681,5.2846296765465715 6.0203571162381344,5.1426783663984654 6.0050957707794925,5.0000000000000009 6,4.8573216336015363 6.0050957707794925,4.7153703234534312 6.0203571162381344,4.5748694208940481 6.045706268057681,4.4365348863171423 6.081014052771005,4.3010716408018048 6.1261005500004764,4.
1691699739962287 6.1807360092909622,4.041502026559888 6.2446420208654878,3.9187183650888064 6.3174929343376363,3.8014446669773077 6.3989175181512783,3.6902785321094314 6.4885008512914819,3.5857864376269064 6.5857864376269033,3.4885008512914846 6.6902785321094278,3.3989175181512805 6.8014446669773045,3.3174929343376389 6.9187183650888029,3.2446420208654896 7.0415020265598844,3.180736009290964 7.1691699739962251,3.1261005500004773 7.3010716408018013,3.0810140527710059 7.4365348863171379,3.0457062680576819 7.5748694208940437,3.0203571162381349 7.7153703234534268,3.0050957707794934 7.8573216336015328,3 7.9999999999999973,3.0050957707794925 8.1426783663984619,3.0203571162381344 8.284629676546567,3.0457062680576801 8.4251305791059501,3.0810140527710042 8.5634651136828559,3.1261005500004755 8.6989283591981934,3.1807360092909618 8.8308300260037704,3.2446420208654869 8.9584979734401102,3.3174929343376358 9.0812816349111927,3.398917518151277 9.198555333022691,3.488500851291481 9.3097214678905669,3.5857864376269024 9.4
142135623730923,3.6902785321094269 9.5114991487085145,3.8014446669773028 9.601082481848719,3.918718365088802 9.6825070656623602,4.0415020265598844 9.7553579791345104,4.169169973996226 9.819263990709036,4.301071640801803 9.8738994499995236,4.4365348863171405 9.918985947228995,4.5748694208940472 9.9542937319423199,4.7153703234534312 9.9796428837618656,4.8573216336015381 9.9949042292205075,5.0000000000000036 10,5.142678366398469 9.9949042292205075,5.284629676546575 9.9796428837618656,5.425130579105959 9.9542937319423181,5.5634651136828657 9.9189859472289932,5.6989283591982032 9.8738994499995201,5.8308300260037802 9.8192639907090324,5.9584979734401209 9.7553579791345069,6.0812816349112033 9.6825070656623566,6.1985553330227017 9.6010824818487137,6.3097214678905784 9.5114991487085092,6.4142135623731038 9.4142135623730869,6.5114991487085252 9.3097214678905598,6.6010824818487288 9.1985553330226821,6.68250706566237 9.0812816349111838,6.7553579791345184 8.9584979734400996,6.8192639907090431 8.830830026003758,6.8738994
49999529 8.698928359198181,6.9189859472290003 8.5634651136828417,6.9542937319423235 8.4251305791059359,6.9796428837618683 8.284629676546551,6.9949042292205084 8.1426783663984441,7 8))",
+ "POLYGON((7.281120925915111 9.019979886500282,7.142678366398465 9.005095770779493,7.000000000000001 9,6.857321633601536 9.005095770779493,6.715370323453431 9.020357116238134,6.574869420894048 9.04570626805768,6.436534886317142 9.081014052771005,6.301071640801805 9.126100550000476,6.169169973996229 9.180736009290962,6.041502026559888 9.244642020865488,5.918718365088806 9.317492934337636,5.801444666977307 9.398917518151277,5.690278532109431 9.488500851291482,5.585786437626906 9.585786437626904,5.488500851291485 9.690278532109428,5.398917518151281 9.801444666977304,5.317492934337639 9.918718365088804,5.24464202086549 10.04150202655988,5.180736009290964 10.16916997399622,5.126100550000477 10.3010716408018,5.081014052771006 10.43653488631714,5.045706268057682 10.57486942089405,5.020357116238134 10.71537032345343,5.005095770779493 10.85732163360153,5 11,5.005095770779493 11.14267836639846,5.020357116238134 11.28462967654657,5.04570626805768 11.42513057910595,5.081014052771004 11.56346511368286,5.126100550
000476 11.69892835919819,5.180736009290962 11.83083002600377,5.244642020865487 11.95849797344011,5.317492934337636 12.08128163491119,5.398917518151277 12.19855533302269,5.488500851291481 12.30972146789057,5.585786437626902 12.41421356237309,5.690278532109427 12.51149914870852,5.801444666977303 12.60108248184872,5.918718365088802 12.68250706566236,6.041502026559884 12.75535797913451,6.169169973996226 12.81926399070904,6.301071640801803 12.87389944999952,6.436534886317141 12.918985947229,6.574869420894047 12.95429373194232,6.715370323453431 12.97964288376187,6.857321633601538 12.99490422922051,7.000000000000004 13,7.142678366398469 12.99490422922051,7.284629676546575 12.97964288376187,7.425130579105959 12.95429373194232,7.563465113682866 12.91898594722899,7.698928359198203 12.87389944999952,7.83083002600378 12.81926399070903,7.958497973440121 12.75535797913451,8.081281634911203 12.68250706566236,8.198555333022702 12.60108248184871,8.309721467890579 12.51149914870851,8.414213562373103 12.41421356237309,8.511499
148708525 12.30972146789056,8.60108248184873 12.19855533302268,8.682507065662371 12.08128163491118,8.755357979134519 11.9584979734401,8.819263990709043 11.83083002600376,8.873899449999529 11.69892835919818,8.918985947229 11.56346511368284,8.954293731942324 11.42513057910594,8.979642883761869 11.28462967654655,8.994904229220509 11.14267836639844,9 11,8.994904229220508 10.85732163360154,8.979642883761866 10.71537032345343,8.954293731942318 10.57486942089405,8.918985947228995 10.43653488631714,8.873899449999524 10.3010716408018,8.819263990709036 10.16916997399623,8.755357979134512 10.04150202655989,8.718879074084889 9.980020113499718,8.857321633601538 9.994904229220508,9.000000000000004 10,9.142678366398469 9.994904229220508,9.284629676546576 9.979642883761866,9.425130579105959 9.954293731942318,9.563465113682865 9.918985947228993,9.698928359198204 9.87389944999952,9.830830026003779 9.819263990709032,9.958497973440121 9.755357979134507,10.0812816349112 9.682507065662357,10.1985553330227 9.601082481848714,10.309
72146789058 9.511499148708509,10.4142135623731 9.414213562373087,10.51149914870853 9.30972146789056,10.60108248184873 9.198555333022682,10.68250706566237 9.081281634911184,10.75535797913452 8.9584979734401,10.81926399070904 8.830830026003758,10.87389944999953 8.698928359198181,10.918985947229 8.563465113682842,10.95429373194232 8.425130579105936,10.97964288376187 8.284629676546551,10.99490422922051 8.142678366398444,11 8,10.99490422922051 7.857321633601536,10.97964288376187 7.715370323453429,10.95429373194232 7.574869420894046,10.918985947229 7.436534886317141,10.87389944999952 7.301071640801803,10.81926399070904 7.169169973996227,10.75535797913451 7.041502026559886,10.68250706566236 6.918718365088805,10.60108248184872 6.801444666977306,10.51149914870852 6.69027853210943,10.4142135623731 6.585786437626905,10.30972146789057 6.488500851291484,10.1985553330227 6.398917518151279,10.0812816349112 6.317492934337638,9.958497973440114 6.244642020865489,9.830830026003774 6.180736009290964,9.698928359198197 6.12610055
0000476,9.56346511368286 6.081014052771005,9.425130579105954 6.045706268057681,9.284629676546571 6.020357116238134,9.142678366398465 6.005095770779493,9.000000000000002 6,8.857321633601536 6.005095770779493,8.715370323453431 6.020357116238134,8.574869420894048 6.045706268057681,8.436534886317142 6.081014052771005,8.301071640801805 6.126100550000476,8.169169973996228 6.180736009290962,8.041502026559888 6.244642020865488,7.918718365088806 6.317492934337636,7.801444666977307 6.398917518151278,7.690278532109431 6.488500851291482,7.585786437626906 6.585786437626903,7.488500851291485 6.690278532109428,7.398917518151281 6.801444666977305,7.317492934337639 6.918718365088803,7.24464202086549 7.041502026559884,7.180736009290964 7.169169973996225,7.126100550000477 7.301071640801801,7.081014052771006 7.436534886317138,7.045706268057682 7.574869420894044,7.020357116238134 7.715370323453427,7.005095770779493 7.857321633601533,7 7.999999999999997,7.005095770779493 8.142678366398462,7.020357116238134 8.284629676546567,7.045
70626805768 8.42513057910595,7.081014052771004 8.563465113682856,7.126100550000476 8.698928359198193,7.180736009290962 8.83083002600377,7.244642020865487 8.95849797344011,7.281120925915111 9.019979886500282))"
+ };
+
+static std::string collinear_opposite_right[2] =
+ {
+ "POLYGON((7 6,7 8,8 9,8 5,7 6))",
+ "POLYGON((5.9 5.9,5.9 10.1,7 9,7 7,5.9 5.9))"
+ };
+
+static std::string collinear_opposite_left[2] =
+ {
+ "POLYGON((7 6,7 8,6 9,8 11,8 5,7 6))",
+ "POLYGON((5 7,7 9,7 7,9 5,8 4,5 7))"
+ };
+
+static std::string collinear_opposite_straight[2] =
+ {
+ "POLYGON((7 6,7 8,7 9,8 8,8 7,7 6))",
+ "POLYGON((6 6,6 9,7 10,7 7,7 5,6 6))"
+ };
+
 
 #endif // BOOST_GEOMETRY_TEST_OVERLAY_CASES_HPP

Modified: branches/release/libs/geometry/test/algorithms/overlay/overlay_common.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/overlay_common.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/overlay_common.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -30,7 +30,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);

Modified: branches/release/libs/geometry/test/algorithms/overlay/relative_order.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/relative_order.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/relative_order.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -23,7 +23,7 @@
 #include <boost/geometry/geometries/point_xy.hpp>
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 

Modified: branches/release/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -28,7 +28,7 @@
 #include <boost/geometry/geometries/geometries.hpp>
 #include <boost/geometry/geometries/point_xy.hpp>
 #include <boost/geometry/multi/geometries/multi_polygon.hpp>
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#include <boost/geometry/io/svg/svg_mapper.hpp>
 
 #include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
 #include <boost/geometry/algorithms/intersects.hpp>

Modified: branches/release/libs/geometry/test/algorithms/overlay/self_intersection_points.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/self_intersection_points.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/self_intersection_points.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -36,7 +36,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 

Modified: branches/release/libs/geometry/test/algorithms/overlay/split_rings.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/split_rings.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/split_rings.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -30,7 +30,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 

Modified: branches/release/libs/geometry/test/algorithms/overlay/traverse.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/traverse.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/traverse.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -7,10 +7,10 @@
 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
-// #define BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE
-// #define BOOST_GEOMETRY_OVERLAY_NO_THROW
-// #define TEST_WITH_SVG
-// #define HAVE_TTMATH
+#define BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE
+//#define BOOST_GEOMETRY_OVERLAY_NO_THROW
+//#define TEST_WITH_SVG
+//#define HAVE_TTMATH
 
 #include <iostream>
 #include <iomanip>
@@ -21,7 +21,7 @@
 #include <boost/type_traits/is_same.hpp>
 
 #ifdef HAVE_TTMATH
-# include <boost/geometry/extensions/contrib/ttmath_stub.hpp>
+# include <boost/geometry/contrib/ttmath_stub.hpp>
 #endif
 
 #include <geometry_test_common.hpp>
@@ -62,7 +62,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 #include <boost/geometry/strategies/strategies.hpp>
@@ -271,7 +271,7 @@
                         out << "vx: " << turn.operations[0].enriched.travels_to_vertex_index
                          << " -> ip: " << turn.operations[0].enriched.travels_to_ip_index;
                     }
- out << " ";
+ out << " / ";
                     if (turn.operations[1].enriched.next_ip_index != -1)
                     {
                         out << "ip: " << turn.operations[1].enriched.next_ip_index;
@@ -281,7 +281,7 @@
                         out << "vx: " << turn.operations[1].enriched.travels_to_vertex_index
                          << " -> ip: " << turn.operations[1].enriched.travels_to_ip_index;
                     }
-
+
                     out << std::endl;
 
                     /*out
@@ -928,6 +928,25 @@
         1, 30,
         buffer_rt_g_boxes[4], buffer_rt_g_boxes[3]);
 
+
+ if (boost::is_same<T, double>::value)
+ {
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_mp2",
+ 2, 36.7535642, buffer_mp2[0], buffer_mp2[1], 0.01);
+ }
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_rr",
+ 1, 6.41, collinear_opposite_right[0], collinear_opposite_right[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_ll",
+ 1, 11.75, collinear_opposite_left[0], collinear_opposite_left[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_ss",
+ 1, 6, collinear_opposite_straight[0], collinear_opposite_straight[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_lr",
+ 1, 8.66, collinear_opposite_left[0], collinear_opposite_right[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_rl",
+ 1, 9, collinear_opposite_right[0], collinear_opposite_left[1]);
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("ticket_7462", 1, 0.220582, ticket_7462[0], ticket_7462[1]);
+
 #ifdef BOOST_GEOMETRY_OVERLAY_NO_THROW
     {
         // NOTE: currently throws (normally)

Modified: branches/release/libs/geometry/test/algorithms/overlay/traverse_gmp.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/overlay/traverse_gmp.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/overlay/traverse_gmp.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -48,7 +48,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 

Modified: branches/release/libs/geometry/test/algorithms/test_convert.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/test_convert.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/test_convert.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -21,6 +21,7 @@
 #include <boost/geometry/geometries/adapted/c_array.hpp>
 #include <boost/geometry/geometries/adapted/boost_tuple.hpp>
 
+#include <boost/variant/variant.hpp>
 
 #include <geometry_test_common.hpp>
 
@@ -31,20 +32,24 @@
 
 
 
-template <typename Geometry1, typename Geometry2>
-void test_mixed(std::string const& wkt, std::string const& expected)
+template <typename Geometry2, typename Geometry1>
+void check_mixed(Geometry1 const& geometry1, std::string const& expected)
 {
- Geometry1 geometry1;
- bg::read_wkt(wkt, geometry1);
-
     Geometry2 geometry2;
     bg::convert(geometry1, geometry2);
 
     std::ostringstream out;
     out << bg::wkt(geometry2);
     BOOST_CHECK_EQUAL(out.str(), expected);
+}
 
- // std::cout << bg::area(geometry1) << " " << bg::area(geometry2) << std::endl;
+template <typename Geometry1, typename Geometry2>
+void test_mixed(std::string const& wkt, std::string const& expected)
+{
+ Geometry1 geometry1;
+ bg::read_wkt(wkt, geometry1);
+ check_mixed<Geometry2>(geometry1, expected);
+ check_mixed<Geometry2>(boost::variant<Geometry1>(geometry1), expected);
 }
 
 template <typename Geometry1, typename Geometry2>

Modified: branches/release/libs/geometry/test/algorithms/test_difference.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/test_difference.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/test_difference.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -40,7 +40,7 @@
 #if defined(TEST_WITH_SVG)
 # define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
 # define BOOST_GEOMETRY_DEBUG_IDENTIFIER
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 # include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
 #endif
 

Modified: branches/release/libs/geometry/test/algorithms/test_equals.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/test_equals.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/test_equals.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -15,8 +15,27 @@
 #include <boost/geometry/core/ring_type.hpp>
 #include <boost/geometry/algorithms/equals.hpp>
 #include <boost/geometry/strategies/strategies.hpp>
-
 #include <boost/geometry/io/wkt/read.hpp>
+#include <boost/variant/variant.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void check_geometry(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ std::string const& caseid,
+ std::string const& wkt1,
+ std::string const& wkt2,
+ bool expected)
+{
+ bool detected = bg::equals(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "case: " << caseid
+ << " equals: " << wkt1
+ << " to " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
 
 
 template <typename Geometry1, typename Geometry2>
@@ -24,22 +43,16 @@
             std::string const& wkt1,
             std::string const& wkt2, bool expected)
 {
- //std::cout << caseid << " expected: " << int(expected) << std::endl;
- //std::cout << wkt1 << std::endl;
     Geometry1 geometry1;
     Geometry2 geometry2;
 
     bg::read_wkt(wkt1, geometry1);
     bg::read_wkt(wkt2, geometry2);
 
- bool detected = bg::equals(geometry1, geometry2);
-
- BOOST_CHECK_MESSAGE(detected == expected,
- "case: " << caseid
- << " equals: " << wkt1
- << " to " << wkt2
- << " -> Expected: " << expected
- << " detected: " << detected);
+ check_geometry(geometry1, geometry2, caseid, wkt1, wkt2, expected);
+ check_geometry(boost::variant<Geometry1>(geometry1), geometry2, caseid, wkt1, wkt2, expected);
+ check_geometry(geometry1, boost::variant<Geometry2>(geometry2), caseid, wkt1, wkt2, expected);
+ check_geometry(boost::variant<Geometry1>(geometry1), boost::variant<Geometry2>(geometry2), caseid, wkt1, wkt2, expected);
 }
 
 #endif

Modified: branches/release/libs/geometry/test/algorithms/test_intersection.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/test_intersection.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/test_intersection.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -28,7 +28,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 #include <geometry_test_common.hpp>

Modified: branches/release/libs/geometry/test/algorithms/test_length.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/test_length.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/test_length.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -14,12 +14,14 @@
 #include <boost/geometry/algorithms/length.hpp>
 #include <boost/geometry/io/wkt/read.hpp>
 #include <boost/geometry/strategies/strategies.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/variant/variant.hpp>
 
 
 template <typename Geometry>
 void test_length(Geometry const& geometry, long double expected_length)
 {
- typename bg::default_length_result<Geometry>::type length = bg::length(geometry);
+ BOOST_AUTO(length, bg::length(geometry));
 
 #ifdef GEOMETRY_TEST_DEBUG
     std::ostringstream out;
@@ -42,6 +44,7 @@
     Geometry geometry;
     bg::read_wkt(wkt, geometry);
     test_length(geometry, expected_length);
+ test_length(boost::variant<Geometry>(geometry), expected_length);
 }
 
 template <typename Geometry>

Modified: branches/release/libs/geometry/test/algorithms/test_union.hpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/test_union.hpp (original)
+++ branches/release/libs/geometry/test/algorithms/test_union.hpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -30,7 +30,7 @@
 
 
 #if defined(TEST_WITH_SVG)
-# include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/svg_mapper.hpp>
 #endif
 
 

Modified: branches/release/libs/geometry/test/algorithms/union.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/union.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/union.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -232,10 +232,12 @@
         if_typed<ct, double>(5, if_typed_tt<ct>(8, 7)),
         14729.07145);
         
+
+ // Float gives sometimes 14, sometimes 14 points
     test_one<Polygon, Polygon, Polygon>("ggl_list_20110716_enrico",
         ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
         1, 1,
- if_typed<ct, double>(18, if_typed<ct, float>(15, 17)),
+ if_typed<ct, double>(18, if_typed<ct, float>(-1, 17)),
         129904.197692871);
 
     test_one<Polygon, Polygon, Polygon>("ggl_list_20110820_christophe",
@@ -291,8 +293,21 @@
 
     test_one<Polygon, Polygon, Polygon>("buffer_rt_i", buffer_rt_i[0], buffer_rt_i[1],
                 1, 0, 13, 13.6569);
- test_one<Polygon, Polygon, Polygon>("buffer_rt_i_rev", buffer_rt_i[1], buffer_rt_i[0],
+
+ bool test_rt_i_rev = true;
+#ifndef _MSC_VER
+ if (boost::is_same<ct, float>::type::value)
+ {
+ // TODO: this case has to be fixed for gcc/float on non-Windows
+ test_rt_i_rev = false;
+ }
+
+#endif
+ if (test_rt_i_rev)
+ {
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_i_rev", buffer_rt_i[1], buffer_rt_i[0],
                 1, 0, 13, 13.6569);
+ }
 
     test_one<Polygon, Polygon, Polygon>("buffer_rt_j", buffer_rt_j[0], buffer_rt_j[1],
                 1, 0, -1, 16.5711);
@@ -328,6 +343,23 @@
                 1, 0, if_typed_tt<ct>(16, 14), 15.6569);
     test_one<Polygon, Polygon, Polygon>("buffer_rt_t_ref", buffer_rt_t[1], buffer_rt_t[0],
                 1, 0, if_typed_tt<ct>(16, 14), 15.6569);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_mp1", buffer_mp1[0], buffer_mp1[1],
+ 1, 0, 91, 22.815);
+
+ if (boost::is_same<ct, double>::type::value)
+ {
+ // Contains robustness issue for collinear-opposite.
+ // In double it delivers a polygon and a hole
+ test_one<Polygon, Polygon, Polygon>("buffer_mp2", buffer_mp2[0], buffer_mp2[1],
+ 1, 1, 218, 36.7535642);
+ }
+ else if (boost::is_same<ct, float>::type::value)
+ {
+ // In float (and ttmath) it delivers one polygon
+ test_one<Polygon, Polygon, Polygon>("buffer_mp2", buffer_mp2[0], buffer_mp2[1],
+ 1, 0, 217, 36.7528377);
+ }
 }
 
 template <typename P>

Modified: branches/release/libs/geometry/test/algorithms/within.cpp
==============================================================================
--- branches/release/libs/geometry/test/algorithms/within.cpp (original)
+++ branches/release/libs/geometry/test/algorithms/within.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -151,6 +151,10 @@
     BOOST_CHECK_EQUAL(bg::within(point_type(2, 4, 2), box), false);
     BOOST_CHECK_EQUAL(bg::within(point_type(2, 2, 4), box), false);
     BOOST_CHECK_EQUAL(bg::within(point_type(2, 2, 5), box), false);
+
+ box_type box2(point_type(2, 2, 2), point_type(3, 3, 3));
+ BOOST_CHECK_EQUAL(bg::within(box2, box), true);
+
 }
 
 template <typename P1, typename P2>
@@ -209,12 +213,15 @@
 
     bool r = bg::within(p, b,
         bg::strategy::within::point_in_box<point_type, box_type>());
+ BOOST_CHECK_EQUAL(r, true);
 
     r = bg::within(b, b,
         bg::strategy::within::box_in_box<box_type, box_type>());
+ BOOST_CHECK_EQUAL(r, false);
 
     r = bg::within(p, b,
         bg::strategy::within::point_in_box_by_side<point_type, box_type>());
+ BOOST_CHECK_EQUAL(r, true);
 }
 
 

Modified: branches/release/libs/geometry/test/geometries/Jamfile.v2
==============================================================================
--- branches/release/libs/geometry/test/geometries/Jamfile.v2 (original)
+++ branches/release/libs/geometry/test/geometries/Jamfile.v2 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -13,7 +13,7 @@
     [ run adapted.cpp ]
     [ run boost_array_as_point.cpp ]
     [ run boost_fusion.cpp ]
- [ run boost_polygon.cpp ]
+ # [ run boost_polygon.cpp ]
     [ run boost_range.cpp ]
     [ run boost_tuple.cpp ]
     [ run box.cpp ]

Modified: branches/release/libs/geometry/test/io/wkt/wkt.cpp
==============================================================================
--- branches/release/libs/geometry/test/io/wkt/wkt.cpp (original)
+++ branches/release/libs/geometry/test/io/wkt/wkt.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -30,6 +30,16 @@
 #include <boost/geometry/core/topological_dimension.hpp>
 #include <boost/geometry/io/wkt/read.hpp>
 #include <boost/geometry/io/wkt/write.hpp>
+#include <boost/variant/variant.hpp>
+
+template <typename G>
+void check_wkt(G const& geometry, std::string const& expected)
+{
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+ BOOST_CHECK_EQUAL(boost::to_upper_copy(out.str()),
+ boost::to_upper_copy(expected));
+}
 
 template <typename G>
 void test_wkt(std::string const& wkt, std::size_t n, double len = 0,
@@ -57,10 +67,8 @@
         BOOST_CHECK_CLOSE(double(bg::perimeter(geometry)), peri, 0.0001);
     }
 
- std::ostringstream out;
- out << bg::wkt(geometry);
- BOOST_CHECK_EQUAL(boost::to_upper_copy(out.str()),
- boost::to_upper_copy(wkt));
+ check_wkt(geometry, wkt);
+ check_wkt(boost::variant<G>(geometry), wkt);
 }
 
 template <typename G>

Modified: branches/release/libs/geometry/test/multi/algorithms/multi_num_points.cpp
==============================================================================
--- branches/release/libs/geometry/test/multi/algorithms/multi_num_points.cpp (original)
+++ branches/release/libs/geometry/test/multi/algorithms/multi_num_points.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -19,11 +19,12 @@
 #include <boost/geometry/multi/geometries/multi_linestring.hpp>
 #include <boost/geometry/multi/geometries/multi_polygon.hpp>
 
+#include <boost/variant/variant.hpp>
+
+
 template <typename Geometry>
-void test_geometry(std::string const& wkt, int expected)
+void check_geometry(Geometry const& geometry, std::string const& wkt, int expected)
 {
- Geometry geometry;
- bg::read_wkt(wkt, geometry);
     int detected = bg::num_points(geometry);
     BOOST_CHECK_MESSAGE(detected == expected,
         "num_points: " << wkt
@@ -31,6 +32,15 @@
         << " detected: " << detected);
 }
 
+template <typename Geometry>
+void test_geometry(std::string const& wkt, int expected)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ check_geometry(geometry, wkt, expected);
+ check_geometry(boost::variant<Geometry>(geometry), wkt, expected);
+}
+
 
 template <typename Point>
 void test_all()

Modified: branches/release/libs/geometry/test/robustness/convex_hull/random_multi_points.cpp
==============================================================================
--- branches/release/libs/geometry/test/robustness/convex_hull/random_multi_points.cpp (original)
+++ branches/release/libs/geometry/test/robustness/convex_hull/random_multi_points.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -24,7 +24,7 @@
 #include <boost/geometry/geometries/geometries.hpp>
 #include <boost/geometry/geometries/point_xy.hpp>
 #include <boost/geometry/multi/geometries/multi_geometries.hpp>
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#include <boost/geometry/io/svg/svg_mapper.hpp>
 
 struct settings_type
 {

Modified: branches/release/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.cpp
==============================================================================
--- branches/release/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.cpp (original)
+++ branches/release/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -28,7 +28,7 @@
 #include <boost/geometry/geometries/point_xy.hpp>
 #include <boost/geometry/multi/geometries/multi_geometries.hpp>
 
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#include <boost/geometry/io/svg/svg_mapper.hpp>
 #include <boost/geometry/extensions/algorithms/midpoints.hpp>
 
 #include <boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp>

Modified: branches/release/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.cpp
==============================================================================
--- branches/release/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.cpp (original)
+++ branches/release/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.cpp 2013-05-12 06:58:26 EDT (Sun, 12 May 2013)
@@ -28,7 +28,7 @@
 #include <boost/geometry/geometries/point_xy.hpp>
 #include <boost/geometry/multi/geometries/multi_geometries.hpp>
 
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
+#include <boost/geometry/io/svg/svg_mapper.hpp>
 #include <boost/geometry/extensions/algorithms/midpoints.hpp>
 
 #include <common/common_settings.hpp>


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