|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r77347 - in branches/quickbook-dev: . boost boost/accumulators/statistics boost/algorithm boost/algorithm/cxx11 boost/algorithm/string boost/archive boost/archive/iterators boost/asio/detail boost/asio/detail/impl boost/config boost/config/compiler boost/config/stdlib boost/container boost/context boost/detail boost/exception boost/filesystem/v3 boost/functional boost/functional/overloaded_function boost/geometry boost/geometry/algorithms boost/geometry/algorithms/detail boost/geometry/algorithms/detail/overlay boost/geometry/arithmetic boost/geometry/extensions/algorithms boost/geometry/extensions/algorithms/buffer boost/geometry/extensions/arithmetic boost/geometry/extensions/gis/geographic/strategies boost/geometry/extensions/gis/projections boost/geometry/extensions/gis/projections/impl boost/geometry/extensions/gis/projections/proj boost/geometry/extensions/strategies boost/geometry/geometries boost/geometry/io/wkt boost/geometry/multi boost/geometry/multi/algorithms boost/geometry/multi/io/wkt boost/geometry/policies/relate boost/geometry/strategies boost/geometry/strategies/agnostic boost/geometry/strategies/cartesian boost/geometry/util boost/graph boost/graph/detail boost/graph/property_maps boost/heap boost/interprocess boost/interprocess/sync boost/interprocess/sync/shm boost/intrusive boost/iostreams boost/iostreams/detail boost/iostreams/detail/adapter boost/iostreams/detail/streambuf boost/iostreams/filter boost/local_function boost/math boost/math/constants boost/math/distributions boost/math/special_functions boost/math/special_functions/detail boost/math/tools boost/msm boost/msm/back boost/msm/front boost/msm/front/euml boost/numeric/conversion boost/numeric/conversion/detail boost/numeric/conversion/detail/preprocessed boost/numeric/interval/detail boost/random boost/regex/pending boost/serialization boost/signals2/detail boost/smart_ptr/detail boost/spirit boost/spirit/actor boost/spirit/attribute boost/spirit/core boost/spirit/debug boost/spirit/dynamic boost/spirit/error_handling boost/spirit/home boost/spirit/home/qi boost/spirit/home/support boost/spirit/include boost/spirit/iterator boost/spirit/meta boost/spirit/phoenix boost/spirit/symbols boost/spirit/tree boost/spirit/utility boost/thread boost/thread/detail boost/thread/pthread boost/type_traits boost/unordered boost/unordered/detail boost/utility boost/uuid boost/variant/detail boost/xpressive/detail/core doc/html doc/test libs libs/algorithm/doc libs/algorithm/string/doc libs/algorithm/test libs/asio/doc libs/chrono/doc libs/config/doc libs/config/doc/html libs/config/doc/html/boost_config libs/config/test libs/config/test/all libs/container/doc libs/context libs/conversion/doc libs/conversion/perf libs/conversion/test libs/exception/doc/source libs/filesystem/v3/doc libs/filesystem/v3/doc/src libs/filesystem/v3/src libs/filesystem/v3/test libs/filesystem/v3/test/msvc10 libs/functional/hash/doc libs/functional/overloaded_function libs/functional/overloaded_function/doc libs/functional/overloaded_function/doc/html libs/fusion/doc libs/geometry/doc libs/geometry/doc/concept libs/geometry/doc/doxy/doxygen_input/groups libs/geometry/doc/generated libs/geometry/doc/html libs/geometry/doc/other/testcases libs/geometry/doc/reference/algorithms libs/geometry/doc/reference/geometries libs/geometry/doc/src/docutils/tools/support_status libs/geometry/doc/src/examples/algorithms libs/geometry/example libs/geometry/example/with_external_libs libs/geometry/example/with_external_libs/contrib/gd-2.0.35 libs/geometry/example/with_external_libs/contrib/soci-3.0.0 libs/geometry/example/with_external_libs/contrib/soci-3.1.0 libs/geometry/example_extensions libs/geometry/example_extensions/gis/io/shapelib libs/geometry/example_extensions/gis/latlong libs/geometry/example_extensions/gis/projections libs/geometry/test libs/geometry/test/algorithms libs/geometry/test/algorithms/detail/sections libs/geometry/test/algorithms/overlay libs/geometry/test/algorithms/overlay/robustness libs/geometry/test/io/wkt libs/geometry/test/multi/algorithms libs/geometry/test/multi/algorithms/overlay libs/geometry/test/multi/io/wkt libs/geometry/test/robustness libs/geometry/test/strategies libs/geometry/test/util libs/geometry/test_extensions/algorithms libs/geometry/test_extensions/algorithms/buffer libs/geometry/test_extensions/gis/latlong libs/geometry/test_extensions/gis/projections libs/graph/doc libs/graph/example libs/graph/src libs/graph/test libs/graph_parallel/doc libs/heap libs/heap/examples libs/interprocess/doc libs/intrusive/doc/html/images libs/iostreams/doc/classes libs/iostreams/doc/concepts libs/iostreams/doc/guide libs/iostreams/doc/tutorial libs/iostreams/test libs/local_function libs/local_function/doc libs/local_function/doc/html libs/locale/build libs/math libs/math/doc/sf_and_dist libs/math/doc/sf_and_dist/graphs libs/math/doc/sf_and_dist/html libs/math/doc/sf_and_dist/html/math_toolkit/main_overview libs/math/example libs/math/test libs/move/doc/html/images libs/property_map/doc libs/proto/preprocess libs/python/doc/v2 libs/random/test libs/scope_exit libs/scope_exit/doc libs/scope_exit/doc/html libs/scope_exit/doc/html/scope_exit libs/scope_exit/example libs/scope_exit/test libs/serialization libs/serialization/test libs/spirit/doc libs/spirit/example/qi libs/thread/doc libs/thread/src libs/thread/src/win32 libs/thread/test libs/thread/test/sync/conditions/condition_variable libs/thread/test/sync/conditions/condition_variable_any libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons libs/thread/test/sync/mutual_exclusion/locks/shared_lock/locking libs/thread/test/sync/mutual_exclusion/locks/shared_lock/mod libs/thread/test/sync/mutual_exclusion/locks/shared_lock/obs libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/locking libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/mod libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/obs libs/thread/test/sync/mutual_exclusion/mutex libs/thread/test/sync/mutual_exclusion/recursive_mutex libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex libs/thread/test/sync/mutual_exclusion/shared_mutex libs/thread/test/sync/mutual_exclusion/timed_mutex libs/thread/test/threads/this_thread/sleep_for libs/thread/test/threads/this_thread/sleep_until libs/thread/test/threads/thread/constr libs/thread/test/threads/thread/destr libs/thread/test/threads/thread/members libs/thread/test/threads/thread/non_members libs/unordered/test/objects libs/unordered/test/unordered libs/utility libs/utility/identity_type libs/utility/identity_type/doc libs/utility/identity_type/doc/html libs/uuid/test status tools tools/build/v2/engine tools/build/v2/tools tools/quickbook tools/quickbook/doc tools/quickbook/src tools/quickbook/test
From: dnljms_at_[hidden]
Date: 2012-03-16 04:49:32
Author: danieljames
Date: 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
New Revision: 77347
URL: http://svn.boost.org/trac/boost/changeset/77347
Log:
Quickbook: Merge from trunk.
Includes blocks in lists fixes, and some documentation changes.
Added:
branches/quickbook-dev/boost/algorithm/cxx11/
- copied from r77346, /trunk/boost/algorithm/cxx11/
branches/quickbook-dev/boost/algorithm/hex.hpp
- copied unchanged from r77346, /trunk/boost/algorithm/hex.hpp
branches/quickbook-dev/boost/context/
- copied from r77346, /trunk/boost/context/
branches/quickbook-dev/boost/functional/overloaded_function/
- copied from r77346, /trunk/boost/functional/overloaded_function/
branches/quickbook-dev/boost/functional/overloaded_function.hpp
- copied unchanged from r77346, /trunk/boost/functional/overloaded_function.hpp
branches/quickbook-dev/boost/geometry/algorithms/detail/occupation_info.hpp
- copied unchanged from r77346, /trunk/boost/geometry/algorithms/detail/occupation_info.hpp
branches/quickbook-dev/boost/geometry/arithmetic/determinant.hpp
- copied unchanged from r77346, /trunk/boost/geometry/arithmetic/determinant.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/buffer_policies.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/algorithms/buffer/buffer_policies.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/algorithms/buffer/buffered_piece_collection.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/buffered_piece_collection_with_mapper.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/algorithms/buffer/buffered_piece_collection_with_mapper.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/buffered_ring.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/algorithms/buffer/buffered_ring.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/multi_buffer_inserter.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/algorithms/buffer/multi_buffer_inserter.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/side_on_convex_range.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/algorithms/buffer/side_on_convex_range.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/offset_appender.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/algorithms/offset_appender.hpp
branches/quickbook-dev/boost/geometry/extensions/gis/projections/new_projection.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/gis/projections/new_projection.hpp
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/natearth.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/gis/projections/proj/natearth.hpp
branches/quickbook-dev/boost/geometry/extensions/gis/projections/projection_point_type.hpp
- copied unchanged from r77346, /trunk/boost/geometry/extensions/gis/projections/projection_point_type.hpp
branches/quickbook-dev/boost/geometry/io/wkt/stream.hpp
- copied unchanged from r77346, /trunk/boost/geometry/io/wkt/stream.hpp
branches/quickbook-dev/boost/geometry/util/calculation_type.hpp
- copied unchanged from r77346, /trunk/boost/geometry/util/calculation_type.hpp
branches/quickbook-dev/boost/local_function/
- copied from r77346, /trunk/boost/local_function/
branches/quickbook-dev/boost/local_function.hpp
- copied unchanged from r77346, /trunk/boost/local_function.hpp
branches/quickbook-dev/boost/math/constants/calculate_constants.hpp
- copied unchanged from r77346, /trunk/boost/math/constants/calculate_constants.hpp
branches/quickbook-dev/boost/math/constants/generate.hpp
- copied unchanged from r77346, /trunk/boost/math/constants/generate.hpp
branches/quickbook-dev/boost/math/constants/info.hpp
- copied unchanged from r77346, /trunk/boost/math/constants/info.hpp
branches/quickbook-dev/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp
- copied unchanged from r77346, /trunk/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp
branches/quickbook-dev/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp
- copied unchanged from r77346, /trunk/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp
branches/quickbook-dev/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp
- copied unchanged from r77346, /trunk/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp
branches/quickbook-dev/boost/spirit/home/qi/copy.hpp
- copied unchanged from r77346, /trunk/boost/spirit/home/qi/copy.hpp
branches/quickbook-dev/boost/spirit/home/support/auto.hpp
- copied unchanged from r77346, /trunk/boost/spirit/home/support/auto.hpp
branches/quickbook-dev/boost/spirit/include/qi_copy.hpp
- copied unchanged from r77346, /trunk/boost/spirit/include/qi_copy.hpp
branches/quickbook-dev/boost/spirit/include/support_auto.hpp
- copied unchanged from r77346, /trunk/boost/spirit/include/support_auto.hpp
branches/quickbook-dev/boost/thread/detail/scoped_enum.hpp
- copied unchanged from r77346, /trunk/boost/thread/detail/scoped_enum.hpp
branches/quickbook-dev/boost/utility/identity_type.hpp
- copied unchanged from r77346, /trunk/boost/utility/identity_type.hpp
branches/quickbook-dev/doc/html/heap.html
- copied unchanged from r77346, /trunk/doc/html/heap.html
branches/quickbook-dev/doc/test/test.mml
- copied unchanged from r77346, /trunk/doc/test/test.mml
branches/quickbook-dev/doc/test/test.png
- copied unchanged from r77346, /trunk/doc/test/test.png
branches/quickbook-dev/doc/test/test.svg
- copied unchanged from r77346, /trunk/doc/test/test.svg
branches/quickbook-dev/libs/algorithm/doc/
- copied from r77346, /trunk/libs/algorithm/doc/
branches/quickbook-dev/libs/algorithm/test/all_of_test.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/all_of_test.cpp
branches/quickbook-dev/libs/algorithm/test/any_of_test.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/any_of_test.cpp
branches/quickbook-dev/libs/algorithm/test/copy_n_test1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/copy_n_test1.cpp
branches/quickbook-dev/libs/algorithm/test/find_if_not_test1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/find_if_not_test1.cpp
branches/quickbook-dev/libs/algorithm/test/hex_fail1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/hex_fail1.cpp
branches/quickbook-dev/libs/algorithm/test/hex_test1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/hex_test1.cpp
branches/quickbook-dev/libs/algorithm/test/hex_test2.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/hex_test2.cpp
branches/quickbook-dev/libs/algorithm/test/hex_test3.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/hex_test3.cpp
branches/quickbook-dev/libs/algorithm/test/iota_test1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/iota_test1.cpp
branches/quickbook-dev/libs/algorithm/test/is_partitioned_test1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/is_partitioned_test1.cpp
branches/quickbook-dev/libs/algorithm/test/is_permutation_test1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/is_permutation_test1.cpp
branches/quickbook-dev/libs/algorithm/test/none_of_test.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/none_of_test.cpp
branches/quickbook-dev/libs/algorithm/test/one_of_test.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/one_of_test.cpp
branches/quickbook-dev/libs/algorithm/test/ordered_test.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/ordered_test.cpp
branches/quickbook-dev/libs/algorithm/test/partition_copy_test1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/partition_copy_test1.cpp
branches/quickbook-dev/libs/algorithm/test/partition_point_test1.cpp
- copied unchanged from r77346, /trunk/libs/algorithm/test/partition_point_test1.cpp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_array.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_array.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_chrono.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_chrono.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_codecvt.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_codecvt.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_condition_variable.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_condition_variable.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_forward_list.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_forward_list.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_future.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_future.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_initializer_list.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_initializer_list.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_mutex.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_mutex.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_random.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_random.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_ratio.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_ratio.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_regex.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_regex.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_system_error.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_system_error.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_thread.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_thread.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_tuple.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_tuple.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_type_traits.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_type_traits.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_typeindex.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_typeindex.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_unordered_map.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_unordered_map.ipp
branches/quickbook-dev/libs/config/test/boost_no_cxx11_hdr_unordered_set.ipp
- copied unchanged from r77346, /trunk/libs/config/test/boost_no_cxx11_hdr_unordered_set.ipp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_array_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_array_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_array_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_array_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_chrono_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_chrono_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_chrono_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_chrono_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_codecvt_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_codecvt_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_codecvt_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_codecvt_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_condition_variable_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_condition_variable_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_condition_variable_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_condition_variable_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_forward_list_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_forward_list_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_forward_list_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_forward_list_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_future_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_future_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_future_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_future_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_initializer_list_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_initializer_list_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_initializer_list_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_initializer_list_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_mutex_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_mutex_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_mutex_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_mutex_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_random_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_random_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_random_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_random_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_ratio_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_ratio_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_ratio_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_ratio_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_regex_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_regex_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_regex_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_regex_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_system_error_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_system_error_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_system_error_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_system_error_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_thread_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_thread_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_thread_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_thread_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_tuple_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_tuple_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_tuple_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_tuple_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_type_traits_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_type_traits_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_type_traits_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_type_traits_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_typeindex_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_typeindex_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_typeindex_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_typeindex_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_unordered_map_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_unordered_map_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_unordered_map_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_unordered_map_pass.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_unordered_set_fail.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_unordered_set_fail.cpp
branches/quickbook-dev/libs/config/test/no_cxx11_hdr_unordered_set_pass.cpp
- copied unchanged from r77346, /trunk/libs/config/test/no_cxx11_hdr_unordered_set_pass.cpp
branches/quickbook-dev/libs/context/
- copied from r77346, /trunk/libs/context/
branches/quickbook-dev/libs/conversion/perf/
- copied from r77346, /trunk/libs/conversion/perf/
branches/quickbook-dev/libs/conversion/test/lexical_cast_no_exceptions_test.cpp
- copied unchanged from r77346, /trunk/libs/conversion/test/lexical_cast_no_exceptions_test.cpp
branches/quickbook-dev/libs/conversion/test/lexical_cast_no_locale_test.cpp
- copied unchanged from r77346, /trunk/libs/conversion/test/lexical_cast_no_locale_test.cpp
branches/quickbook-dev/libs/functional/overloaded_function/
- copied from r77346, /trunk/libs/functional/overloaded_function/
branches/quickbook-dev/libs/geometry/doc/generated/correct_status.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/generated/correct_status.qbk
branches/quickbook-dev/libs/geometry/doc/generated/covered_by_status.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/generated/covered_by_status.qbk
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/covered_by.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/algorithms/covered_by.qbk
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference_behavior.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/algorithms/difference_behavior.qbk
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/disjoint.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/algorithms/disjoint.qbk
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/envelope.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/algorithms/envelope.qbk
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/for_each_point.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/algorithms/for_each_point.qbk
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/for_each_segment.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/algorithms/for_each_segment.qbk
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/geometry_rules.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/algorithms/geometry_rules.qbk
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/overlaps.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/algorithms/overlaps.qbk
branches/quickbook-dev/libs/geometry/doc/reference/geometries/point_assign_warning.qbk
- copied unchanged from r77346, /trunk/libs/geometry/doc/reference/geometries/point_assign_warning.qbk
branches/quickbook-dev/libs/geometry/example/with_external_libs/contrib/soci-3.1.0/
- copied from r77346, /trunk/libs/geometry/example/with_external_libs/contrib/soci-3.1.0/
branches/quickbook-dev/libs/geometry/example_extensions/boost.vsprops
- copied unchanged from r77346, /trunk/libs/geometry/example_extensions/boost.vsprops
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p04_example.cpp
- copied unchanged from r77346, /trunk/libs/geometry/example_extensions/gis/projections/p04_example.cpp
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p04_example.vcproj
- copied unchanged from r77346, /trunk/libs/geometry/example_extensions/gis/projections/p04_example.vcproj
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p05_example.cpp
- copied unchanged from r77346, /trunk/libs/geometry/example_extensions/gis/projections/p05_example.cpp
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p05_example.vcproj
- copied unchanged from r77346, /trunk/libs/geometry/example_extensions/gis/projections/p05_example.vcproj
branches/quickbook-dev/libs/geometry/test/robustness/
- copied from r77346, /trunk/libs/geometry/test/robustness/
branches/quickbook-dev/libs/geometry/test/strategies/transform_cs.cpp
- copied unchanged from r77346, /trunk/libs/geometry/test/strategies/transform_cs.cpp
branches/quickbook-dev/libs/geometry/test/strategies/transform_cs.vcproj
- copied unchanged from r77346, /trunk/libs/geometry/test/strategies/transform_cs.vcproj
branches/quickbook-dev/libs/geometry/test/util/calculation_type.cpp
- copied unchanged from r77346, /trunk/libs/geometry/test/util/calculation_type.cpp
branches/quickbook-dev/libs/geometry/test/util/calculation_type.vcproj
- copied unchanged from r77346, /trunk/libs/geometry/test/util/calculation_type.vcproj
branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/multi_polygon_buffer.cpp
- copied unchanged from r77346, /trunk/libs/geometry/test_extensions/algorithms/buffer/multi_polygon_buffer.cpp
branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/multi_polygon_buffer.vcproj
- copied unchanged from r77346, /trunk/libs/geometry/test_extensions/algorithms/buffer/multi_polygon_buffer.vcproj
branches/quickbook-dev/libs/graph/doc/directed_graph.html
- copied unchanged from r77346, /trunk/libs/graph/doc/directed_graph.html
branches/quickbook-dev/libs/graph/doc/undirected_graph.html
- copied unchanged from r77346, /trunk/libs/graph/doc/undirected_graph.html
branches/quickbook-dev/libs/graph/example/directed_graph.cpp
- copied unchanged from r77346, /trunk/libs/graph/example/directed_graph.cpp
branches/quickbook-dev/libs/graph/example/grid_graph_properties.cpp
- copied unchanged from r77346, /trunk/libs/graph/example/grid_graph_properties.cpp
branches/quickbook-dev/libs/graph/example/undirected_adjacency_list.cpp
- copied unchanged from r77346, /trunk/libs/graph/example/undirected_adjacency_list.cpp
branches/quickbook-dev/libs/graph/example/undirected_adjacency_list.expected
- copied unchanged from r77346, /trunk/libs/graph/example/undirected_adjacency_list.expected
branches/quickbook-dev/libs/graph/example/undirected_graph.cpp
- copied unchanged from r77346, /trunk/libs/graph/example/undirected_graph.cpp
branches/quickbook-dev/libs/heap/index.html
- copied unchanged from r77346, /trunk/libs/heap/index.html
branches/quickbook-dev/libs/local_function/
- copied from r77346, /trunk/libs/local_function/
branches/quickbook-dev/libs/math/doc/sf_and_dist/graphs/plot_Owens_T.png
- copied unchanged from r77346, /trunk/libs/math/doc/sf_and_dist/graphs/plot_Owens_T.png
branches/quickbook-dev/libs/math/doc/sf_and_dist/graphs/skew_normal_cdf.png
- copied unchanged from r77346, /trunk/libs/math/doc/sf_and_dist/graphs/skew_normal_cdf.png
branches/quickbook-dev/libs/math/doc/sf_and_dist/graphs/skew_normal_cdf.svg
- copied unchanged from r77346, /trunk/libs/math/doc/sf_and_dist/graphs/skew_normal_cdf.svg
branches/quickbook-dev/libs/math/doc/sf_and_dist/graphs/skew_normal_pdf.png
- copied unchanged from r77346, /trunk/libs/math/doc/sf_and_dist/graphs/skew_normal_pdf.png
branches/quickbook-dev/libs/math/doc/sf_and_dist/graphs/skew_normal_pdf.svg
- copied unchanged from r77346, /trunk/libs/math/doc/sf_and_dist/graphs/skew_normal_pdf.svg
branches/quickbook-dev/libs/math/doc/sf_and_dist/html/
- copied from r77346, /trunk/libs/math/doc/sf_and_dist/html/
branches/quickbook-dev/libs/math/doc/sf_and_dist/pp_pi.hpp
- copied unchanged from r77346, /trunk/libs/math/doc/sf_and_dist/pp_pi.hpp
branches/quickbook-dev/libs/math/example/nonfinite_num_facet_trap.cpp
- copied unchanged from r77346, /trunk/libs/math/example/nonfinite_num_facet_trap.cpp
branches/quickbook-dev/libs/math/test/test_constant_generate.cpp
- copied unchanged from r77346, /trunk/libs/math/test/test_constant_generate.cpp
branches/quickbook-dev/libs/math/test/test_nonfinite_io.cpp
- copied unchanged from r77346, /trunk/libs/math/test/test_nonfinite_io.cpp
branches/quickbook-dev/libs/math/test/test_print_info_on_type.cpp
- copied unchanged from r77346, /trunk/libs/math/test/test_print_info_on_type.cpp
branches/quickbook-dev/libs/proto/preprocess/Jamfile.v2
- copied unchanged from r77346, /trunk/libs/proto/preprocess/Jamfile.v2
branches/quickbook-dev/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT.html
branches/quickbook-dev/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_ALL.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_ALL.html
branches/quickbook-dev/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_CONFIG_NO_CPP11.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_CONFIG_NO_CPP11.html
branches/quickbook-dev/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_END.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_END.html
branches/quickbook-dev/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_TPL.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_TPL.html
branches/quickbook-dev/libs/scope_exit/doc/html/reference.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/reference.html
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/Acknowledgements.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/scope_exit/Acknowledgements.html
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/Getting_Started.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/scope_exit/Getting_Started.html
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/No_Variadic_Macros.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/scope_exit/No_Variadic_Macros.html
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/alternatives.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/scope_exit/alternatives.html
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/tutorial.html
- copied unchanged from r77346, /trunk/libs/scope_exit/doc/html/scope_exit/tutorial.html
branches/quickbook-dev/libs/scope_exit/example/Jamfile.v2
- copied unchanged from r77346, /trunk/libs/scope_exit/example/Jamfile.v2
branches/quickbook-dev/libs/scope_exit/example/scope_guard.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/example/scope_guard.cpp
branches/quickbook-dev/libs/scope_exit/example/scope_guard_seq.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/example/scope_guard_seq.cpp
branches/quickbook-dev/libs/scope_exit/example/try_catch.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/example/try_catch.cpp
branches/quickbook-dev/libs/scope_exit/example/try_catch_seq.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/example/try_catch_seq.cpp
branches/quickbook-dev/libs/scope_exit/test/native_this.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/native_this.cpp
branches/quickbook-dev/libs/scope_exit/test/world.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world.cpp
branches/quickbook-dev/libs/scope_exit/test/world_checkpoint.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_checkpoint.cpp
branches/quickbook-dev/libs/scope_exit/test/world_checkpoint_all.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_checkpoint_all.cpp
branches/quickbook-dev/libs/scope_exit/test/world_checkpoint_all_seq.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_checkpoint_all_seq.cpp
branches/quickbook-dev/libs/scope_exit/test/world_checkpoint_seq.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_checkpoint_seq.cpp
branches/quickbook-dev/libs/scope_exit/test/world_lambda.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_lambda.cpp
branches/quickbook-dev/libs/scope_exit/test/world_seq.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_seq.cpp
branches/quickbook-dev/libs/scope_exit/test/world_this.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_this.cpp
branches/quickbook-dev/libs/scope_exit/test/world_this_seq.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_this_seq.cpp
branches/quickbook-dev/libs/scope_exit/test/world_tpl.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_tpl.cpp
branches/quickbook-dev/libs/scope_exit/test/world_tpl_seq.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_tpl_seq.cpp
branches/quickbook-dev/libs/scope_exit/test/world_void.cpp
- copied unchanged from r77346, /trunk/libs/scope_exit/test/world_void.cpp
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/
- copied from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/locking/
- copied from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/locking/
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/mod/
- copied from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/mod/
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/obs/
- copied from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/obs/
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/
- copied from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/locking/
- copied from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/locking/
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/mod/
- copied from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/mod/
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/obs/
- copied from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/obs/
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/shared_mutex/assign_fail.cpp
- copied unchanged from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/shared_mutex/assign_fail.cpp
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/shared_mutex/copy_fail.cpp
- copied unchanged from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/shared_mutex/copy_fail.cpp
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/shared_mutex/default_pass.cpp
- copied unchanged from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/shared_mutex/default_pass.cpp
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/shared_mutex/lock_pass.cpp
- copied unchanged from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/shared_mutex/lock_pass.cpp
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/shared_mutex/try_lock_for_pass.cpp
- copied unchanged from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/shared_mutex/try_lock_for_pass.cpp
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/shared_mutex/try_lock_pass.cpp
- copied unchanged from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/shared_mutex/try_lock_pass.cpp
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/shared_mutex/try_lock_until_pass.cpp
- copied unchanged from r77346, /trunk/libs/thread/test/sync/mutual_exclusion/shared_mutex/try_lock_until_pass.cpp
branches/quickbook-dev/libs/thread/test/test_shared_mutex_timed_locks_chrono.cpp
- copied unchanged from r77346, /trunk/libs/thread/test/test_shared_mutex_timed_locks_chrono.cpp
branches/quickbook-dev/libs/utility/identity_type/
- copied from r77346, /trunk/libs/utility/identity_type/
Removed:
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/intersecting_inserter.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/linestring_buffer.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/polygon_buffer.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/sectionalizing_buffer.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/segmenting_buffer.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/splitting_buffer.hpp
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/traversing_buffer.hpp
branches/quickbook-dev/boost/geometry/io/wkt/iomanip.hpp
branches/quickbook-dev/boost/geometry/policies/relate/intersection_points_determinant.hpp
branches/quickbook-dev/boost/geometry/policies/relate/intersection_points_slope.hpp
branches/quickbook-dev/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits.hpp
branches/quickbook-dev/boost/spirit/actor/
branches/quickbook-dev/boost/spirit/actor.hpp
branches/quickbook-dev/boost/spirit/attribute/
branches/quickbook-dev/boost/spirit/attribute.hpp
branches/quickbook-dev/boost/spirit/core/
branches/quickbook-dev/boost/spirit/core.hpp
branches/quickbook-dev/boost/spirit/debug/
branches/quickbook-dev/boost/spirit/debug.hpp
branches/quickbook-dev/boost/spirit/dynamic/
branches/quickbook-dev/boost/spirit/dynamic.hpp
branches/quickbook-dev/boost/spirit/error_handling/
branches/quickbook-dev/boost/spirit/error_handling.hpp
branches/quickbook-dev/boost/spirit/iterator/
branches/quickbook-dev/boost/spirit/iterator.hpp
branches/quickbook-dev/boost/spirit/meta/
branches/quickbook-dev/boost/spirit/meta.hpp
branches/quickbook-dev/boost/spirit/phoenix/
branches/quickbook-dev/boost/spirit/phoenix.hpp
branches/quickbook-dev/boost/spirit/symbols/
branches/quickbook-dev/boost/spirit/symbols.hpp
branches/quickbook-dev/boost/spirit/tree/
branches/quickbook-dev/boost/spirit/utility/
branches/quickbook-dev/boost/spirit/utility.hpp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_array.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_chrono.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_codecvt.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_condition_variable.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_forward_list.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_future.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_initializer_list.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_mutex.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_random.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_ratio.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_regex.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_system_error.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_thread.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_tuple.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_type_traits.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_typeindex.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_unordered_map.ipp
branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_unordered_set.ipp
branches/quickbook-dev/libs/config/test/boost_no_initializer_lists.ipp
branches/quickbook-dev/libs/config/test/no_0x_hdr_array_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_array_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_chrono_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_chrono_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_codecvt_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_codecvt_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_condition_variable_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_condition_variable_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_forward_list_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_forward_list_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_future_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_future_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_initializer_list_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_initializer_list_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_mutex_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_mutex_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_random_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_random_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_ratio_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_ratio_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_regex_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_regex_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_system_error_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_system_error_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_thread_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_thread_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_tuple_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_tuple_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_type_traits_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_type_traits_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_typeindex_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_typeindex_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_map_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_map_pass.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_set_fail.cpp
branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_set_pass.cpp
branches/quickbook-dev/libs/config/test/no_initializer_lists_fail.cpp
branches/quickbook-dev/libs/config/test/no_initializer_lists_pass.cpp
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/overlay_behavior.qbk
branches/quickbook-dev/libs/geometry/example/with_external_libs/contrib/soci-3.0.0/
branches/quickbook-dev/libs/graph/example/undirected.cpp
branches/quickbook-dev/libs/graph/example/undirected.expected
branches/quickbook-dev/libs/graph_parallel/doc/small_world_1_70_6_0p02.png
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/acknowledge.html
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/compilers.html
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/conf.html
branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/ref.html
branches/quickbook-dev/libs/scope_exit/example/world.cpp
branches/quickbook-dev/libs/scope_exit/test/emulation.cpp
branches/quickbook-dev/libs/scope_exit/test/emulation_const_error.cpp
branches/quickbook-dev/libs/scope_exit/test/emulation_cv_error.cpp
branches/quickbook-dev/libs/scope_exit/test/emulation_tpl.cpp
branches/quickbook-dev/libs/scope_exit/test/emulation_tu_test.cpp
Properties modified:
branches/quickbook-dev/ (props changed)
branches/quickbook-dev/boost/archive/ (props changed)
branches/quickbook-dev/boost/interprocess/ (props changed)
branches/quickbook-dev/boost/intrusive/ (props changed)
branches/quickbook-dev/boost/math/ (props changed)
branches/quickbook-dev/boost/msm/ (props changed)
branches/quickbook-dev/boost/msm/back/ (props changed)
branches/quickbook-dev/boost/msm/back/favor_compile_time.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/back/state_machine.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/common.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/front/ (props changed)
branches/quickbook-dev/boost/msm/front/euml/ (props changed)
branches/quickbook-dev/boost/msm/front/euml/common.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/front/euml/container.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/front/euml/operator.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/front/euml/state_grammar.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/front/euml/transformation.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/front/state_machine_def.hpp (contents, props changed)
branches/quickbook-dev/boost/msm/msm_grammar.hpp (contents, props changed)
branches/quickbook-dev/boost/serialization/ (props changed)
branches/quickbook-dev/libs/functional/overloaded_function/doc/ (props changed)
branches/quickbook-dev/libs/functional/overloaded_function/doc/html/ (props changed)
branches/quickbook-dev/libs/local_function/doc/ (props changed)
branches/quickbook-dev/libs/local_function/doc/html/ (props changed)
branches/quickbook-dev/libs/maintainers.txt (contents, props changed)
branches/quickbook-dev/libs/math/ (props changed)
branches/quickbook-dev/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/faq.html (props changed)
branches/quickbook-dev/libs/scope_exit/doc/ (props changed)
branches/quickbook-dev/libs/scope_exit/doc/html/ (props changed)
branches/quickbook-dev/libs/serialization/ (props changed)
branches/quickbook-dev/libs/utility/identity_type/doc/ (props changed)
branches/quickbook-dev/libs/utility/identity_type/doc/html/ (props changed)
branches/quickbook-dev/tools/ (props changed)
branches/quickbook-dev/tools/quickbook/ (props changed)
Binary files modified:
branches/quickbook-dev/libs/geometry/doc/other/testcases/multi_overlay_cases.ppt
branches/quickbook-dev/libs/geometry/doc/other/testcases/overlay_line_poly_cases.ppt
branches/quickbook-dev/libs/geometry/doc/other/testcases/relate.ppt
branches/quickbook-dev/libs/intrusive/doc/html/images/blank.png
branches/quickbook-dev/libs/intrusive/doc/html/images/caution.png
branches/quickbook-dev/libs/intrusive/doc/html/images/draft.png
branches/quickbook-dev/libs/intrusive/doc/html/images/home.png
branches/quickbook-dev/libs/intrusive/doc/html/images/important.png
branches/quickbook-dev/libs/intrusive/doc/html/images/next.png
branches/quickbook-dev/libs/intrusive/doc/html/images/note.png
branches/quickbook-dev/libs/intrusive/doc/html/images/prev.png
branches/quickbook-dev/libs/intrusive/doc/html/images/tip.png
branches/quickbook-dev/libs/intrusive/doc/html/images/toc-blank.png
branches/quickbook-dev/libs/intrusive/doc/html/images/toc-minus.png
branches/quickbook-dev/libs/intrusive/doc/html/images/toc-plus.png
branches/quickbook-dev/libs/intrusive/doc/html/images/warning.png
branches/quickbook-dev/libs/move/doc/html/images/blank.png
branches/quickbook-dev/libs/move/doc/html/images/caution.png
branches/quickbook-dev/libs/move/doc/html/images/draft.png
branches/quickbook-dev/libs/move/doc/html/images/home.png
branches/quickbook-dev/libs/move/doc/html/images/important.png
branches/quickbook-dev/libs/move/doc/html/images/next.png
branches/quickbook-dev/libs/move/doc/html/images/note.png
branches/quickbook-dev/libs/move/doc/html/images/prev.png
branches/quickbook-dev/libs/move/doc/html/images/tip.png
branches/quickbook-dev/libs/move/doc/html/images/toc-blank.png
branches/quickbook-dev/libs/move/doc/html/images/toc-minus.png
branches/quickbook-dev/libs/move/doc/html/images/toc-plus.png
branches/quickbook-dev/libs/move/doc/html/images/warning.png
Text files modified:
branches/quickbook-dev/boost/accumulators/statistics/sum_kahan.hpp | 2
branches/quickbook-dev/boost/accumulators/statistics/weighted_sum_kahan.hpp | 2
branches/quickbook-dev/boost/algorithm/string/find.hpp | 8
branches/quickbook-dev/boost/archive/iterators/head_iterator.hpp | 4
branches/quickbook-dev/boost/archive/iterators/remove_whitespace.hpp | 11
branches/quickbook-dev/boost/array.hpp | 4
branches/quickbook-dev/boost/asio/detail/buffer_sequence_adapter.hpp | 6
branches/quickbook-dev/boost/asio/detail/epoll_reactor.hpp | 2
branches/quickbook-dev/boost/asio/detail/impl/epoll_reactor.ipp | 35
branches/quickbook-dev/boost/asio/detail/impl/kqueue_reactor.ipp | 32
branches/quickbook-dev/boost/asio/detail/kqueue_reactor.hpp | 2
branches/quickbook-dev/boost/config/compiler/borland.hpp | 2
branches/quickbook-dev/boost/config/compiler/clang.hpp | 7
branches/quickbook-dev/boost/config/compiler/codegear.hpp | 3
branches/quickbook-dev/boost/config/compiler/common_edg.hpp | 2
branches/quickbook-dev/boost/config/compiler/digitalmars.hpp | 2
branches/quickbook-dev/boost/config/compiler/gcc.hpp | 2
branches/quickbook-dev/boost/config/compiler/gcc_xml.hpp | 2
branches/quickbook-dev/boost/config/compiler/hp_acc.hpp | 2
branches/quickbook-dev/boost/config/compiler/intel.hpp | 2
branches/quickbook-dev/boost/config/compiler/metrowerks.hpp | 2
branches/quickbook-dev/boost/config/compiler/mpw.hpp | 2
branches/quickbook-dev/boost/config/compiler/pathscale.hpp | 33
branches/quickbook-dev/boost/config/compiler/pgi.hpp | 37
branches/quickbook-dev/boost/config/compiler/sunpro_cc.hpp | 2
branches/quickbook-dev/boost/config/compiler/vacpp.hpp | 2
branches/quickbook-dev/boost/config/compiler/visualc.hpp | 31
branches/quickbook-dev/boost/config/stdlib/dinkumware.hpp | 40
branches/quickbook-dev/boost/config/stdlib/libcomo.hpp | 36
branches/quickbook-dev/boost/config/stdlib/libcpp.hpp | 8
branches/quickbook-dev/boost/config/stdlib/libstdcpp3.hpp | 42
branches/quickbook-dev/boost/config/stdlib/modena.hpp | 36
branches/quickbook-dev/boost/config/stdlib/msl.hpp | 36
branches/quickbook-dev/boost/config/stdlib/roguewave.hpp | 36
branches/quickbook-dev/boost/config/stdlib/sgi.hpp | 36
branches/quickbook-dev/boost/config/stdlib/stlport.hpp | 36
branches/quickbook-dev/boost/config/stdlib/vacpp.hpp | 36
branches/quickbook-dev/boost/config/suffix.hpp | 103 +
branches/quickbook-dev/boost/container/deque.hpp | 8
branches/quickbook-dev/boost/container/stable_vector.hpp | 10
branches/quickbook-dev/boost/container/string.hpp | 10
branches/quickbook-dev/boost/container/vector.hpp | 8
branches/quickbook-dev/boost/detail/container_fwd.hpp | 15
branches/quickbook-dev/boost/exception/exception.hpp | 2
branches/quickbook-dev/boost/filesystem/v3/operations.hpp | 51
branches/quickbook-dev/boost/geometry/algorithms/area.hpp | 6
branches/quickbook-dev/boost/geometry/algorithms/correct.hpp | 37
branches/quickbook-dev/boost/geometry/algorithms/covered_by.hpp | 69
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/add_rings.hpp | 28
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/assign_parents.hpp | 7
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp | 16
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp | 2
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/follow.hpp | 94 +
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp | 266 ++++
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp | 13
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/overlay.hpp | 21
branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/turn_info.hpp | 7
branches/quickbook-dev/boost/geometry/algorithms/detail/throw_on_empty_input.hpp | 10
branches/quickbook-dev/boost/geometry/algorithms/disjoint.hpp | 34
branches/quickbook-dev/boost/geometry/algorithms/distance.hpp | 2
branches/quickbook-dev/boost/geometry/algorithms/envelope.hpp | 10
branches/quickbook-dev/boost/geometry/algorithms/for_each.hpp | 5
branches/quickbook-dev/boost/geometry/algorithms/intersects.hpp | 1
branches/quickbook-dev/boost/geometry/algorithms/length.hpp | 6
branches/quickbook-dev/boost/geometry/algorithms/overlaps.hpp | 4
branches/quickbook-dev/boost/geometry/algorithms/perimeter.hpp | 6
branches/quickbook-dev/boost/geometry/algorithms/within.hpp | 57
branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/line_line_intersection.hpp | 2
branches/quickbook-dev/boost/geometry/extensions/algorithms/offset.hpp | 137 -
branches/quickbook-dev/boost/geometry/extensions/arithmetic/cross_product.hpp | 19
branches/quickbook-dev/boost/geometry/extensions/gis/geographic/strategies/dms_parser.hpp | 8
branches/quickbook-dev/boost/geometry/extensions/gis/projections/epsg.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/epsg_traits.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/factory.hpp | 6
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/aasincos.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/adjlon.hpp | 27
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/base_dynamic.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/base_static.hpp | 7
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/factory_entry.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/function_overloads.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_auth.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_datum_set.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_datums.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_ell_set.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_ellps.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_fwd.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_gauss.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_init.hpp | 6
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_inv.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_msfn.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_param.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_phi2.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_qsfn.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_tsfn.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_units.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_zpoly1.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/proj_mdist.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/projects.hpp | 17
branches/quickbook-dev/boost/geometry/extensions/gis/projections/parameters.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aea.hpp | 30
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aeqd.hpp | 42
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/airy.hpp | 26
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aitoff.hpp | 28
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/august.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bacon.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bipc.hpp | 28
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/boggs.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bonne.hpp | 24
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cass.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cc.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cea.hpp | 25
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/chamb.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/collg.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/crast.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/denoy.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck1.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck2.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck3.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck4.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck5.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eqc.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eqdc.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/fahey.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/fouc_s.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gall.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/geocent.hpp | 26
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/geos.hpp | 95 +
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gins8.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gn_sinu.hpp | 30
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gnom.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/goode.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gstmerc.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/hammer.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/hatano.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/imw_p.hpp | 30
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/krovak.hpp | 141 +-
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/labrd.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/laea.hpp | 26
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lagrng.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/larr.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lask.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/latlong.hpp | 24
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lcc.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lcca.hpp | 24
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/loxim.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lsat.hpp | 32
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbt_fps.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbtfpp.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbtfpq.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/merc.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mill.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mod_ster.hpp | 24
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/moll.hpp | 23
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nell.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nell_h.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nocol.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nsper.hpp | 26
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nzmg.hpp | 28
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ob_tran.hpp | 38
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ocea.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/oea.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/omerc.hpp | 38
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ortho.hpp | 24
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/poly.hpp | 24
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp2.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp3.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp4p.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp5.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp6.hpp | 22
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/robin.hpp | 96
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/rouss.hpp | 22
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/rpoly.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sconics.hpp | 38
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/somerc.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/stere.hpp | 28
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sterea.hpp | 37
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sts.hpp | 22
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tcc.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tcea.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tmerc.hpp | 46
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tpeqd.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/urm5.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/urmfps.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg.hpp | 20
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg2.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg4.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag2.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag3.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag7.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wink1.hpp | 16
branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wink2.hpp | 18
branches/quickbook-dev/boost/geometry/extensions/gis/projections/project_inverse_transformer.hpp | 4
branches/quickbook-dev/boost/geometry/extensions/gis/projections/project_transformer.hpp | 10
branches/quickbook-dev/boost/geometry/extensions/gis/projections/projection.hpp | 8
branches/quickbook-dev/boost/geometry/extensions/strategies/buffer.hpp | 244 ++--
branches/quickbook-dev/boost/geometry/geometries/point_xy.hpp | 3
branches/quickbook-dev/boost/geometry/geometry.hpp | 6
branches/quickbook-dev/boost/geometry/io/wkt/wkt.hpp | 6
branches/quickbook-dev/boost/geometry/multi/algorithms/centroid.hpp | 4
branches/quickbook-dev/boost/geometry/multi/algorithms/convert.hpp | 4
branches/quickbook-dev/boost/geometry/multi/algorithms/correct.hpp | 6
branches/quickbook-dev/boost/geometry/multi/algorithms/covered_by.hpp | 6
branches/quickbook-dev/boost/geometry/multi/algorithms/intersection.hpp | 1
branches/quickbook-dev/boost/geometry/multi/algorithms/within.hpp | 5
branches/quickbook-dev/boost/geometry/multi/io/wkt/read.hpp | 66 +
branches/quickbook-dev/boost/geometry/multi/multi.hpp | 6
branches/quickbook-dev/boost/geometry/policies/relate/de9im.hpp | 8
branches/quickbook-dev/boost/geometry/policies/relate/direction.hpp | 48
branches/quickbook-dev/boost/geometry/policies/relate/intersection_points.hpp | 48
branches/quickbook-dev/boost/geometry/policies/relate/tupled.hpp | 15
branches/quickbook-dev/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp | 73 -
branches/quickbook-dev/boost/geometry/strategies/cartesian/area_surveyor.hpp | 11
branches/quickbook-dev/boost/geometry/strategies/cartesian/cart_intersect.hpp | 225 ++-
branches/quickbook-dev/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp | 5
branches/quickbook-dev/boost/geometry/strategies/cartesian/distance_projected_point.hpp | 22
branches/quickbook-dev/boost/geometry/strategies/cartesian/distance_pythagoras.hpp | 18
branches/quickbook-dev/boost/geometry/strategies/cartesian/side_by_triangle.hpp | 11
branches/quickbook-dev/boost/geometry/strategies/side_info.hpp | 35
branches/quickbook-dev/boost/geometry/strategies/strategy_transform.hpp | 34
branches/quickbook-dev/boost/geometry/util/math.hpp | 56 +
branches/quickbook-dev/boost/graph/adjacency_list_io.hpp | 2
branches/quickbook-dev/boost/graph/astar_search.hpp | 3
branches/quickbook-dev/boost/graph/biconnected_components.hpp | 72
branches/quickbook-dev/boost/graph/compressed_sparse_row_graph.hpp | 1
branches/quickbook-dev/boost/graph/detail/histogram_sort.hpp | 5
branches/quickbook-dev/boost/graph/detail/read_graphviz_spirit.hpp | 4
branches/quickbook-dev/boost/graph/edmonds_karp_max_flow.hpp | 24
branches/quickbook-dev/boost/graph/graphml.hpp | 10
branches/quickbook-dev/boost/graph/graphviz.hpp | 113 ++
branches/quickbook-dev/boost/graph/isomorphism.hpp | 135 +
branches/quickbook-dev/boost/graph/property_maps/null_property_map.hpp | 2
branches/quickbook-dev/boost/graph/subgraph.hpp | 24
branches/quickbook-dev/boost/graph/vector_as_graph.hpp | 12
branches/quickbook-dev/boost/heap/binomial_heap.hpp | 6
branches/quickbook-dev/boost/heap/d_ary_heap.hpp | 2
branches/quickbook-dev/boost/heap/heap_merge.hpp | 2
branches/quickbook-dev/boost/integer.hpp | 4
branches/quickbook-dev/boost/interprocess/sync/file_lock.hpp | 6
branches/quickbook-dev/boost/interprocess/sync/interprocess_condition.hpp | 2
branches/quickbook-dev/boost/interprocess/sync/interprocess_mutex.hpp | 2
branches/quickbook-dev/boost/interprocess/sync/interprocess_recursive_mutex.hpp | 2
branches/quickbook-dev/boost/interprocess/sync/interprocess_semaphore.hpp | 2
branches/quickbook-dev/boost/interprocess/sync/interprocess_upgradable_mutex.hpp | 12
branches/quickbook-dev/boost/interprocess/sync/named_upgradable_mutex.hpp | 12
branches/quickbook-dev/boost/interprocess/sync/shm/named_upgradable_mutex.hpp | 12
branches/quickbook-dev/boost/intrusive/derivation_value_traits.hpp | 1
branches/quickbook-dev/boost/iostreams/chain.hpp | 2
branches/quickbook-dev/boost/iostreams/close.hpp | 2
branches/quickbook-dev/boost/iostreams/combine.hpp | 8
branches/quickbook-dev/boost/iostreams/compose.hpp | 4
branches/quickbook-dev/boost/iostreams/detail/adapter/range_adapter.hpp | 2
branches/quickbook-dev/boost/iostreams/detail/buffer.hpp | 4
branches/quickbook-dev/boost/iostreams/detail/restrict_impl.hpp | 6
branches/quickbook-dev/boost/iostreams/detail/streambuf/chainbuf.hpp | 2
branches/quickbook-dev/boost/iostreams/filter/aggregate.hpp | 2
branches/quickbook-dev/boost/iostreams/filter/counter.hpp | 2
branches/quickbook-dev/boost/iostreams/filter/line.hpp | 2
branches/quickbook-dev/boost/iostreams/invert.hpp | 4
branches/quickbook-dev/boost/iostreams/stream.hpp | 8
branches/quickbook-dev/boost/iostreams/tee.hpp | 4
branches/quickbook-dev/boost/lexical_cast.hpp | 314 +++--
branches/quickbook-dev/boost/math/constants/constants.hpp | 280 ++++
branches/quickbook-dev/boost/math/distributions/triangular.hpp | 2
branches/quickbook-dev/boost/math/special_functions/detail/lanczos_sse2.hpp | 5
branches/quickbook-dev/boost/math/special_functions/nonfinite_num_facets.hpp | 157 ++-
branches/quickbook-dev/boost/math/special_functions/round.hpp | 2
branches/quickbook-dev/boost/math/special_functions/trunc.hpp | 2
branches/quickbook-dev/boost/math/tools/config.hpp | 4
branches/quickbook-dev/boost/msm/back/favor_compile_time.hpp | 2
branches/quickbook-dev/boost/msm/back/state_machine.hpp | 22
branches/quickbook-dev/boost/msm/common.hpp | 2
branches/quickbook-dev/boost/msm/front/euml/common.hpp | 120 -
branches/quickbook-dev/boost/msm/front/euml/container.hpp | 102 +-
branches/quickbook-dev/boost/msm/front/euml/operator.hpp | 20
branches/quickbook-dev/boost/msm/front/euml/state_grammar.hpp | 20
branches/quickbook-dev/boost/msm/front/euml/transformation.hpp | 8
branches/quickbook-dev/boost/msm/front/state_machine_def.hpp | 2
branches/quickbook-dev/boost/msm/msm_grammar.hpp | 40
branches/quickbook-dev/boost/numeric/conversion/converter_policies.hpp | 8
branches/quickbook-dev/boost/numeric/conversion/detail/numeric_cast_traits.hpp | 125 +
branches/quickbook-dev/boost/numeric/interval/detail/msvc_rounding_control.hpp | 2
branches/quickbook-dev/boost/random/discrete_distribution.hpp | 6
branches/quickbook-dev/boost/random/piecewise_constant_distribution.hpp | 6
branches/quickbook-dev/boost/random/piecewise_linear_distribution.hpp | 6
branches/quickbook-dev/boost/random/seed_seq.hpp | 4
branches/quickbook-dev/boost/regex/pending/object_cache.hpp | 2
branches/quickbook-dev/boost/scope_exit.hpp | 945 ++++++++++++++---
branches/quickbook-dev/boost/serialization/extended_type_info_no_rtti.hpp | 2
branches/quickbook-dev/boost/serialization/extended_type_info_typeid.hpp | 2
branches/quickbook-dev/boost/serialization/force_include.hpp | 6
branches/quickbook-dev/boost/serialization/vector.hpp | 2
branches/quickbook-dev/boost/signals2/detail/foreign_ptr.hpp | 19
branches/quickbook-dev/boost/signals2/detail/variadic_slot_invoker.hpp | 20
branches/quickbook-dev/boost/smart_ptr/detail/sp_counted_base.hpp | 6
branches/quickbook-dev/boost/smart_ptr/detail/spinlock_gcc_arm.hpp | 29
branches/quickbook-dev/boost/spirit/home/qi.hpp | 1
branches/quickbook-dev/boost/thread/cv_status.hpp | 8
branches/quickbook-dev/boost/thread/detail/config.hpp | 32
branches/quickbook-dev/boost/thread/detail/thread.hpp | 1
branches/quickbook-dev/boost/thread/future.hpp | 29
branches/quickbook-dev/boost/thread/locks.hpp | 396 +++++--
branches/quickbook-dev/boost/thread/pthread/condition_variable_fwd.hpp | 1
branches/quickbook-dev/boost/thread/pthread/mutex.hpp | 5
branches/quickbook-dev/boost/thread/pthread/recursive_mutex.hpp | 2
branches/quickbook-dev/boost/thread/pthread/shared_mutex.hpp | 136 ++
branches/quickbook-dev/boost/type_traits/intrinsics.hpp | 4
branches/quickbook-dev/boost/unordered/detail/allocator_helpers.hpp | 36
branches/quickbook-dev/boost/unordered/detail/buckets.hpp | 105 +
branches/quickbook-dev/boost/unordered/detail/equivalent.hpp | 39
branches/quickbook-dev/boost/unordered/detail/extract_key.hpp | 15
branches/quickbook-dev/boost/unordered/detail/table.hpp | 50
branches/quickbook-dev/boost/unordered/detail/unique.hpp | 39
branches/quickbook-dev/boost/unordered/detail/util.hpp | 2
branches/quickbook-dev/boost/unordered/unordered_map.hpp | 6
branches/quickbook-dev/boost/unordered/unordered_set.hpp | 6
branches/quickbook-dev/boost/utility/base_from_member.hpp | 72 +
branches/quickbook-dev/boost/uuid/seed_rng.hpp | 2
branches/quickbook-dev/boost/uuid/sha1.hpp | 1
branches/quickbook-dev/boost/variant/detail/visitation_impl.hpp | 2
branches/quickbook-dev/boost/xpressive/detail/core/adaptor.hpp | 2
branches/quickbook-dev/doc/test/Jamfile.v2 | 3
branches/quickbook-dev/doc/test/test.qbk | 20
branches/quickbook-dev/index.html | 2
branches/quickbook-dev/libs/algorithm/string/doc/usage.xml | 2
branches/quickbook-dev/libs/algorithm/test/Jamfile.v2 | 22
branches/quickbook-dev/libs/asio/doc/history.qbk | 5
branches/quickbook-dev/libs/chrono/doc/chrono.qbk | 2033 ++++++++++++++++++++++++++++++++-------
branches/quickbook-dev/libs/config/doc/configuring_boost.qbk | 12
branches/quickbook-dev/libs/config/doc/guidelines.qbk | 2
branches/quickbook-dev/libs/config/doc/html/boost_config/acknowledgements.html | 2
branches/quickbook-dev/libs/config/doc/html/boost_config/boost_macro_reference.html | 552 +++++++++-
branches/quickbook-dev/libs/config/doc/html/boost_config/guidelines_for_boost_authors.html | 12
branches/quickbook-dev/libs/config/doc/html/boost_config/rationale.html | 6
branches/quickbook-dev/libs/config/doc/html/index.html | 42
branches/quickbook-dev/libs/config/doc/macro_reference.qbk | 80 +
branches/quickbook-dev/libs/config/test/all/Jamfile.v2 | 111 +-
branches/quickbook-dev/libs/config/test/boost_no_unified_init.ipp | 2
branches/quickbook-dev/libs/config/test/config_info.cpp | 37
branches/quickbook-dev/libs/config/test/config_test.cpp | 190 +-
branches/quickbook-dev/libs/container/doc/container.qbk | 2
branches/quickbook-dev/libs/conversion/doc/lexical_cast.qbk | 15
branches/quickbook-dev/libs/conversion/test/Jamfile.v2 | 11
branches/quickbook-dev/libs/conversion/test/lexical_cast_containers_test.cpp | 22
branches/quickbook-dev/libs/conversion/test/lexical_cast_empty_input_test.cpp | 14
branches/quickbook-dev/libs/conversion/test/lexical_cast_inf_nan_test.cpp | 21
branches/quickbook-dev/libs/conversion/test/lexical_cast_typedefed_wchar_test.cpp | 15
branches/quickbook-dev/libs/exception/doc/source/boost-exception.reno | 1750 +++++++++++++++++-----------------
branches/quickbook-dev/libs/filesystem/v3/doc/reference.html | 801 ++++++++-------
branches/quickbook-dev/libs/filesystem/v3/doc/release_history.html | 40
branches/quickbook-dev/libs/filesystem/v3/doc/src/source.html | 49
branches/quickbook-dev/libs/filesystem/v3/doc/src/tr2_snippets.html | 44
branches/quickbook-dev/libs/filesystem/v3/src/operations.cpp | 5
branches/quickbook-dev/libs/filesystem/v3/test/msvc10/filesystem-v3.sln | 14
branches/quickbook-dev/libs/filesystem/v3/test/operations_test.cpp | 14
branches/quickbook-dev/libs/functional/hash/doc/rationale.qbk | 2
branches/quickbook-dev/libs/fusion/doc/container.qbk | 4
branches/quickbook-dev/libs/geometry/doc/acknowledgments.qbk | 3
branches/quickbook-dev/libs/geometry/doc/compiling.qbk | 6
branches/quickbook-dev/libs/geometry/doc/concept/linestring.qbk | 12
branches/quickbook-dev/libs/geometry/doc/concept/multi_polygon.qbk | 13
branches/quickbook-dev/libs/geometry/doc/concept/polygon.qbk | 34
branches/quickbook-dev/libs/geometry/doc/concept/ring.qbk | 8
branches/quickbook-dev/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp | 1
branches/quickbook-dev/libs/geometry/doc/generated/append_status.qbk | 5
branches/quickbook-dev/libs/geometry/doc/generated/convert_status.qbk | 6
branches/quickbook-dev/libs/geometry/doc/generated/within_status.qbk | 12
branches/quickbook-dev/libs/geometry/doc/geometry.qbk | 34
branches/quickbook-dev/libs/geometry/doc/html/index.html | 61
branches/quickbook-dev/libs/geometry/doc/introduction.qbk | 33
branches/quickbook-dev/libs/geometry/doc/make_qbk.py | 3
branches/quickbook-dev/libs/geometry/doc/quickref.xml | 3
branches/quickbook-dev/libs/geometry/doc/readme.txt | 12
branches/quickbook-dev/libs/geometry/doc/reference.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/append.qbk | 6
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/area.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/buffer.qbk | 7
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/centroid.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/clear.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/comparable_distance.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/convert.qbk | 12
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/convex_hull.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/correct.qbk | 7
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference.qbk | 8
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference_inserter.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/distance.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/equals.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/expand.qbk | 5
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/intersection.qbk | 8
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/intersects.qbk | 5
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/length.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_geometries.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_interior_rings.qbk | 5
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_points.qbk | 6
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/perimeter.qbk | 8
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/reverse.qbk | 6
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/simplify.qbk | 17
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/sym_difference.qbk | 12
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/transform.qbk | 4
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/union.qbk | 8
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/unique.qbk | 6
branches/quickbook-dev/libs/geometry/doc/reference/algorithms/within.qbk | 12
branches/quickbook-dev/libs/geometry/doc/reference/geometries/point.qbk | 3
branches/quickbook-dev/libs/geometry/doc/release_notes.qbk | 46
branches/quickbook-dev/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp | 19
branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/append.cpp | 4
branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/convex_hull.cpp | 2
branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/expand.cpp | 2
branches/quickbook-dev/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp | 4
branches/quickbook-dev/libs/geometry/example/with_external_libs/contrib/gd-2.0.35/boost_geometry_readme.txt | 6
branches/quickbook-dev/libs/geometry/example/with_external_libs/soci.vsprops | 4
branches/quickbook-dev/libs/geometry/example/with_external_libs/x02_gd_example.cpp | 8
branches/quickbook-dev/libs/geometry/example/with_external_libs/x02_gd_example.vcproj | 4
branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_a_soci_example.cpp | 1
branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_a_soci_example.vcproj | 20
branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_b_soci_example.vcproj | 20
branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_c_soci_example.vcproj | 20
branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_d_soci_example.cpp | 9
branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_d_soci_example.vcproj | 20
branches/quickbook-dev/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.cpp | 6
branches/quickbook-dev/libs/geometry/example/with_external_libs/x05_shapelib_example.cpp | 2
branches/quickbook-dev/libs/geometry/example/with_external_libs/x06_qt_world_mapper.cpp | 6
branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.cpp | 6
branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.vcproj | 8
branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.vsprops | 2
branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/distance_example.cpp | 8
branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/distance_example.vcproj | 8
branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/point_ll_example.vcproj | 8
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/Jamfile.v2 | 2
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p01_example.vcproj | 8
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p01_projection_example.cpp | 14
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p02_example.vcproj | 8
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p02_projfactory_example.cpp | 16
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p03_example.vcproj | 8
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p03_projmap_example.cpp | 12
branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/projection_examples.sln | 12
branches/quickbook-dev/libs/geometry/test/algorithms/area.cpp | 22
branches/quickbook-dev/libs/geometry/test/algorithms/centroid.cpp | 30
branches/quickbook-dev/libs/geometry/test/algorithms/correct.cpp | 2
branches/quickbook-dev/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp | 35
branches/quickbook-dev/libs/geometry/test/algorithms/difference.cpp | 42
branches/quickbook-dev/libs/geometry/test/algorithms/disjoint.cpp | 61 +
branches/quickbook-dev/libs/geometry/test/algorithms/distance.cpp | 49
branches/quickbook-dev/libs/geometry/test/algorithms/intersection.cpp | 35
branches/quickbook-dev/libs/geometry/test/algorithms/intersects.cpp | 5
branches/quickbook-dev/libs/geometry/test/algorithms/length.cpp | 2
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/get_turn_info.cpp | 6
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/overlay_cases.hpp | 55 +
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.cpp | 10
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.cpp | 10
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.cpp | 15
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersects.cpp | 9
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.cpp | 15
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.cpp | 17
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/star_comb.cpp | 15
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp | 41
branches/quickbook-dev/libs/geometry/test/algorithms/overlay/traverse.cpp | 94 +
branches/quickbook-dev/libs/geometry/test/algorithms/perimeter.cpp | 2
branches/quickbook-dev/libs/geometry/test/algorithms/test_convex_hull.hpp | 3
branches/quickbook-dev/libs/geometry/test/algorithms/test_difference.hpp | 3
branches/quickbook-dev/libs/geometry/test/algorithms/union.cpp | 59 +
branches/quickbook-dev/libs/geometry/test/algorithms/within.cpp | 25
branches/quickbook-dev/libs/geometry/test/geometry_test_common.hpp | 6
branches/quickbook-dev/libs/geometry/test/io/wkt/wkt.cpp | 63
branches/quickbook-dev/libs/geometry/test/io/wkt/wkt.vcproj | 4
branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_convex_hull.cpp | 21
branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_difference.cpp | 27
branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_intersection.cpp | 1
branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_union.cpp | 5
branches/quickbook-dev/libs/geometry/test/multi/algorithms/overlay/multi_overlay_cases.hpp | 2
branches/quickbook-dev/libs/geometry/test/multi/io/wkt/wkt.cpp | 21
branches/quickbook-dev/libs/geometry/test/multi/io/wkt/wkt.vcproj | 8
branches/quickbook-dev/libs/geometry/test/strategies/Jamfile.v2 | 1
branches/quickbook-dev/libs/geometry/test/strategies/projected_point.cpp | 71
branches/quickbook-dev/libs/geometry/test/strategies/pythagoras.cpp | 44
branches/quickbook-dev/libs/geometry/test/strategies/segment_intersection_collinear.cpp | 14
branches/quickbook-dev/libs/geometry/test/strategies/strategies_tests.sln | 6
branches/quickbook-dev/libs/geometry/test/util/Jamfile.v2 | 1
branches/quickbook-dev/libs/geometry/test/util/select_most_precise.cpp | 27
branches/quickbook-dev/libs/geometry/test/util/util_tests.sln | 6
branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/Jamfile.v2 | 1
branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/buffer.sln | 6
branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/linestring_buffer.cpp | 71
branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/polygon_buffer.cpp | 247 +++-
branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/test_buffer.hpp | 173 +-
branches/quickbook-dev/libs/geometry/test_extensions/algorithms/offset.cpp | 3
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/andoyer.vcproj | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/area_ll.cpp | 2
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/area_ll.vcproj | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/cross_track.vcproj | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/distance_mixed.vcproj | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse.cpp | 2
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse.vcproj | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse_dms.vcproj | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/point_ll.vcproj | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/vincenty.vcproj | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection.cpp | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection.vcproj | 8
branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection_epsg.cpp | 4
branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection_epsg.vcproj | 8
branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projections.cpp | 14
branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projections.vcproj | 8
branches/quickbook-dev/libs/graph/doc/DijkstraVisitor.html | 2
branches/quickbook-dev/libs/graph/doc/grid_graph.html | 2
branches/quickbook-dev/libs/graph/doc/planar_face_traversal.html | 2
branches/quickbook-dev/libs/graph/doc/table_of_contents.html | 4
branches/quickbook-dev/libs/graph/doc/topology.html | 22
branches/quickbook-dev/libs/graph/example/Jamfile.v2 | 5
branches/quickbook-dev/libs/graph/src/read_graphviz_new.cpp | 1
branches/quickbook-dev/libs/graph/test/graphviz_test.cpp | 145 ++
branches/quickbook-dev/libs/heap/examples/interface.cpp | 4
branches/quickbook-dev/libs/interprocess/doc/interprocess.qbk | 42
branches/quickbook-dev/libs/iostreams/doc/classes/device.html | 2
branches/quickbook-dev/libs/iostreams/doc/classes/filter.html | 16
branches/quickbook-dev/libs/iostreams/doc/classes/grep_filter.html | 2
branches/quickbook-dev/libs/iostreams/doc/concepts/multi_character.html | 6
branches/quickbook-dev/libs/iostreams/doc/guide/modes.html | 8
branches/quickbook-dev/libs/iostreams/doc/tutorial/container_source.html | 2
branches/quickbook-dev/libs/iostreams/doc/tutorial/dictionary_filters.html | 6
branches/quickbook-dev/libs/iostreams/doc/tutorial/filter_usage.html | 2
branches/quickbook-dev/libs/iostreams/doc/tutorial/shell_comments_filters.html | 2
branches/quickbook-dev/libs/iostreams/doc/tutorial/writing_devices.html | 2
branches/quickbook-dev/libs/iostreams/doc/tutorial/writing_filters.html | 14
branches/quickbook-dev/libs/iostreams/test/newline_test.cpp | 50
branches/quickbook-dev/libs/libraries.htm | 4
branches/quickbook-dev/libs/locale/build/Jamfile.v2 | 4
branches/quickbook-dev/libs/maintainers.txt | 3
branches/quickbook-dev/libs/math/doc/sf_and_dist/constants.qbk | 742 +++++++++++++-
branches/quickbook-dev/libs/math/doc/sf_and_dist/math.qbk | 6
branches/quickbook-dev/libs/math/example/nonfinite_facet_simple.cpp | 12
branches/quickbook-dev/libs/math/test/Jamfile.v2 | 20
branches/quickbook-dev/libs/math/test/test_constants.cpp | 776 ++++++++++++++
branches/quickbook-dev/libs/math/test/test_expint.cpp | 10
branches/quickbook-dev/libs/math/test/test_nonfinite_trap.cpp | 16
branches/quickbook-dev/libs/math/test/test_signed_zero.cpp | 204 +++
branches/quickbook-dev/libs/property_map/doc/LvaluePropertyMap.html | 14
branches/quickbook-dev/libs/property_map/doc/ReadablePropertyMap.html | 6
branches/quickbook-dev/libs/proto/preprocess/wave.cfg | 10
branches/quickbook-dev/libs/python/doc/v2/make_function.html | 51
branches/quickbook-dev/libs/random/test/test_discrete_distribution.cpp | 4
branches/quickbook-dev/libs/random/test/test_piecewise_constant_distribution.cpp | 4
branches/quickbook-dev/libs/random/test/test_piecewise_linear_distribution.cpp | 4
branches/quickbook-dev/libs/random/test/test_seed_seq.cpp | 2
branches/quickbook-dev/libs/scope_exit/doc/Jamfile.v2 | 39
branches/quickbook-dev/libs/scope_exit/doc/html/index.html | 115 +
branches/quickbook-dev/libs/scope_exit/doc/scope_exit.qbk | 729 ++++++-------
branches/quickbook-dev/libs/scope_exit/index.html | 25
branches/quickbook-dev/libs/scope_exit/test/Jamfile.v2 | 77 +
branches/quickbook-dev/libs/scope_exit/test/native.cpp | 206 +--
branches/quickbook-dev/libs/scope_exit/test/native_const_error.cpp | 16
branches/quickbook-dev/libs/scope_exit/test/native_cv_error.cpp | 20
branches/quickbook-dev/libs/scope_exit/test/native_tpl.cpp | 78
branches/quickbook-dev/libs/scope_exit/test/native_tu1.cpp | 13
branches/quickbook-dev/libs/scope_exit/test/native_tu2.cpp | 13
branches/quickbook-dev/libs/scope_exit/test/native_tu_test.cpp | 24
branches/quickbook-dev/libs/scope_exit/test/tu_test.hpp | 35
branches/quickbook-dev/libs/serialization/test/test_complex.cpp | 6
branches/quickbook-dev/libs/serialization/test/test_cyclic_ptrs.cpp | 1
branches/quickbook-dev/libs/serialization/test/test_non_default_ctor.cpp | 3
branches/quickbook-dev/libs/serialization/test/test_non_intrusive.cpp | 3
branches/quickbook-dev/libs/spirit/doc/what_s_new.qbk | 8
branches/quickbook-dev/libs/spirit/example/qi/typeof.cpp | 26
branches/quickbook-dev/libs/thread/doc/mutex_concepts.qbk | 107 +
branches/quickbook-dev/libs/thread/doc/thread_ref.qbk | 14
branches/quickbook-dev/libs/thread/src/future.cpp | 2
branches/quickbook-dev/libs/thread/src/win32/thread.cpp | 23
branches/quickbook-dev/libs/thread/test/Jamfile.v2 | 76 +
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/native_handle_pass.cpp | 4
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_for_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_for_pred_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_until_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_until_pred_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_for_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_for_pred_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_until_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_until_pred_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/duration_pass.cpp | 8
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/mutex_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/time_point_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/try_to_lock_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/lock_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_for_pass.cpp | 7
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_pass.cpp | 1
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_until_pass.cpp | 8
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/unlock_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/lock_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/native_handle_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/try_lock_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/lock_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/native_handle_pass.cpp | 4
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/try_lock_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/lock_pass.cpp | 7
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/native_handle_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_for_pass.cpp | 7
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_pass.cpp | 7
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_until_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/lock_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/native_handle_pass.cpp | 5
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_for_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_until_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/test_6130.cpp | 2
branches/quickbook-dev/libs/thread/test/threads/this_thread/sleep_for/sleep_for_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/threads/this_thread/sleep_until/sleep_until_pass.cpp | 6
branches/quickbook-dev/libs/thread/test/threads/thread/constr/Frvalue_pass.cpp | 9
branches/quickbook-dev/libs/thread/test/threads/thread/destr/dtor_pass.cpp | 2
branches/quickbook-dev/libs/thread/test/threads/thread/members/detach_pass.cpp | 2
branches/quickbook-dev/libs/thread/test/threads/thread/members/swap_pass.cpp | 1
branches/quickbook-dev/libs/thread/test/threads/thread/non_members/swap_pass.cpp | 1
branches/quickbook-dev/libs/unordered/test/objects/minimal.hpp | 2
branches/quickbook-dev/libs/unordered/test/unordered/Jamfile.v2 | 2
branches/quickbook-dev/libs/unordered/test/unordered/allocator_traits.cpp | 24
branches/quickbook-dev/libs/unordered/test/unordered/assign_tests.cpp | 4
branches/quickbook-dev/libs/unordered/test/unordered/compile_tests.hpp | 1
branches/quickbook-dev/libs/unordered/test/unordered/constructor_tests.cpp | 3
branches/quickbook-dev/libs/unordered/test/unordered/insert_tests.cpp | 3
branches/quickbook-dev/libs/unordered/test/unordered/minimal_allocator.cpp | 6
branches/quickbook-dev/libs/utility/base_from_member.html | 53
branches/quickbook-dev/libs/uuid/test/test_sha1.cpp | 40
branches/quickbook-dev/status/Jamfile.v2 | 4
branches/quickbook-dev/tools/build/v2/engine/builtins.c | 30
branches/quickbook-dev/tools/build/v2/engine/class.c | 7
branches/quickbook-dev/tools/build/v2/engine/compile.c | 9
branches/quickbook-dev/tools/build/v2/engine/debug.c | 23
branches/quickbook-dev/tools/build/v2/engine/execunix.c | 208 ++-
branches/quickbook-dev/tools/build/v2/engine/filesys.c | 17
branches/quickbook-dev/tools/build/v2/engine/function.c | 44
branches/quickbook-dev/tools/build/v2/engine/hash.c | 186 +--
branches/quickbook-dev/tools/build/v2/engine/hash.h | 49
branches/quickbook-dev/tools/build/v2/engine/hcache.c | 162 +-
branches/quickbook-dev/tools/build/v2/engine/hdrmacro.c | 15
branches/quickbook-dev/tools/build/v2/engine/jam.c | 57 +
branches/quickbook-dev/tools/build/v2/engine/jam.h | 21
branches/quickbook-dev/tools/build/v2/engine/modules.c | 14
branches/quickbook-dev/tools/build/v2/engine/native.c | 25
branches/quickbook-dev/tools/build/v2/engine/pathunix.c | 37
branches/quickbook-dev/tools/build/v2/engine/rules.c | 32
branches/quickbook-dev/tools/build/v2/engine/search.c | 20
branches/quickbook-dev/tools/build/v2/engine/subst.c | 7
branches/quickbook-dev/tools/build/v2/engine/timestamp.c | 59
branches/quickbook-dev/tools/build/v2/engine/variable.c | 20
branches/quickbook-dev/tools/build/v2/tools/gcc.jam | 21
branches/quickbook-dev/tools/quickbook/doc/block.qbk | 120 +
branches/quickbook-dev/tools/quickbook/doc/change_log.qbk | 40
branches/quickbook-dev/tools/quickbook/doc/phrase.qbk | 104 +
branches/quickbook-dev/tools/quickbook/doc/quickbook.qbk | 82
branches/quickbook-dev/tools/quickbook/doc/structure.qbk | 8
branches/quickbook-dev/tools/quickbook/doc/syntax.qbk | 6
branches/quickbook-dev/tools/quickbook/src/actions.cpp | 8
branches/quickbook-dev/tools/quickbook/src/grammar_impl.hpp | 1
branches/quickbook-dev/tools/quickbook/src/main_grammar.cpp | 20
branches/quickbook-dev/tools/quickbook/test/list_test-1_5.gold | 16
branches/quickbook-dev/tools/quickbook/test/list_test-1_5.quickbook | 8
branches/quickbook-dev/tools/quickbook/test/list_test-1_6.gold | 50
branches/quickbook-dev/tools/quickbook/test/list_test-1_6.quickbook | 21
655 files changed, 15220 insertions(+), 7724 deletions(-)
Modified: branches/quickbook-dev/boost/accumulators/statistics/sum_kahan.hpp
==============================================================================
--- branches/quickbook-dev/boost/accumulators/statistics/sum_kahan.hpp (original)
+++ branches/quickbook-dev/boost/accumulators/statistics/sum_kahan.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -51,7 +51,7 @@
template<typename Args>
void
#if BOOST_ACCUMULATORS_GCC_VERSION > 40305
- __attribute__((optimize("no-associative-math")))
+ __attribute__((__optimize__("no-associative-math")))
#endif
operator ()(Args const & args)
{
Modified: branches/quickbook-dev/boost/accumulators/statistics/weighted_sum_kahan.hpp
==============================================================================
--- branches/quickbook-dev/boost/accumulators/statistics/weighted_sum_kahan.hpp (original)
+++ branches/quickbook-dev/boost/accumulators/statistics/weighted_sum_kahan.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -52,7 +52,7 @@
template<typename Args>
void
#if BOOST_ACCUMULATORS_GCC_VERSION > 40305
- __attribute__((optimize("no-associative-math")))
+ __attribute__((__optimize__("no-associative-math")))
#endif
operator ()(Args const &args)
{
Modified: branches/quickbook-dev/boost/algorithm/string/find.hpp
==============================================================================
--- branches/quickbook-dev/boost/algorithm/string/find.hpp (original)
+++ branches/quickbook-dev/boost/algorithm/string/find.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -228,13 +228,13 @@
//! Find head algorithm
/*!
Get the head of the input. Head is a prefix of the string of the
- given size. If the input is shorter then required, whole input if considered
+ given size. If the input is shorter then required, whole input is considered
to be the head.
\param Input An input string
\param N Length of the head
For N>=0, at most N characters are extracted.
- For N<0, size(Input)-|N| characters are extracted.
+ For N<0, at most size(Input)-|N| characters are extracted.
\return
An \c iterator_range delimiting the match.
Returned iterator is either \c Range1T::iterator or
@@ -258,13 +258,13 @@
//! Find tail algorithm
/*!
Get the tail of the input. Tail is a suffix of the string of the
- given size. If the input is shorter then required, whole input if considered
+ given size. If the input is shorter then required, whole input is considered
to be the tail.
\param Input An input string
\param N Length of the tail.
For N>=0, at most N characters are extracted.
- For N<0, size(Input)-|N| characters are extracted.
+ For N<0, at most size(Input)-|N| characters are extracted.
\return
An \c iterator_range delimiting the match.
Returned iterator is either \c RangeT::iterator or
Modified: branches/quickbook-dev/boost/archive/iterators/head_iterator.hpp
==============================================================================
--- branches/quickbook-dev/boost/archive/iterators/head_iterator.hpp (original)
+++ branches/quickbook-dev/boost/archive/iterators/head_iterator.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -42,8 +42,8 @@
> super_t;
typedef head_iterator<Predicate, Base> this_t;
- typedef BOOST_DEDUCED_TYPENAME super_t::value_type value_type;
- typedef BOOST_DEDUCED_TYPENAME super_t::reference reference_type;
+ typedef super_t::value_type value_type;
+ typedef super_t::reference reference_type;
reference_type dereference_impl(){
if(! m_end){
Modified: branches/quickbook-dev/boost/archive/iterators/remove_whitespace.hpp
==============================================================================
--- branches/quickbook-dev/boost/archive/iterators/remove_whitespace.hpp (original)
+++ branches/quickbook-dev/boost/archive/iterators/remove_whitespace.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,6 +24,7 @@
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/filter_iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
//#include <boost/detail/workaround.hpp>
//#if ! BOOST_WORKAROUND(BOOST_MSVC, <=1300)
@@ -140,13 +141,19 @@
template<class Base>
class remove_whitespace :
public filter_iterator<
- remove_whitespace_predicate<BOOST_DEDUCED_TYPENAME Base::value_type>,
+ remove_whitespace_predicate<
+ BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+ //BOOST_DEDUCED_TYPENAME Base::value_type
+ >,
Base
>
{
friend class boost::iterator_core_access;
typedef filter_iterator<
- remove_whitespace_predicate<BOOST_DEDUCED_TYPENAME Base::value_type>,
+ remove_whitespace_predicate<
+ BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+ //BOOST_DEDUCED_TYPENAME Base::value_type
+ >,
Base
> super_t;
public:
Modified: branches/quickbook-dev/boost/array.hpp
==============================================================================
--- branches/quickbook-dev/boost/array.hpp (original)
+++ branches/quickbook-dev/boost/array.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -118,13 +118,13 @@
// operator[]
reference operator[](size_type i)
{
- BOOST_ASSERT( i < N && "out of range" );
+ BOOST_ASSERT_MSG( i < N, "out of range" );
return elems[i];
}
const_reference operator[](size_type i) const
{
- BOOST_ASSERT( i < N && "out of range" );
+ BOOST_ASSERT_MSG( i < N, "out of range" );
return elems[i];
}
Modified: branches/quickbook-dev/boost/asio/detail/buffer_sequence_adapter.hpp
==============================================================================
--- branches/quickbook-dev/boost/asio/detail/buffer_sequence_adapter.hpp (original)
+++ branches/quickbook-dev/boost/asio/detail/buffer_sequence_adapter.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -291,7 +291,8 @@
static Buffer first(const boost::array<Elem, 2>& buffer_sequence)
{
- return Buffer(buffer_sequence[0]);
+ return Buffer(boost::asio::buffer_size(buffer_sequence[0]) != 0
+ ? buffer_sequence[0] : buffer_sequence[1]);
}
private:
@@ -344,7 +345,8 @@
static Buffer first(const std::array<Elem, 2>& buffer_sequence)
{
- return Buffer(buffer_sequence[0]);
+ return Buffer(boost::asio::buffer_size(buffer_sequence[0]) != 0
+ ? buffer_sequence[0] : buffer_sequence[1]);
}
private:
Modified: branches/quickbook-dev/boost/asio/detail/epoll_reactor.hpp
==============================================================================
--- branches/quickbook-dev/boost/asio/detail/epoll_reactor.hpp (original)
+++ branches/quickbook-dev/boost/asio/detail/epoll_reactor.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -56,8 +56,6 @@
descriptor_state* next_;
descriptor_state* prev_;
- bool op_queue_is_empty_[max_ops];
-
mutex mutex_;
epoll_reactor* reactor_;
int descriptor_;
Modified: branches/quickbook-dev/boost/asio/detail/impl/epoll_reactor.ipp
==============================================================================
--- branches/quickbook-dev/boost/asio/detail/impl/epoll_reactor.ipp (original)
+++ branches/quickbook-dev/boost/asio/detail/impl/epoll_reactor.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -156,10 +156,6 @@
descriptor_data->reactor_ = this;
descriptor_data->descriptor_ = descriptor;
descriptor_data->shutdown_ = false;
-
- for (int i = 0; i < max_ops; ++i)
- descriptor_data->op_queue_is_empty_[i] =
- descriptor_data->op_queue_[i].empty();
}
epoll_event ev = { 0, { 0 } };
@@ -185,10 +181,6 @@
descriptor_data->descriptor_ = descriptor;
descriptor_data->shutdown_ = false;
descriptor_data->op_queue_[op_type].push(op);
-
- for (int i = 0; i < max_ops; ++i)
- descriptor_data->op_queue_is_empty_[i] =
- descriptor_data->op_queue_[i].empty();
}
epoll_event ev = { 0, { 0 } };
@@ -220,22 +212,6 @@
return;
}
- bool perform_speculative = allow_speculative;
- if (perform_speculative)
- {
- if (descriptor_data->op_queue_is_empty_[op_type]
- && (op_type != read_op
- || descriptor_data->op_queue_is_empty_[except_op]))
- {
- if (op->perform())
- {
- io_service_.post_immediate_completion(op);
- return;
- }
- perform_speculative = false;
- }
- }
-
mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
if (descriptor_data->shutdown_)
@@ -244,17 +220,11 @@
return;
}
- for (int i = 0; i < max_ops; ++i)
- descriptor_data->op_queue_is_empty_[i] =
- descriptor_data->op_queue_[i].empty();
-
- if (descriptor_data->op_queue_is_empty_[op_type])
+ if (descriptor_data->op_queue_[op_type].empty())
{
if (allow_speculative)
{
- if (perform_speculative
- && (op_type != read_op
- || descriptor_data->op_queue_is_empty_[except_op]))
+ if (op_type != read_op || descriptor_data->op_queue_[except_op].empty())
{
if (op->perform())
{
@@ -275,7 +245,6 @@
}
descriptor_data->op_queue_[op_type].push(op);
- descriptor_data->op_queue_is_empty_[op_type] = false;
io_service_.work_started();
}
Modified: branches/quickbook-dev/boost/asio/detail/impl/kqueue_reactor.ipp
==============================================================================
--- branches/quickbook-dev/boost/asio/detail/impl/kqueue_reactor.ipp (original)
+++ branches/quickbook-dev/boost/asio/detail/impl/kqueue_reactor.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -133,10 +133,6 @@
descriptor_data->descriptor_ = descriptor;
descriptor_data->shutdown_ = false;
- for (int i = 0; i < max_ops; ++i)
- descriptor_data->op_queue_is_empty_[i] =
- descriptor_data->op_queue_[i].empty();
-
return 0;
}
@@ -152,10 +148,6 @@
descriptor_data->shutdown_ = false;
descriptor_data->op_queue_[op_type].push(op);
- for (int i = 0; i < max_ops; ++i)
- descriptor_data->op_queue_is_empty_[i] =
- descriptor_data->op_queue_[i].empty();
-
struct kevent event;
switch (op_type)
{
@@ -196,21 +188,6 @@
return;
}
- if (allow_speculative)
- {
- if (descriptor_data->op_queue_is_empty_[op_type]
- && (op_type != read_op
- || descriptor_data->op_queue_is_empty_[except_op]))
- {
- if (op->perform())
- {
- io_service_.post_immediate_completion(op);
- return;
- }
- allow_speculative = false;
- }
- }
-
mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
if (descriptor_data->shutdown_)
@@ -219,16 +196,12 @@
return;
}
- for (int i = 0; i < max_ops; ++i)
- descriptor_data->op_queue_is_empty_[i] =
- descriptor_data->op_queue_[i].empty();
-
- bool first = descriptor_data->op_queue_is_empty_[op_type];
+ bool first = descriptor_data->op_queue_[op_type].empty();
if (first)
{
if (allow_speculative)
{
- if (op_type != read_op || descriptor_data->op_queue_is_empty_[except_op])
+ if (op_type != read_op || descriptor_data->op_queue_[except_op].empty())
{
if (op->perform())
{
@@ -241,7 +214,6 @@
}
descriptor_data->op_queue_[op_type].push(op);
- descriptor_data->op_queue_is_empty_[op_type] = false;
io_service_.work_started();
if (first)
Modified: branches/quickbook-dev/boost/asio/detail/kqueue_reactor.hpp
==============================================================================
--- branches/quickbook-dev/boost/asio/detail/kqueue_reactor.hpp (original)
+++ branches/quickbook-dev/boost/asio/detail/kqueue_reactor.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -66,8 +66,6 @@
descriptor_state* next_;
descriptor_state* prev_;
- bool op_queue_is_empty_[max_ops];
-
mutex mutex_;
int descriptor_;
op_queue<reactor_op> op_queue_[max_ops];
Modified: branches/quickbook-dev/boost/config/compiler/borland.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/borland.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/borland.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -176,7 +176,7 @@
#define BOOST_NO_DEFAULTED_FUNCTIONS
#define BOOST_NO_DELETED_FUNCTIONS
#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NULLPTR
#define BOOST_NO_RAW_LITERALS
Modified: branches/quickbook-dev/boost/config/compiler/clang.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/clang.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/clang.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,6 +24,7 @@
#define BOOST_HAS_NRVO
// Clang supports "long long" in all compilation modes.
+#define BOOST_HAS_LONG_LONG
#if !__has_feature(cxx_auto_type)
# define BOOST_NO_AUTO_DECLARATIONS
@@ -43,7 +44,9 @@
# define BOOST_NO_DECLTYPE
#endif
-#define BOOST_NO_DECLTYPE_N3276
+#if !__has_feature(__cxx_decltype__)
+# define BOOST_NO_DECLTYPE_N3276
+#endif
#if !__has_feature(cxx_defaulted_functions)
# define BOOST_NO_DEFAULTED_FUNCTIONS
@@ -62,7 +65,7 @@
#endif
#if !__has_feature(cxx_generalized_initializers)
-# define BOOST_NO_INITIALIZER_LISTS
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#endif
#if !__has_feature(cxx_lambdas)
Modified: branches/quickbook-dev/boost/config/compiler/codegear.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/codegear.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/codegear.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -98,7 +98,6 @@
#define BOOST_NO_DELETED_FUNCTIONS
#define BOOST_NO_EXTERN_TEMPLATE
#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
-#define BOOST_NO_INITIALIZER_LISTS
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_NULLPTR
@@ -120,7 +119,7 @@
#define BOOST_HAS_MACRO_USE_FACET
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
// On non-Win32 platforms let the platform config figure this out:
#ifdef _WIN32
Modified: branches/quickbook-dev/boost/config/compiler/common_edg.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/common_edg.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/common_edg.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -64,7 +64,7 @@
#endif
#if (__EDG_VERSION__ <= 310)
// No support for initializer lists
-# define BOOST_NO_INITIALIZER_LISTS
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#endif
#if (__EDG_VERSION__ < 400)
# define BOOST_NO_VARIADIC_MACROS
Modified: branches/quickbook-dev/boost/config/compiler/digitalmars.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/digitalmars.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/digitalmars.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -71,7 +71,7 @@
#define BOOST_NO_DELETED_FUNCTIONS
#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
#define BOOST_NO_EXTERN_TEMPLATE
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_NULLPTR
Modified: branches/quickbook-dev/boost/config/compiler/gcc.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/gcc.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/gcc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -182,7 +182,7 @@
# define BOOST_NO_AUTO_MULTIDECLARATIONS
# define BOOST_NO_CHAR16_T
# define BOOST_NO_CHAR32_T
-# define BOOST_NO_INITIALIZER_LISTS
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
# define BOOST_NO_DEFAULTED_FUNCTIONS
# define BOOST_NO_DELETED_FUNCTIONS
#endif
Modified: branches/quickbook-dev/boost/config/compiler/gcc_xml.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/gcc_xml.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/gcc_xml.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -43,7 +43,7 @@
# define BOOST_NO_CHAR32_T
# define BOOST_NO_DEFAULTED_FUNCTIONS
# define BOOST_NO_DELETED_FUNCTIONS
-# define BOOST_NO_INITIALIZER_LISTS
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
# define BOOST_NO_SCOPED_ENUMS
# define BOOST_NO_SFINAE_EXPR
# define BOOST_NO_SCOPED_ENUMS
Modified: branches/quickbook-dev/boost/config/compiler/hp_acc.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/hp_acc.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/hp_acc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -104,7 +104,7 @@
#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
#define BOOST_NO_EXTERN_TEMPLATE
#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_NULLPTR
Modified: branches/quickbook-dev/boost/config/compiler/intel.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/intel.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/intel.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -240,7 +240,7 @@
//
// Although the Intel compiler is capable of supporting these, it appears not to in MSVC compatibility mode:
//
-# define BOOST_NO_INITIALIZER_LISTS
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
# define BOOST_NO_VARIADIC_TEMPLATES
# define BOOST_NO_DELETED_FUNCTIONS
# define BOOST_NO_DEFAULTED_FUNCTIONS
Modified: branches/quickbook-dev/boost/config/compiler/metrowerks.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/metrowerks.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/metrowerks.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -104,7 +104,7 @@
#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
#define BOOST_NO_EXTERN_TEMPLATE
#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_NULLPTR
Modified: branches/quickbook-dev/boost/config/compiler/mpw.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/mpw.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/mpw.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -52,7 +52,7 @@
#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
#define BOOST_NO_EXTERN_TEMPLATE
#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_NULLPTR
Modified: branches/quickbook-dev/boost/config/compiler/pathscale.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/pathscale.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/pathscale.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -45,7 +45,6 @@
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
# define BOOST_NO_NOEXCEPT
# define BOOST_NO_LAMBDAS
-# define BOOST_NO_INITIALIZER_LISTS
# define BOOST_NO_MS_INT64_NUMERIC_LIMITS
# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
@@ -60,21 +59,21 @@
# define BOOST_NO_AUTO_MULTIDECLARATIONS
# define BOOST_NO_AUTO_DECLARATIONS
# define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX
-# define BOOST_NO_0X_HDR_UNORDERED_SET
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_TYPEINDEX
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_CHRONO
#endif
Modified: branches/quickbook-dev/boost/config/compiler/pgi.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/pgi.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/pgi.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -75,7 +75,6 @@
#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
#define BOOST_NO_EXTERN_TEMPLATE
#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
-#define BOOST_NO_INITIALIZER_LISTS
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_NULLPTR
@@ -92,24 +91,24 @@
#define BOOST_NO_VARIADIC_MACROS
#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX
-#define BOOST_NO_0X_HDR_UNORDERED_SET
-#define BOOST_NO_0X_HDR_UNORDERED_MAP
-#define BOOST_NO_0X_HDR_TYPEINDEX
-#define BOOST_NO_0X_HDR_TYPE_TRAITS
-#define BOOST_NO_0X_HDR_TUPLE
-#define BOOST_NO_0X_HDR_THREAD
-#define BOOST_NO_0X_HDR_SYSTEM_ERROR
-#define BOOST_NO_0X_HDR_REGEX
-#define BOOST_NO_0X_HDR_RATIO
-#define BOOST_NO_0X_HDR_RANDOM
-#define BOOST_NO_0X_HDR_MUTEX
-#define BOOST_NO_0X_HDR_INITIALIZER_LIST
-#define BOOST_NO_0X_HDR_FUTURE
-#define BOOST_NO_0X_HDR_FORWARD_LIST
-#define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-#define BOOST_NO_0X_HDR_CODECVT
-#define BOOST_NO_0X_HDR_CHRONO
-#define BOOST_NO_0X_HDR_ARRAY
+#define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#define BOOST_NO_CXX11_HDR_TYPEINDEX
+#define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#define BOOST_NO_CXX11_HDR_TUPLE
+#define BOOST_NO_CXX11_HDR_THREAD
+#define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#define BOOST_NO_CXX11_HDR_REGEX
+#define BOOST_NO_CXX11_HDR_RATIO
+#define BOOST_NO_CXX11_HDR_RANDOM
+#define BOOST_NO_CXX11_HDR_MUTEX
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_HDR_FUTURE
+#define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#define BOOST_NO_CXX11_HDR_CODECVT
+#define BOOST_NO_CXX11_HDR_CHRONO
+#define BOOST_NO_CXX11_HDR_ARRAY
//
// version check:
Modified: branches/quickbook-dev/boost/config/compiler/sunpro_cc.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/sunpro_cc.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/sunpro_cc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -111,7 +111,7 @@
#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
#define BOOST_NO_EXTERN_TEMPLATE
#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_NULLPTR
Modified: branches/quickbook-dev/boost/config/compiler/vacpp.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/vacpp.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/vacpp.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -95,7 +95,7 @@
// not enabled separately at this time
# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
#endif
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#define BOOST_NO_LAMBDAS
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_NULLPTR
Modified: branches/quickbook-dev/boost/config/compiler/visualc.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/compiler/visualc.hpp (original)
+++ branches/quickbook-dev/boost/config/compiler/visualc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -137,7 +137,7 @@
#endif
#if _MSC_VER < 1600 || !defined(BOOST_STRICT_CONFIG) // 150X == VC++ 9.0
-# define BOOST_NO_INITIALIZER_LISTS
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#endif
#ifndef _NATIVE_WCHAR_T_DEFINED
@@ -215,7 +215,7 @@
#define BOOST_NO_DELETED_FUNCTIONS
#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
-#define BOOST_NO_INITIALIZER_LISTS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
#define BOOST_NO_NOEXCEPT
#define BOOST_NO_RAW_LITERALS
#define BOOST_NO_SCOPED_ENUMS
@@ -246,13 +246,20 @@
// Note: these are so far off, they are not really supported
# elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202
# define BOOST_COMPILER_VERSION evc4.0
-# elif _MSC_VER == 1400
+# elif _MSC_VER < 1400
+ // Note: I'm not aware of any CE compiler with version 13xx
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown EVC++ compiler version - please run the configure tests and report the results"
+# else
+# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results")
+# endif
+# elif _MSC_VER < 1500
# define BOOST_COMPILER_VERSION evc8
-# elif _MSC_VER == 1500
+# elif _MSC_VER < 1600
# define BOOST_COMPILER_VERSION evc9
-# elif _MSC_VER == 1600
+# elif _MSC_VER < 1700
# define BOOST_COMPILER_VERSION evc10
-# elif _MSC_VER == 1700
+# elif _MSC_VER < 1800
# define BOOST_COMPILER_VERSION evc11
# else
# if defined(BOOST_ASSERT_CONFIG)
@@ -267,17 +274,17 @@
# define BOOST_COMPILER_VERSION 5.0
# elif _MSC_VER < 1300
# define BOOST_COMPILER_VERSION 6.0
-# elif _MSC_VER == 1300
+# elif _MSC_VER < 1310
# define BOOST_COMPILER_VERSION 7.0
-# elif _MSC_VER == 1310
+# elif _MSC_VER < 1400
# define BOOST_COMPILER_VERSION 7.1
-# elif _MSC_VER == 1400
+# elif _MSC_VER < 1500
# define BOOST_COMPILER_VERSION 8.0
-# elif _MSC_VER == 1500
+# elif _MSC_VER < 1600
# define BOOST_COMPILER_VERSION 9.0
-# elif _MSC_VER == 1600
+# elif _MSC_VER < 1700
# define BOOST_COMPILER_VERSION 10.0
-# elif _MSC_VER == 1700
+# elif _MSC_VER < 1800
# define BOOST_COMPILER_VERSION 11.0
# else
# define BOOST_COMPILER_VERSION _MSC_VER
Modified: branches/quickbook-dev/boost/config/stdlib/dinkumware.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/dinkumware.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/dinkumware.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -94,34 +94,34 @@
// C++0x headers implemented in 520 (as shipped by Microsoft)
//
#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 520
-# define BOOST_NO_0X_HDR_ARRAY
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
#endif
-#if (!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_0X_HDR_TUPLE)
-# define BOOST_NO_0X_HDR_TUPLE
+#if (!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_CXX11_HDR_TUPLE)
+# define BOOST_NO_CXX11_HDR_TUPLE
#endif
//
// C++0x headers not yet (fully) implemented:
//
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_THREAD
#ifdef _CPPLIB_VER
# define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER
Modified: branches/quickbook-dev/boost/config/stdlib/libcomo.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/libcomo.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/libcomo.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -35,25 +35,25 @@
// C++0x headers not yet implemented
//
-# define BOOST_NO_0X_HDR_ARRAY
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
//
Modified: branches/quickbook-dev/boost/config/stdlib/libcpp.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/libcpp.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/libcpp.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,15 +20,15 @@
#define BOOST_HAS_THREADS
#ifdef _LIBCPP_HAS_NO_VARIADICS
-# define BOOST_NO_0X_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TUPLE
#endif
//
// These appear to be unusable/incomplete so far:
//
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
// libc++ uses a non-standard messages_base
#define BOOST_NO_STD_MESSAGES
Modified: branches/quickbook-dev/boost/config/stdlib/libstdcpp3.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/libstdcpp3.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/libstdcpp3.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -105,51 +105,51 @@
// C++0x headers in GCC 4.3.0 and later
//
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define BOOST_NO_0X_HDR_ARRAY
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_TUPLE
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
#endif
// C++0x headers in GCC 4.4.0 and later
//
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
#else
# define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
# define BOOST_HAS_TR1_COMPLEX_OVERLOADS
#endif
-#if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1)) && (!defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE) || !defined(BOOST_NO_0X_HDR_MUTEX))
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_MUTEX
+#if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1)) && (!defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) || !defined(BOOST_NO_CXX11_HDR_MUTEX))
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_MUTEX
#endif
// C++0x features in GCC 4.5.0 and later
//
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_RANDOM
#endif
// C++0x features in GCC 4.5.0 and later
//
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
#endif
// C++0x headers not yet (fully!) implemented
//
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
-# define BOOST_NO_0X_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_CODECVT
// --- end ---
Modified: branches/quickbook-dev/boost/config/stdlib/modena.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/modena.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/modena.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,25 +24,25 @@
// C++0x headers not yet implemented
//
-# define BOOST_NO_0X_HDR_ARRAY
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
#define BOOST_STDLIB "Modena C++ standard library"
Modified: branches/quickbook-dev/boost/config/stdlib/msl.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/msl.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/msl.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -48,25 +48,25 @@
// C++0x headers not yet implemented
//
-# define BOOST_NO_0X_HDR_ARRAY
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__)
Modified: branches/quickbook-dev/boost/config/stdlib/roguewave.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/roguewave.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/roguewave.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -155,29 +155,29 @@
#endif
#if _RWSTD_VER < 0x05000000
-# define BOOST_NO_0X_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_ARRAY
#endif
// type_traits header is incomplete:
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
//
// C++0x headers not yet implemented
//
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
Modified: branches/quickbook-dev/boost/config/stdlib/sgi.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/sgi.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/sgi.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -118,25 +118,25 @@
// C++0x headers not yet implemented
//
-# define BOOST_NO_0X_HDR_ARRAY
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
#define BOOST_STDLIB "SGI standard library"
Modified: branches/quickbook-dev/boost/config/stdlib/stlport.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/stlport.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/stlport.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -212,25 +212,25 @@
// C++0x headers not yet implemented
//
-# define BOOST_NO_0X_HDR_ARRAY
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT)
Modified: branches/quickbook-dev/boost/config/stdlib/vacpp.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/stdlib/vacpp.hpp (original)
+++ branches/quickbook-dev/boost/config/stdlib/vacpp.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,25 +24,25 @@
// C++0x headers not yet implemented
//
-# define BOOST_NO_0X_HDR_ARRAY
-# define BOOST_NO_0X_HDR_CHRONO
-# define BOOST_NO_0X_HDR_CODECVT
-# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
-# define BOOST_NO_0X_HDR_FORWARD_LIST
-# define BOOST_NO_0X_HDR_FUTURE
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-# define BOOST_NO_0X_HDR_MUTEX
-# define BOOST_NO_0X_HDR_RANDOM
-# define BOOST_NO_0X_HDR_RATIO
-# define BOOST_NO_0X_HDR_REGEX
-# define BOOST_NO_0X_HDR_SYSTEM_ERROR
-# define BOOST_NO_0X_HDR_THREAD
-# define BOOST_NO_0X_HDR_TUPLE
-# define BOOST_NO_0X_HDR_TYPE_TRAITS
-# define BOOST_NO_0X_HDR_TYPEINDEX
+# define BOOST_NO_CXX11_HDR_ARRAY
+# define BOOST_NO_CXX11_HDR_CHRONO
+# define BOOST_NO_CXX11_HDR_CODECVT
+# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+# define BOOST_NO_CXX11_HDR_FORWARD_LIST
+# define BOOST_NO_CXX11_HDR_FUTURE
+# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# define BOOST_NO_CXX11_HDR_MUTEX
+# define BOOST_NO_CXX11_HDR_RANDOM
+# define BOOST_NO_CXX11_HDR_RATIO
+# define BOOST_NO_CXX11_HDR_REGEX
+# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+# define BOOST_NO_CXX11_HDR_THREAD
+# define BOOST_NO_CXX11_HDR_TUPLE
+# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# define BOOST_NO_CXX11_HDR_TYPEINDEX
# define BOOST_NO_STD_UNORDERED // deprecated; see following
-# define BOOST_NO_0X_HDR_UNORDERED_MAP
-# define BOOST_NO_0X_HDR_UNORDERED_SET
+# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+# define BOOST_NO_CXX11_HDR_UNORDERED_SET
# define BOOST_NO_NUMERIC_LIMITS_LOWEST
#define BOOST_STDLIB "Visual Age default standard library"
Modified: branches/quickbook-dev/boost/config/suffix.hpp
==============================================================================
--- branches/quickbook-dev/boost/config/suffix.hpp (original)
+++ branches/quickbook-dev/boost/config/suffix.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -335,17 +335,6 @@
#endif
//
-// Set BOOST_NO_INITIALIZER_LISTS if there is no library support.
-//
-
-#if defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS)
-# define BOOST_NO_INITIALIZER_LISTS
-#endif
-#if defined(BOOST_NO_INITIALIZER_LISTS) && !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST)
-# define BOOST_NO_0X_HDR_INITIALIZER_LIST
-#endif
-
-//
// Set BOOST_HAS_RVALUE_REFS when BOOST_NO_RVALUE_REFERENCES is not defined
//
#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS)
@@ -700,5 +689,97 @@
# endif
#endif
+
+// -------------------- Deprecated macros for 1.50 ---------------------------
+// These will go away in a future release
+
+// Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST instead of BOOST_NO_INITIALIZER_LISTS
+#if defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS)
+# define BOOST_NO_INITIALIZER_LISTS
+#endif
+
+// Use BOOST_NO_CXX11_HDR_ARRAY instead of BOOST_NO_0X_HDR_ARRAY
+#if defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_BOOST_NO_0X_HDR_ARRAY)
+# define BOOST_NO_0X_HDR_ARRAY
+#endif
+// Use BOOST_NO_CXX11_HDR_CHRONO instead of BOOST_NO_0X_HDR_CHRONO
+#if defined(BOOST_NO_CXX11_HDR_CHRONO) && !defined(BOOST_NO_0X_HDR_CHRONO)
+# define BOOST_NO_0X_HDR_CHRONO
+#endif
+// Use BOOST_NO_CXX11_HDR_CODECVT instead of BOOST_NO_0X_HDR_CODECVT
+#if defined(BOOST_NO_CXX11_HDR_CODECVT) && !defined(BOOST_NO_0X_HDR_CODECVT)
+# define BOOST_NO_0X_HDR_CODECVT
+#endif
+// Use BOOST_NO_CXX11_HDR_CONDITION_VARIABLE instead of BOOST_NO_0X_HDR_CONDITION_VARIABLE
+#if defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) && !defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE)
+# define BOOST_NO_0X_HDR_CONDITION_VARIABLE
+#endif
+// Use BOOST_NO_CXX11_HDR_FORWARD_LIST instead of BOOST_NO_0X_HDR_FORWARD_LIST
+#if defined(BOOST_NO_CXX11_HDR_FORWARD_LIST) && !defined(BOOST_NO_0X_HDR_FORWARD_LIST)
+# define BOOST_NO_0X_HDR_FORWARD_LIST
+#endif
+// Use BOOST_NO_CXX11_HDR_FUTURE instead of BOOST_NO_0X_HDR_FUTURE
+#if defined(BOOST_NO_CXX11_HDR_FUTURE) && !defined(BOOST_NO_0X_HDR_FUTURE)
+# define BOOST_NO_0X_HDR_FUTURE
+#endif
+
+// Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+// instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS
+#ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
+# define BOOST_NO_0X_HDR_INITIALIZER_LIST
+# endif
+# ifndef BOOST_NO_INITIALIZER_LISTS
+# define BOOST_NO_INITIALIZER_LISTS
+# endif
+#endif
+
+// Use BOOST_NO_CXX11_HDR_MUTEX instead of BOOST_NO_0X_HDR_MUTEX
+#if defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX)
+# define BOOST_NO_0X_HDR_MUTEX
+#endif
+// Use BOOST_NO_CXX11_HDR_RANDOM instead of BOOST_NO_0X_HDR_RANDOM
+#if defined(BOOST_NO_CXX11_HDR_RANDOM) && !defined(BOOST_NO_0X_HDR_RANDOM)
+# define BOOST_NO_0X_HDR_RANDOM
+#endif
+// Use BOOST_NO_CXX11_HDR_RATIO instead of BOOST_NO_0X_HDR_RATIO
+#if defined(BOOST_NO_CXX11_HDR_RATIO) && !defined(BOOST_NO_0X_HDR_RATIO)
+# define BOOST_NO_0X_HDR_RATIO
+#endif
+// Use BOOST_NO_CXX11_HDR_REGEX instead of BOOST_NO_0X_HDR_REGEX
+#if defined(BOOST_NO_CXX11_HDR_REGEX) && !defined(BOOST_NO_0X_HDR_REGEX)
+# define BOOST_NO_0X_HDR_REGEX
+#endif
+// Use BOOST_NO_CXX11_HDR_SYSTEM_ERROR instead of BOOST_NO_0X_HDR_SYSTEM_ERROR
+#if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_0X_HDR_SYSTEM_ERROR)
+# define BOOST_NO_0X_HDR_SYSTEM_ERROR
+#endif
+// Use BOOST_NO_CXX11_HDR_THREAD instead of BOOST_NO_0X_HDR_THREAD
+#if defined(BOOST_NO_CXX11_HDR_THREAD) && !defined(BOOST_NO_0X_HDR_THREAD)
+# define BOOST_NO_0X_HDR_THREAD
#endif
+// Use BOOST_NO_CXX11_HDR_TUPLE instead of BOOST_NO_0X_HDR_TUPLE
+#if defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_0X_HDR_TUPLE)
+# define BOOST_NO_0X_HDR_TUPLE
+#endif
+// Use BOOST_NO_CXX11_HDR_TYPE_TRAITS instead of BOOST_NO_0X_HDR_TYPE_TRAITS
+#if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) && !defined(BOOST_NO_0X_HDR_TYPE_TRAITS)
+# define BOOST_NO_0X_HDR_TYPE_TRAITS
+#endif
+// Use BOOST_NO_CXX11_HDR_TYPEINDEX instead of BOOST_NO_0X_HDR_TYPEINDEX
+#if defined(BOOST_NO_CXX11_HDR_TYPEINDEX) && !defined(BOOST_NO_0X_HDR_TYPEINDEX)
+# define BOOST_NO_0X_HDR_TYPEINDEX
+#endif
+// Use BOOST_NO_CXX11_HDR_UNORDERED_MAP instead of BOOST_NO_0X_HDR_UNORDERED_MAP
+#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) && !defined(BOOST_NO_0X_HDR_UNORDERED_MAP)
+# define BOOST_NO_0X_HDR_UNORDERED_MAP
+#endif
+// Use BOOST_NO_CXX11_HDR_UNORDERED_SET instead of BOOST_NO_0X_HDR_UNORDERED_SET
+#if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) && !defined(BOOST_NO_0X_HDR_UNORDERED_SET)
+# define BOOST_NO_0X_HDR_UNORDERED_SET
+#endif
+
+// ------------------ End of deprecated macros for 1.50 ---------------------------
+
+#endif
Modified: branches/quickbook-dev/boost/container/deque.hpp
==============================================================================
--- branches/quickbook-dev/boost/container/deque.hpp (original)
+++ branches/quickbook-dev/boost/container/deque.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -715,7 +715,7 @@
const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
{ return const_reverse_iterator(this->members_.m_start); }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a reference to the nth element
//! from the beginning of the container.
@@ -726,7 +726,7 @@
reference operator[](size_type n) BOOST_CONTAINER_NOEXCEPT
{ return this->members_.m_start[difference_type(n)]; }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a const reference to the nth element
//! from the beginning of the container.
@@ -737,7 +737,7 @@
const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT
{ return this->members_.m_start[difference_type(n)]; }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a reference to the nth element
//! from the beginning of the container.
@@ -748,7 +748,7 @@
reference at(size_type n)
{ this->priv_range_check(n); return (*this)[n]; }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a const reference to the nth element
//! from the beginning of the container.
Modified: branches/quickbook-dev/boost/container/stable_vector.hpp
==============================================================================
--- branches/quickbook-dev/boost/container/stable_vector.hpp (original)
+++ branches/quickbook-dev/boost/container/stable_vector.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -927,7 +927,7 @@
}
}
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a reference to the nth element
//! from the beginning of the container.
@@ -937,7 +937,7 @@
//! <b>Complexity</b>: Constant.
reference operator[](size_type n){return value(impl[n]);}
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a const reference to the nth element
//! from the beginning of the container.
@@ -947,7 +947,7 @@
//! <b>Complexity</b>: Constant.
const_reference operator[](size_type n)const{return value(impl[n]);}
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a reference to the nth element
//! from the beginning of the container.
@@ -962,12 +962,12 @@
return operator[](n);
}
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a const reference to the nth element
//! from the beginning of the container.
//!
- //! <b>Throws</b>: Nothing.
+ //! <b>Throws</b>: std::range_error if n >= size()
//!
//! <b>Complexity</b>: Constant.
const_reference at(size_type n)const
Modified: branches/quickbook-dev/boost/container/string.hpp
==============================================================================
--- branches/quickbook-dev/boost/container/string.hpp (original)
+++ branches/quickbook-dev/boost/container/string.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1021,7 +1021,7 @@
bool empty() const
{ return !this->priv_size(); }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a reference to the nth element
//! from the beginning of the container.
@@ -1032,7 +1032,7 @@
reference operator[](size_type n)
{ return *(this->priv_addr() + n); }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a const reference to the nth element
//! from the beginning of the container.
@@ -1043,7 +1043,7 @@
const_reference operator[](size_type n) const
{ return *(this->priv_addr() + n); }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a reference to the nth element
//! from the beginning of the container.
@@ -1057,7 +1057,7 @@
return *(this->priv_addr() + n);
}
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a const reference to the nth element
//! from the beginning of the container.
@@ -2045,7 +2045,7 @@
//!
//! <b>Returns</b>: basic_string(*this, pos, n1).compare(basic_string(s, n2)).
int compare(size_type pos1, size_type n1,
- const CharT* s, size_type n2 = npos) const
+ const CharT* s, size_type n2) const
{
if (pos1 > size())
this->throw_out_of_range();
Modified: branches/quickbook-dev/boost/container/vector.hpp
==============================================================================
--- branches/quickbook-dev/boost/container/vector.hpp (original)
+++ branches/quickbook-dev/boost/container/vector.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -758,7 +758,7 @@
bool empty() const BOOST_CONTAINER_NOEXCEPT
{ return !this->members_.m_size; }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a reference to the nth element
//! from the beginning of the container.
@@ -769,7 +769,7 @@
reference operator[](size_type n)
{ return this->members_.m_start[n]; }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a const reference to the nth element
//! from the beginning of the container.
@@ -780,7 +780,7 @@
const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT
{ return this->members_.m_start[n]; }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a reference to the nth element
//! from the beginning of the container.
@@ -791,7 +791,7 @@
reference at(size_type n)
{ this->priv_check_range(n); return this->members_.m_start[n]; }
- //! <b>Requires</b>: size() < n.
+ //! <b>Requires</b>: size() > n.
//!
//! <b>Effects</b>: Returns a const reference to the nth element
//! from the beginning of the container.
Modified: branches/quickbook-dev/boost/detail/container_fwd.hpp
==============================================================================
--- branches/quickbook-dev/boost/detail/container_fwd.hpp (original)
+++ branches/quickbook-dev/boost/detail/container_fwd.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -21,10 +21,17 @@
// Define BOOST_DETAIL_NO_CONTAINER_FWD if you don't want this header to //
// forward declare standard containers. //
// //
+// BOOST_DETAIL_CONTAINER_FWD to make it foward declare containers even if it //
+// normally doesn't. //
+// //
+// BOOST_DETAIL_NO_CONTAINER_FWD overrides BOOST_DETAIL_CONTAINER_FWD. //
+// //
////////////////////////////////////////////////////////////////////////////////
#if !defined(BOOST_DETAIL_NO_CONTAINER_FWD)
-# if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+# if defined(BOOST_DETAIL_CONTAINER_FWD)
+ // Force forward declarations.
+# elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
// STLport
# define BOOST_DETAIL_NO_CONTAINER_FWD
# elif defined(__LIBCOMO__)
@@ -76,11 +83,6 @@
# endif
#endif
-// BOOST_DETAIL_TEST_* macros are for testing only
-// and shouldn't be relied upon. But you can use
-// BOOST_DETAIL_NO_CONTAINER_FWD to prevent forward
-// declaration of containers.
-
#if !defined(BOOST_DETAIL_TEST_CONFIG_ONLY)
#if defined(BOOST_DETAIL_NO_CONTAINER_FWD) && \
@@ -118,6 +120,7 @@
template <class charT, class traits, class Allocator> class basic_string;
#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+
template <class charT> struct string_char_traits;
#else
template <class charT> struct char_traits;
Modified: branches/quickbook-dev/boost/exception/exception.hpp
==============================================================================
--- branches/quickbook-dev/boost/exception/exception.hpp (original)
+++ branches/quickbook-dev/boost/exception/exception.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -430,7 +430,7 @@
class
clone_impl:
public T,
- public clone_base
+ public virtual clone_base
{
struct clone_tag { };
clone_impl( clone_impl const & x, clone_tag ):
Modified: branches/quickbook-dev/boost/filesystem/v3/operations.hpp
==============================================================================
--- branches/quickbook-dev/boost/filesystem/v3/operations.hpp (original)
+++ branches/quickbook-dev/boost/filesystem/v3/operations.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -765,24 +765,43 @@
{
if ((m_options & symlink_option::_detail_no_push) == symlink_option::_detail_no_push)
m_options &= ~symlink_option::_detail_no_push;
- // patch for following else if contributed by Daniel Aarno, fixing #5652 for cyclic symlinks
- else if (((m_options & symlink_option::recurse) == symlink_option::recurse
- || !is_symlink(m_stack.top()->symlink_status()))
- && is_directory(m_stack.top()->status()))
+
+ else
{
- if (ec == 0)
- m_stack.push(directory_iterator(m_stack.top()->path()));
- else
- {
- m_stack.push(directory_iterator(m_stack.top()->path(), *ec));
- if (*ec) return;
- }
- if (m_stack.top() != directory_iterator())
- {
- ++m_level;
+ // Logic for following predicate was contributed by Daniel Aarno to handle cyclic
+ // symlinks correctly and efficiently, fixing ticket #5652.
+ // if (((m_options & symlink_option::recurse) == symlink_option::recurse
+ // || !is_symlink(m_stack.top()->symlink_status()))
+ // && is_directory(m_stack.top()->status())) ...
+ // The predicate code has since been rewritten to pass error_code arguments,
+ // per ticket #5653.
+ bool or_pred = (m_options & symlink_option::recurse) == symlink_option::recurse
+ || (ec == 0 ? !is_symlink(m_stack.top()->symlink_status())
+ : !is_symlink(m_stack.top()->symlink_status(*ec)));
+ if (ec != 0 && *ec)
+ return;
+ bool and_pred = or_pred && (ec == 0 ? is_directory(m_stack.top()->status())
+ : is_directory(m_stack.top()->status(*ec)));
+ if (ec != 0 && *ec)
return;
+
+ if (and_pred)
+ {
+ if (ec == 0)
+ m_stack.push(directory_iterator(m_stack.top()->path()));
+ else
+ {
+ m_stack.push(directory_iterator(m_stack.top()->path(), *ec));
+ if (*ec)
+ return;
+ }
+ if (m_stack.top() != directory_iterator())
+ {
+ ++m_level;
+ return;
+ }
+ m_stack.pop();
}
- m_stack.pop();
}
while (!m_stack.empty() && ++m_stack.top() == directory_iterator())
@@ -859,6 +878,8 @@
BOOST_ASSERT_MSG(m_imp.get(),
"increment() on end recursive_directory_iterator");
m_imp->increment(&ec);
+ if (m_imp->m_stack.empty())
+ m_imp.reset(); // done, so make end iterator
return *this;
}
Modified: branches/quickbook-dev/boost/geometry/algorithms/area.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/area.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/area.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -29,7 +29,7 @@
#include <boost/geometry/algorithms/detail/calculate_null.hpp>
#include <boost/geometry/algorithms/detail/calculate_sum.hpp>
-#include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
+// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
#include <boost/geometry/strategies/area.hpp>
#include <boost/geometry/strategies/default_area_result.hpp>
@@ -241,7 +241,7 @@
point_type
>::type strategy_type;
- detail::throw_on_empty_input(geometry);
+ // detail::throw_on_empty_input(geometry);
return dispatch::area
<
@@ -279,7 +279,7 @@
{
concept::check<Geometry const>();
- detail::throw_on_empty_input(geometry);
+ // detail::throw_on_empty_input(geometry);
return dispatch::area
<
Modified: branches/quickbook-dev/boost/geometry/algorithms/correct.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/correct.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/correct.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -147,7 +147,8 @@
}
// Check area
Predicate predicate;
- coordinate_type const zero = 0;
+ typedef typename default_area_result<Ring>::type area_result_type;
+ area_result_type const zero = area_result_type();
if (predicate(ring_area_type::apply(r, strategy_type()), zero))
{
std::reverse(boost::begin(r), boost::end(r));
@@ -161,14 +162,14 @@
struct correct_polygon
{
typedef typename ring_type<Polygon>::type ring_type;
- typedef typename coordinate_type<Polygon>::type coordinate_type;
+ typedef typename default_area_result<Polygon>::type area_result_type;
static inline void apply(Polygon& poly)
{
correct_ring
<
ring_type,
- std::less<coordinate_type>
+ std::less<area_result_type>
>::apply(exterior_ring(poly));
typename interior_return_type<Polygon>::type rings
@@ -178,7 +179,7 @@
correct_ring
<
ring_type,
- std::greater<coordinate_type>
+ std::greater<area_result_type>
>::apply(*it);
}
}
@@ -193,48 +194,42 @@
namespace dispatch
{
-template <typename Tag, typename Geometry>
-struct correct
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
+struct correct: not_implemented<Tag>
+{};
template <typename Point>
-struct correct<point_tag, Point>
+struct correct<Point, point_tag>
: detail::correct::correct_nop<Point>
{};
template <typename LineString>
-struct correct<linestring_tag, LineString>
+struct correct<LineString, linestring_tag>
: detail::correct::correct_nop<LineString>
{};
template <typename Segment>
-struct correct<segment_tag, Segment>
+struct correct<Segment, segment_tag>
: detail::correct::correct_nop<Segment>
{};
template <typename Box>
-struct correct<box_tag, Box>
+struct correct<Box, box_tag>
: detail::correct::correct_box<Box>
{};
template <typename Ring>
-struct correct<ring_tag, Ring>
+struct correct<Ring, ring_tag>
: detail::correct::correct_ring
<
Ring,
- std::less<typename coordinate_type<Ring>::type>
+ std::less<typename default_area_result<Ring>::type>
>
{};
template <typename Polygon>
-struct correct<polygon_tag, Polygon>
+struct correct<Polygon, polygon_tag>
: detail::correct::correct_polygon<Polygon>
{};
@@ -260,7 +255,7 @@
{
concept::check<Geometry const>();
- dispatch::correct<typename tag<Geometry>::type, Geometry>::apply(geometry);
+ dispatch::correct<Geometry>::apply(geometry);
}
Modified: branches/quickbook-dev/boost/geometry/algorithms/covered_by.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/covered_by.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/covered_by.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,10 +17,9 @@
#include <cstddef>
-
+#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/algorithms/within.hpp>
-
#include <boost/geometry/strategies/cartesian/point_in_box.hpp>
#include <boost/geometry/strategies/cartesian/box_in_box.hpp>
@@ -33,34 +32,29 @@
template
<
- typename Tag1,
- typename Tag2,
typename Geometry1,
typename Geometry2,
- typename Strategy
+ typename Tag1 = typename tag<Geometry1>::type,
+ typename Tag2 = typename tag<Geometry2>::type
>
-struct covered_by
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry1, Geometry2>)
- );
-};
+struct covered_by: not_implemented<Tag1, Tag2>
+{};
-template <typename Point, typename Box, typename Strategy>
-struct covered_by<point_tag, box_tag, Point, Box, Strategy>
+template <typename Point, typename Box>
+struct covered_by<Point, Box, point_tag, box_tag>
{
+ template <typename Strategy>
static inline bool apply(Point const& point, Box const& box, Strategy const& strategy)
{
return strategy.apply(point, box);
}
};
-template <typename Box1, typename Box2, typename Strategy>
-struct covered_by<box_tag, box_tag, Box1, Box2, Strategy>
+template <typename Box1, typename Box2>
+struct covered_by<Box1, Box2, box_tag, box_tag>
{
+ template <typename Strategy>
static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy)
{
assert_dimension_equal<Box1, Box2>();
@@ -70,10 +64,11 @@
-template <typename Point, typename Ring, typename Strategy>
-struct covered_by<point_tag, ring_tag, Point, Ring, Strategy>
+template <typename Point, typename Ring>
+struct covered_by<Point, Ring, point_tag, ring_tag>
{
- static inline bool apply(Point const& point, Ring const& ring, Strategy const& )
+ template <typename Strategy>
+ static inline bool apply(Point const& point, Ring const& ring, Strategy const& strategy)
{
return detail::within::point_in_ring
<
@@ -82,13 +77,14 @@
order_as_direction<geometry::point_order<Ring>::value>::value,
geometry::closure<Ring>::value,
Strategy
- >::apply(point, ring) >= 0;
+ >::apply(point, ring, strategy) >= 0;
}
};
-template <typename Point, typename Polygon, typename Strategy>
-struct covered_by<point_tag, polygon_tag, Point, Polygon, Strategy>
+template <typename Point, typename Polygon>
+struct covered_by<Point, Polygon, point_tag, polygon_tag>
{
+ template <typename Strategy>
static inline bool apply(Point const& point, Polygon const& polygon, Strategy const& strategy)
{
return detail::within::point_in_polygon
@@ -112,14 +108,14 @@
\details \details_check12{covered_by, is inside or on border}.
\tparam Geometry1 \tparam_geometry
\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param geometry1 geometry which might be covered_by the second geometry
-\param geometry2 geometry which might contain the first geometry
-\return true if geometry1 is completely contained covered_by geometry2,
+\param geometry1 \param_geometry which might be inside or on the border of the second geometry
+\param geometry2 \param_geometry which might cover the first geometry
+\return true if geometry1 is inside of or on the border of geometry2,
else false
\note The default strategy is used for covered_by detection
+\qbk{[include reference/algorithms/covered_by.qbk]}
+
*/
template<typename Geometry1, typename Geometry2>
inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2)
@@ -151,11 +147,8 @@
return dispatch::covered_by
<
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
Geometry1,
- Geometry2,
- strategy_type
+ Geometry2
>::apply(geometry1, geometry2, strategy_type());
}
@@ -165,15 +158,14 @@
\details \details_check12{covered_by, is inside or on border}, \brief_strategy. \details_strategy_reasons
\tparam Geometry1 \tparam_geometry
\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param geometry1 \param_geometry geometry which might be covered_by the second geometry
-\param geometry2 \param_geometry which might contain the first geometry
+\param geometry1 \param_geometry which might be inside or on the border of the second geometry
+\param geometry2 \param_geometry which might cover the first geometry
\param strategy strategy to be used
\return true if geometry1 is inside of or on the border of geometry2,
else false
\qbk{distinguish,with strategy}
+\qbk{[include reference/algorithms/covered_by.qbk]}
*/
template<typename Geometry1, typename Geometry2, typename Strategy>
@@ -193,11 +185,8 @@
return dispatch::covered_by
<
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
Geometry1,
- Geometry2,
- Strategy
+ Geometry2
>::apply(geometry1, geometry2, strategy);
}
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/add_rings.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/add_rings.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/add_rings.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -9,6 +9,8 @@
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/algorithms/area.hpp>
#include <boost/geometry/algorithms/detail/overlay/convert_ring.hpp>
#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
@@ -73,6 +75,21 @@
OutputIterator out)
{
typedef typename SelectionMap::const_iterator iterator;
+ typedef typename SelectionMap::mapped_type property_type;
+ typedef typename property_type::area_type area_type;
+
+ area_type const zero = 0;
+ std::size_t const min_num_points = core_detail::closure::minimum_ring_size
+ <
+ geometry::closure
+ <
+ typename boost::range_value
+ <
+ RingCollection const
+ >::type
+ >::value
+ >::value;
+
for (iterator it = boost::begin(map);
it != boost::end(map);
@@ -99,7 +116,16 @@
*child_it, mit->second.reversed, true);
}
}
- *out++ = result;
+
+ // Only add rings if they satisfy minimal requirements.
+ // This cannot be done earlier (during traversal), not
+ // everything is figured out yet (sum of positive/negative rings)
+ // TODO: individual rings can still contain less than 3 points.
+ if (geometry::num_points(result) >= min_num_points
+ && math::larger(geometry::area(result), zero))
+ {
+ *out++ = result;
+ }
}
}
return out;
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/assign_parents.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/assign_parents.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/assign_parents.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -130,7 +130,7 @@
return;
}
- if (outer.real_area > 0)
+ if (math::larger(outer.real_area, 0))
{
if (inner.real_area < 0 || m_check_for_orientation)
{
@@ -317,13 +317,14 @@
>
inline void assign_parents(Geometry const& geometry,
RingCollection const& collection,
- RingMap& ring_map)
+ RingMap& ring_map,
+ bool check_for_orientation)
{
// Call it with an empty geometry
// (ring_map should be empty for source_id==1)
Geometry empty;
- assign_parents(geometry, empty, collection, ring_map, true);
+ assign_parents(geometry, empty, collection, ring_map, check_for_orientation);
}
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -30,8 +30,20 @@
*/
struct calculate_distance_policy
{
- template <typename Point1, typename Point2, typename Info>
- static inline void apply(Info& info, Point1 const& p1, Point2 const& p2)
+ static bool const include_no_turn = false;
+ static bool const include_degenerate = false;
+ static bool const include_opposite = false;
+
+ template
+ <
+ 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&)
{
info.operations[0].enriched.distance
= geometry::comparable_distance(info.point, p1);
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,6 +28,7 @@
case method_touch_interior : return 'm';
case method_collinear : return 'c';
case method_equal : return 'e';
+ case method_error : return '!';
default : return '?';
}
}
@@ -42,6 +43,7 @@
case operation_intersection : return 'i';
case operation_blocked : return 'x';
case operation_continue : return 'c';
+ case operation_opposite : return 'o';
default : return '?';
}
}
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/follow.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/follow.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/follow.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -14,11 +14,12 @@
#include <boost/range.hpp>
#include <boost/mpl/assert.hpp>
+#include <boost/geometry/algorithms/detail/point_on_border.hpp>
#include <boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp>
#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/algorithms/covered_by.hpp>
namespace boost { namespace geometry
@@ -50,6 +51,29 @@
typename LineString,
typename Polygon
>
+static inline bool last_covered_by(Turn const& turn, Operation const& op,
+ LineString const& linestring, Polygon const& polygon)
+{
+ // Check any point between the this one and the first IP
+ typedef typename geometry::point_type<LineString>::type point_type;
+ point_type point_in_between;
+ detail::point_on_border::midpoint_helper
+ <
+ point_type,
+ 0, dimension<point_type>::value
+ >::apply(point_in_between, linestring[op.seg_id.segment_index], turn.point);
+
+ return geometry::covered_by(point_in_between, polygon);
+}
+
+
+template
+<
+ typename Turn,
+ typename Operation,
+ typename LineString,
+ typename Polygon
+>
static inline bool is_leaving(Turn const& turn, Operation const& op,
bool entered, bool first,
LineString const& linestring, Polygon const& polygon)
@@ -58,7 +82,7 @@
{
return entered
|| turn.method == method_crosses
- || (first && geometry::within(linestring[0], polygon))
+ || (first && last_covered_by(turn, op, linestring, polygon))
;
}
return false;
@@ -79,27 +103,31 @@
if (turn.method == method_crosses)
{
// The normal case, this is completely covered with entering/leaving
- // so stay out of this time consuming "within"
+ // so stay out of this time consuming "covered_by"
return false;
}
if (is_entering(turn, op))
{
- return entered || (first && geometry::within(linestring[0], polygon));
+ return entered || (first && last_covered_by(turn, op, linestring, polygon));
}
return false;
}
-template <typename Turn>
-static inline bool was_entered(Turn const& turn, bool first)
+template
+<
+ typename Turn,
+ typename Operation,
+ typename Linestring,
+ typename Polygon
+>
+static inline bool was_entered(Turn const& turn, Operation const& op, bool first,
+ Linestring const& linestring, Polygon const& polygon)
{
if (first && (turn.method == method_collinear || turn.method == method_equal))
{
- // If it is the very first point, and either equal or collinear, there is only one
- // IP generated (on purpose). So consider this as having entered.
- // Maybe it will leave immediately after that (u/i) but that is checked later.
- return true;
+ return last_covered_by(turn, op, linestring, polygon);
}
return false;
}
@@ -154,11 +182,11 @@
// and add the output piece
geometry::copy_segments<false>(linestring, segment_id, index, current_piece);
detail::overlay::append_no_duplicates(current_piece, point);
- if (! current_piece.empty())
+ if (current_piece.size() > 1)
{
*out++ = current_piece;
- current_piece.clear();
}
+ current_piece.clear();
}
static inline bool is_entered(bool entered)
@@ -169,7 +197,7 @@
template <typename Point, typename Geometry>
static inline bool included(Point const& point, Geometry const& geometry)
{
- return geometry::within(point, geometry);
+ return geometry::covered_by(point, geometry);
}
};
@@ -249,14 +277,46 @@
template<typename Turn>
struct sort_on_segment
{
+ // In case of turn point at the same location, we want to have continue/blocked LAST
+ // because that should be followed (intersection) or skipped (difference).
+ inline int operation_order(Turn const& turn) const
+ {
+ operation_type const& operation = turn.operations[0].operation;
+ switch(operation)
+ {
+ case operation_opposite : return 0;
+ case operation_none : return 0;
+ case operation_union : return 1;
+ case operation_intersection : return 2;
+ case operation_blocked : return 3;
+ case operation_continue : return 4;
+ }
+ return -1;
+ };
+
+ inline bool use_operation(Turn const& left, Turn const& right) const
+ {
+ // If they are the same, OK.
+ return operation_order(left) < operation_order(right);
+ }
+
+ inline bool use_distance(Turn const& left, Turn const& right) const
+ {
+ return geometry::math::equals(left.operations[0].enriched.distance, right.operations[0].enriched.distance)
+ ? use_operation(left, right)
+ : left.operations[0].enriched.distance < right.operations[0].enriched.distance
+ ;
+ }
+
inline bool operator()(Turn const& left, Turn const& right) const
{
segment_identifier const& sl = left.operations[0].seg_id;
segment_identifier const& sr = right.operations[0].seg_id;
return sl == sr
- ? left.operations[0].enriched.distance < right.operations[0].enriched.distance
- : sl < sr;
+ ? use_distance(left, right)
+ : sl < sr
+ ;
}
};
@@ -299,7 +359,7 @@
{
turn_operation_iterator_type iit = boost::begin(it->operations);
- if (following::was_entered(*it, first))
+ if (following::was_entered(*it, *iit, first, linestring, polygon))
{
debug_traverse(*it, *iit, "-> Was entered");
entered = true;
@@ -336,7 +396,7 @@
}
// Output the last one, if applicable
- if (! current_piece.empty())
+ if (current_piece.size() > 1)
{
*out++ = current_piece;
}
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,28 @@
namespace boost { namespace geometry
{
+#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
+class turn_info_exception : public geometry::exception
+{
+ std::string message;
+public:
+
+ // NOTE: "char" will be replaced by enum in future version
+ inline turn_info_exception(char const method)
+ {
+ message = "Boost.Geometry Turn exception: ";
+ message += method;
+ }
+
+ virtual ~turn_info_exception() throw()
+ {}
+
+ virtual char const* what() const throw()
+ {
+ return message.c_str();
+ }
+};
+#endif
#ifndef DOXYGEN_NO_DETAIL
namespace detail { namespace overlay
@@ -256,7 +278,7 @@
if (side_pk_q1 == 0)
{
ti.operations[0].operation = operation_blocked;
- // Q turns right -> union (both independant),
+ // Q turns right -> union (both independent),
// Q turns left -> intersection
ti.operations[1].operation = block_q ? operation_blocked
: q_turns_left ? operation_intersection
@@ -444,6 +466,45 @@
template
<
typename TurnInfo,
+ typename AssignPolicy
+>
+struct equal_opposite : public base_turn_handler
+{
+ template
+ <
+ typename Point1,
+ typename Point2,
+ typename OutputIterator,
+ typename IntersectionInfo,
+ typename DirInfo
+ >
+ static inline void apply(Point1 const& pi, Point2 const& qi,
+ /* 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;
+ }
+ }
+ }
+};
+
+template
+<
+ typename TurnInfo,
typename SideStrategy
>
struct collinear : public base_turn_handler
@@ -472,6 +533,13 @@
- if P arrives and P turns right: intersection for P
- if Q arrives and Q turns left: union for Q (=intersection for P)
- if Q arrives and Q turns right: intersection for Q (=union for P)
+
+ ROBUSTNESS: p and q are collinear, so you would expect
+ that side qk//p1 == pk//q1. But that is not always the case
+ in near-epsilon ranges. Then decision logic is different.
+ If p arrives, q is further, so the angle qk//p1 is (normally)
+ more precise than pk//p1
+
*/
template
<
@@ -494,10 +562,13 @@
// Should not be 0, this is checked before
BOOST_ASSERT(arrival != 0);
+ int const side_p = SideStrategy::apply(pi, pj, pk);
+ int const side_q = SideStrategy::apply(qi, qj, qk);
+
// If p arrives, use p, else use q
int const side_p_or_q = arrival == 1
- ? SideStrategy::apply(pi, pj, pk)
- : SideStrategy::apply(qi, qj, qk)
+ ? side_p
+ : side_q
;
// See comments above,
@@ -513,8 +584,46 @@
}
else
{
- ui_else_iu(product == 1, ti);
+ int const side_pk = SideStrategy::apply(qi, qj, pk);
+ int const side_qk = SideStrategy::apply(pi, pj, qk);
+
+ if (side_pk != side_p || side_qk != side_q)
+ {
+ //std::cout << "ROBUSTNESS -> Collinear "
+ // << " arr: " << arrival
+ // << " prod: " << product
+ // << " dir: " << side_p << " " << side_q
+ // << " rev: " << side_pk << " " << side_qk
+ // << std::endl;
+
+ handle_robustness(ti, arrival, product,
+ side_p, side_q, side_pk, side_qk);
+ }
+ else
+ {
+ // The normal case
+ ui_else_iu(product == 1, ti);
+ }
+ }
+ }
+
+ static inline void handle_robustness(TurnInfo& ti,
+ int arrival, int product,
+ int side_p, int side_q,
+ int side_pk, int side_qk)
+ {
+ bool take_ui = product == 1;
+ if (product == arrival)
+ {
+ if ((product == 1 && side_p == 1 && side_pk != 1)
+ || (product == -1 && side_q == 1 && side_qk != 1))
+ {
+ //std::cout << "ROBUSTNESS: -> Reverse" << std::endl;
+ take_ui = ! take_ui;
+ }
}
+
+ ui_else_iu(take_ui, ti);
}
};
@@ -561,6 +670,7 @@
TurnInfo& tp, IntersectionInfo const& intersection_info)
{
int const side_rk_r = SideStrategy::apply(ri, rj, rk);
+ operation_type blocked = operation_blocked;
switch(side_rk_r)
{
@@ -574,15 +684,24 @@
break;
case 0 :
// No turn on opposite collinear: block, do not traverse
- // But this "xx" is ignored here, it is useless to include
- // two operation blocked, so the whole point does not need
+ // But this "xx" is usually ignored, it is useless to include
+ // two operations blocked, so the whole point does not need
// to be generated.
// So return false to indicate nothing is to be done.
- return false;
+ 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
- tp.operations[1 - Index].operation = operation_blocked;
+ tp.operations[1 - Index].operation = blocked;
// If P arrives within Q, set info on P (which is done above, index=0),
// this turn-info belongs to the second intersection point, index=1
@@ -611,32 +730,45 @@
IntersectionInfo const& intersection_info,
DirInfo const& dir_info)
{
- /*
- std::cout << "arrivals: "
- << dir_info.arrival[0]
- << "/" << dir_info.arrival[1]
- << std::endl;
- */
-
TurnInfo tp = tp_model;
tp.method = method_collinear;
- // If P arrives within Q, there is a turn dependant on P
+ // 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))
{
- AssignPolicy::apply(tp, pi, qi);
+ AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info);
*out++ = tp;
}
- // If Q arrives within P, there is a turn dependant on Q
+ // 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))
{
- AssignPolicy::apply(tp, pi, qi);
+ 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;
+ }
+ }
+ }
+
}
};
@@ -677,6 +809,18 @@
}
};
+template<typename TurnInfo>
+struct only_convert
+{
+ template<typename IntersectionInfo>
+ static inline void apply(TurnInfo& ti, IntersectionInfo const& intersection_info)
+ {
+ ti.method = method_collinear;
+ geometry::convert(intersection_info.intersections[0], ti.point);
+ ti.operations[0].operation = operation_continue;
+ ti.operations[1].operation = operation_continue;
+ }
+};
/*!
\brief Policy doing nothing
@@ -686,8 +830,19 @@
*/
struct assign_null_policy
{
- template <typename Point1, typename Point2, typename Info>
- static inline void apply(Info& , Point1 const& , Point2 const& )
+ static bool const include_no_turn = false;
+ static bool const include_degenerate = false;
+ static bool const include_opposite = false;
+
+ template
+ <
+ typename Info,
+ typename Point1,
+ typename Point2,
+ typename IntersectionInfo,
+ typename DirInfo
+ >
+ static inline void apply(Info& , Point1 const& , Point2 const&, IntersectionInfo const&, DirInfo const&)
{}
};
@@ -703,14 +858,16 @@
\tparam TurnInfo type of class getting intersection and turn info
\tparam AssignPolicy policy to assign extra info,
e.g. to calculate distance from segment's first points
- to intersection points
+ to intersection points.
+ It also defines if a certain class of points
+ (degenerate, non-turns) should be included.
*/
template
<
typename Point1,
typename Point2,
typename TurnInfo,
- typename AssignPolicy = assign_null_policy
+ typename AssignPolicy
>
struct get_turn_info
{
@@ -724,8 +881,9 @@
typedef typename si::segment_intersection_strategy_type strategy;
-
-
+ // Intersect pi-pj with qi-qj
+ // The points pk and qk are only used do determine more information
+ // about the turn.
template <typename OutputIterator>
static inline OutputIterator apply(
Point1 const& pi, Point1 const& pj, Point1 const& pk,
@@ -749,10 +907,20 @@
// Select method and apply
switch(method)
{
- case 'a' :
- case 'f' :
- case 's' :
- case 'd' :
+ case 'a' : // collinear, "at"
+ case 'f' : // collinear, "from"
+ case 's' : // starts from the middle
+ if (AssignPolicy::include_no_turn
+ && result.template get<0>().count > 0)
+ {
+ only_convert<TurnInfo>::apply(tp,
+ result.template get<0>());
+ AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ *out++ = tp;
+ }
+ break;
+
+ case 'd' : // disjoint: never do anything
break;
case 'm' :
@@ -775,7 +943,7 @@
policy::template apply<1>(qi, qj, qk, pi, pj, pk,
tp, result.template get<0>(), result.template get<1>());
}
- AssignPolicy::apply(tp, pi, qi);
+ AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
*out++ = tp;
}
break;
@@ -789,7 +957,7 @@
policy::apply(pi, pj, pk, qi, qj, qk,
tp, result.template get<0>(), result.template get<1>());
- AssignPolicy::apply(tp, pi, qi);
+ AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
*out++ = tp;
}
break;
@@ -804,7 +972,7 @@
policy::apply(pi, pj, pk, qi, qj, qk,
tp, result.template get<0>(), result.template get<1>());
- AssignPolicy::apply(tp, pi, qi);
+ AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
*out++ = tp;
}
break;
@@ -822,10 +990,18 @@
policy::apply(pi, pj, pk, qi, qj, qk,
tp, result.template get<0>(), result.template get<1>());
- AssignPolicy::apply(tp, pi, qi);
+ AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
*out++ = tp;
}
- // If they ARE opposite, don't do anything.
+ else
+ {
+ equal_opposite
+ <
+ TurnInfo,
+ AssignPolicy
+ >::apply(pi, qi,
+ tp, out, result.template get<0>(), result.template get<1>());
+ }
}
break;
case 'c' :
@@ -857,7 +1033,7 @@
tp, result.template get<0>(), result.template get<1>());
}
- AssignPolicy::apply(tp, pi, qi);
+ AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
*out++ = tp;
}
else
@@ -873,13 +1049,23 @@
}
break;
case '0' :
- // degenerate points
- break;
+ {
+ // degenerate points
+ if (AssignPolicy::include_degenerate)
+ {
+ only_convert<TurnInfo>::apply(tp, result.template get<0>());
+ AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>());
+ *out++ = tp;
+ }
+ }
+ break;
default :
-#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS
- std::cout << "get_turns, nyi: " << method << std::endl;
+ {
+#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
+ throw turn_info_exception(method);
#endif
- break;
+ }
+ break;
}
return out;
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,7 @@
#include <boost/geometry/core/reverse_dispatch.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/detail/point_on_border.hpp>
#include <boost/geometry/algorithms/detail/overlay/clip_linestring.hpp>
#include <boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp>
#include <boost/geometry/algorithms/detail/overlay/overlay.hpp>
@@ -171,7 +172,17 @@
// No intersection points, it is either completely
// inside (interior + borders)
// or completely outside
- if (follower::included(*boost::begin(linestring), areal))
+
+ // Use border point (on a segment) to check this
+ // (because turn points might skip some cases)
+ point_type border_point;
+ if (! geometry::point_on_border(border_point, linestring, true))
+ {
+ return out;
+ }
+
+
+ if (follower::included(border_point, areal))
{
LineStringOut copy;
geometry::convert(linestring, copy);
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/overlay.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/overlay.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/overlay.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -145,11 +145,21 @@
OutputIterator out,
Strategy const& )
{
- if (geometry::num_points(geometry1) == 0 && geometry::num_points(geometry2) == 0)
+ if (geometry::num_points(geometry1) == 0
+ && geometry::num_points(geometry2) == 0)
{
return out;
}
+ if (geometry::num_points(geometry1) == 0
+ || geometry::num_points(geometry2) == 0)
+ {
+ return return_if_one_input_is_empty
+ <
+ GeometryOut, Direction, ReverseOut
+ >(geometry1, geometry2, out);
+ }
+
typedef typename geometry::point_type<GeometryOut>::type point_type;
typedef detail::overlay::traversal_turn_info<point_type> turn_info;
typedef std::deque<turn_info> container_type;
@@ -159,15 +169,6 @@
typename geometry::ring_type<GeometryOut>::type
> ring_container_type;
- if (geometry::num_points(geometry1) == 0
- || geometry::num_points(geometry2) == 0)
- {
- return return_if_one_input_is_empty
- <
- GeometryOut, Direction, ReverseOut
- >(geometry1, geometry2, out);
- }
-
container_type turn_points;
#ifdef BOOST_GEOMETRY_TIME_OVERLAY
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/turn_info.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/turn_info.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/overlay/turn_info.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,7 +28,8 @@
operation_union,
operation_intersection,
operation_blocked,
- operation_continue
+ operation_continue,
+ operation_opposite
};
@@ -114,6 +115,10 @@
{
return both(operation_blocked);
}
+ inline bool opposite() const
+ {
+ return both(operation_opposite);
+ }
inline bool any_blocked() const
{
return this->operations[0].operation == operation_blocked
Modified: branches/quickbook-dev/boost/geometry/algorithms/detail/throw_on_empty_input.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/detail/throw_on_empty_input.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/detail/throw_on_empty_input.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -14,6 +14,16 @@
#include <boost/geometry/core/exception.hpp>
#include <boost/geometry/algorithms/num_points.hpp>
+// BSG 2012-02-06: we use this currently only for distance.
+// For other scalar results area,length,perimeter it is commented on purpose.
+// Reason is that for distance there is no other choice. distance of two
+// empty geometries (or one empty) should NOT return any value.
+// But for area it is no problem to be 0.
+// Suppose: area(intersection(a,b)). We (probably) don't want a throw there...
+
+// So decided that at least for Boost 1.49 this is commented for
+// scalar results, except distance.
+
namespace boost { namespace geometry
{
Modified: branches/quickbook-dev/boost/geometry/algorithms/disjoint.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/disjoint.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/disjoint.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -44,6 +44,28 @@
namespace detail { namespace disjoint
{
+struct assign_disjoint_policy
+{
+ // We want to include all points:
+ static bool const include_no_turn = true;
+ static bool const include_degenerate = true;
+ static bool const include_opposite = true;
+
+ // We don't assign extra info:
+ template
+ <
+ typename Info,
+ typename Point1,
+ typename Point2,
+ typename IntersectionInfo,
+ typename DirInfo
+ >
+ static inline void apply(Info& , Point1 const& , Point2 const&,
+ IntersectionInfo const&, DirInfo const&)
+ {}
+};
+
+
template <typename Geometry1, typename Geometry2>
struct disjoint_linear
{
@@ -54,12 +76,14 @@
typedef overlay::turn_info<point_type> turn_info;
std::deque<turn_info> turns;
- // Get (and stop on) any intersection
+ // Specify two policies:
+ // 1) Stop at any intersection
+ // 2) In assignment, include also degenerate points (which are normally skipped)
disjoint_interrupt_policy policy;
geometry::get_turns
<
- false, false,
- overlay::assign_null_policy
+ false, false,
+ assign_disjoint_policy
>(geometry1, geometry2, turns, policy);
if (policy.has_intersections)
{
@@ -213,7 +237,9 @@
\param geometry1 \param_geometry
\param geometry2 \param_geometry
\return \return_check2{are disjoint}
- */
+
+\qbk{[include reference/algorithms/disjoint.qbk]}
+*/
template <typename Geometry1, typename Geometry2>
inline bool disjoint(Geometry1 const& geometry1,
Geometry2 const& geometry2)
Modified: branches/quickbook-dev/boost/geometry/algorithms/distance.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/distance.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/distance.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -130,7 +130,7 @@
// check if other segments are closer
for (++prev, ++it; it != boost::end(view); ++prev, ++it)
{
- return_type const ds = ps_strategy.apply(point, *prev, *it);
+ return_type const ds = eps_strategy.apply(point, *prev, *it);
if (geometry::math::equals(ds, zero))
{
return ds;
Modified: branches/quickbook-dev/boost/geometry/algorithms/envelope.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/envelope.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/envelope.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -216,14 +216,7 @@
\param geometry \param_geometry
\param mbr \param_box \param_set{envelope}
-\par Example:
-Example showing envelope calculation, using point_ll latlong points
-\dontinclude doxygen_1.cpp
-\skip example_envelope_polygon
-\line {
-\until }
-
-
+\qbk{[include reference/algorithms/envelope.qbk]}
\qbk{
[heading Example]
[envelope] [envelope_output]
@@ -253,6 +246,7 @@
\param geometry \param_geometry
\return \return_calc{envelope}
+\qbk{[include reference/algorithms/envelope.qbk]}
\qbk{
[heading Example]
[return_envelope] [return_envelope_output]
Modified: branches/quickbook-dev/boost/geometry/algorithms/for_each.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/for_each.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/for_each.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -250,6 +250,7 @@
\tparam Functor \tparam_functor
\qbk{distinguish,const version}
+\qbk{[include reference/algorithms/for_each_point.qbk]}
\qbk{[heading Example]}
\qbk{[for_each_point_const] [for_each_point_const_output]}
*/
@@ -277,6 +278,7 @@
\tparam Geometry \tparam_geometry
\tparam Functor \tparam_functor
+\qbk{[include reference/algorithms/for_each_point.qbk]}
\qbk{[heading Example]}
\qbk{[for_each_point] [for_each_point_output]}
*/
@@ -305,6 +307,7 @@
\tparam Functor \tparam_functor
\qbk{distinguish,const version}
+\qbk{[include reference/algorithms/for_each_segment.qbk]}
\qbk{[heading Example]}
\qbk{[for_each_segment_const] [for_each_segment_const_output]}
*/
@@ -331,6 +334,8 @@
\param f \par_for_each_f{segment}
\tparam Geometry \tparam_geometry
\tparam Functor \tparam_functor
+
+\qbk{[include reference/algorithms/for_each_segment.qbk]}
*/
template<typename Geometry, typename Functor>
inline Functor for_each_segment(Geometry& geometry, Functor f)
Modified: branches/quickbook-dev/boost/geometry/algorithms/intersects.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/intersects.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/intersects.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -35,6 +35,7 @@
\return \return_check{is self-intersecting}
\qbk{distinguish,one geometry}
+\qbk{[def __one_parameter__]}
\qbk{[include reference/algorithms/intersects.qbk]}
*/
template <typename Geometry>
Modified: branches/quickbook-dev/boost/geometry/algorithms/length.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/length.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/length.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,7 +28,7 @@
#include <boost/geometry/algorithms/assign.hpp>
#include <boost/geometry/algorithms/detail/calculate_null.hpp>
-#include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
+// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
#include <boost/geometry/views/closeable_view.hpp>
#include <boost/geometry/strategies/distance.hpp>
#include <boost/geometry/strategies/default_length_result.hpp>
@@ -152,7 +152,7 @@
{
concept::check<Geometry const>();
- detail::throw_on_empty_input(geometry);
+ // detail::throw_on_empty_input(geometry);
typedef typename strategy::distance::services::default_strategy
<
@@ -188,7 +188,7 @@
{
concept::check<Geometry const>();
- detail::throw_on_empty_input(geometry);
+ // detail::throw_on_empty_input(geometry);
return dispatch::length
<
Modified: branches/quickbook-dev/boost/geometry/algorithms/overlaps.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/overlaps.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/overlaps.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -179,7 +179,9 @@
\brief \brief_check2{overlap}
\ingroup overlaps
\return \return_check2{overlap}
- */
+
+\qbk{[include reference/algorithms/overlaps.qbk]}
+*/
template <typename Geometry1, typename Geometry2>
inline bool overlaps(Geometry1 const& geometry1, Geometry2 const& geometry2)
{
Modified: branches/quickbook-dev/boost/geometry/algorithms/perimeter.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/perimeter.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/perimeter.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,7 +22,7 @@
#include <boost/geometry/algorithms/length.hpp>
#include <boost/geometry/algorithms/detail/calculate_null.hpp>
#include <boost/geometry/algorithms/detail/calculate_sum.hpp>
-#include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
+// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
namespace boost { namespace geometry
@@ -98,7 +98,7 @@
point_tag, point_type
>::type strategy_type;
- detail::throw_on_empty_input(geometry);
+ // detail::throw_on_empty_input(geometry);
return dispatch::perimeter
<
@@ -128,7 +128,7 @@
{
concept::check<Geometry const>();
- detail::throw_on_empty_input(geometry);
+ // detail::throw_on_empty_input(geometry);
return dispatch::perimeter
<
Modified: branches/quickbook-dev/boost/geometry/algorithms/within.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/algorithms/within.hpp (original)
+++ branches/quickbook-dev/boost/geometry/algorithms/within.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,11 +17,11 @@
#include <cstddef>
-#include <boost/mpl/assert.hpp>
#include <boost/range.hpp>
#include <boost/typeof/typeof.hpp>
#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/not_implemented.hpp>
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/core/closure.hpp>
@@ -165,34 +165,29 @@
template
<
- typename Tag1,
- typename Tag2,
typename Geometry1,
typename Geometry2,
- typename Strategy
+ typename Tag1 = typename tag<Geometry1>::type,
+ typename Tag2 = typename tag<Geometry2>::type
>
-struct within
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry1, Geometry2>)
- );
-};
+struct within: not_implemented<Tag1, Tag2>
+{};
-template <typename Point, typename Box, typename Strategy>
-struct within<point_tag, box_tag, Point, Box, Strategy>
+template <typename Point, typename Box>
+struct within<Point, Box, point_tag, box_tag>
{
+ template <typename Strategy>
static inline bool apply(Point const& point, Box const& box, Strategy const& strategy)
{
return strategy.apply(point, box);
}
};
-template <typename Box1, typename Box2, typename Strategy>
-struct within<box_tag, box_tag, Box1, Box2, Strategy>
+template <typename Box1, typename Box2>
+struct within<Box1, Box2, box_tag, box_tag>
{
+ template <typename Strategy>
static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy)
{
assert_dimension_equal<Box1, Box2>();
@@ -202,9 +197,10 @@
-template <typename Point, typename Ring, typename Strategy>
-struct within<point_tag, ring_tag, Point, Ring, Strategy>
+template <typename Point, typename Ring>
+struct within<Point, Ring, point_tag, ring_tag>
{
+ template <typename Strategy>
static inline bool apply(Point const& point, Ring const& ring, Strategy const& strategy)
{
return detail::within::point_in_ring
@@ -218,9 +214,10 @@
}
};
-template <typename Point, typename Polygon, typename Strategy>
-struct within<point_tag, polygon_tag, Point, Polygon, Strategy>
+template <typename Point, typename Polygon>
+struct within<Point, Polygon, point_tag, polygon_tag>
{
+ template <typename Strategy>
static inline bool apply(Point const& point, Polygon const& polygon, Strategy const& strategy)
{
return detail::within::point_in_polygon
@@ -244,10 +241,8 @@
\details \details_check12{within, is completely inside}.
\tparam Geometry1 \tparam_geometry
\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param geometry1 geometry which might be within the second geometry
-\param geometry2 geometry which might contain the first geometry
+\param geometry1 \param_geometry which might be within the second geometry
+\param geometry2 \param_geometry which might contain the first geometry
\return true if geometry1 is completely contained within geometry2,
else false
\note The default strategy is used for within detection
@@ -291,11 +286,8 @@
return dispatch::within
<
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
Geometry1,
- Geometry2,
- strategy_type
+ Geometry2
>::apply(geometry1, geometry2, strategy_type());
}
@@ -305,9 +297,7 @@
\details \details_check12{within, is completely inside}, \brief_strategy. \details_strategy_reasons
\tparam Geometry1 \tparam_geometry
\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param geometry1 \param_geometry geometry which might be within the second geometry
+\param geometry1 \param_geometry which might be within the second geometry
\param geometry2 \param_geometry which might contain the first geometry
\param strategy strategy to be used
\return true if geometry1 is completely contained within geometry2,
@@ -344,11 +334,8 @@
return dispatch::within
<
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
Geometry1,
- Geometry2,
- Strategy
+ Geometry2
>::apply(geometry1, geometry2, strategy);
}
Deleted: branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/intersecting_inserter.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/intersecting_inserter.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,93 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_INTERSECTING_INSERTER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_INTERSECTING_INSERTER_HPP
-
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-template
-<
- typename Collection // usually collection of rings
->
-struct intersecting_inserter
-{
- typedef typename boost::range_value<Collection>::type item_type;
- typedef typename geometry::ring_type<item_type>::type ring_type;
- typedef typename geometry::point_type<ring_type>::type point_type;
-
- intersecting_inserter(Collection& c)
- : m_collection(c)
- , m_index(0)
- {}
-
- inline void start_ring()
- {
- // clear current ring
- m_ring.clear();
- m_index = 0;
- }
-
- inline ring_type& get_ring()
- {
- return m_ring;
- }
-
-
- inline void insert(point_type const& point)
- {
- m_ring.push_back(point);
- }
-
-
- inline void close_and_insert_ring()
- {
- if (boost::size(m_ring) > 0)
- {
- // Close the ring
- point_type p = m_ring.front();
- insert(p);
-
- item_type poly;
- poly.outer() = m_ring;
- m_collection.push_back(poly);
- }
- }
-
-
-private :
- Collection& m_collection;
- ring_type m_ring;
- std::size_t m_index;
-};
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_INTERSECTING_INSERTER_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/line_line_intersection.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/line_line_intersection.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/line_line_intersection.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -52,7 +52,7 @@
{
set<0>(p, x2);
set<1>(p, y2);
- return true;
+ return false;
}
coordinate_type d1 = det(x1, y1, x2, y2);
Deleted: branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/linestring_buffer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/linestring_buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,223 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINESTRING_BUFFER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINESTRING_BUFFER_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/extensions/strategies/buffer_side.hpp>
-
-#include <boost/geometry/extensions/algorithms/buffer/line_line_intersection.hpp>
-#include <boost/geometry/extensions/algorithms/buffer/intersecting_inserter.hpp>
-
-#include <boost/geometry/geometries/segment.hpp>
-
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-template
-<
- typename Linestring,
- typename Polygon,
- typename DistanceStrategy,
- typename JoinStrategy
->
-struct linestring_buffer
-{
- typedef typename coordinate_type<Polygon>::type coordinate_type;
- typedef typename point_type<Polygon>::type output_point_type;
- typedef model::referring_segment<output_point_type const> segment_type;
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- typedef typename ring_type<Polygon>::type ring_type;
-#endif
-
- template
- <
- typename Inserter,
- typename Iterator
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , typename Mapper
-#endif
- >
- static inline void iterate(Inserter& inserter,
- Iterator begin, Iterator end,
- buffer_side_selector side,
- DistanceStrategy const& distance,
- JoinStrategy const& join
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , Mapper& mapper
-#endif
- )
- {
- output_point_type previous_p1, previous_p2;
- output_point_type first_p1, first_p2;
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- int index = 0;
-#endif
-
- bool first = true;
-
- Iterator it = begin;
- for (Iterator prev = it++; it != end; ++it)
- {
- if (! detail::equals::equals_point_point(*prev, *it))
- {
- bool skip = false;
-
- // Simulate a vector d (dx,dy)
- coordinate_type dx = get<0>(*it) - get<0>(*prev);
- coordinate_type dy = get<1>(*it) - get<1>(*prev);
-
- // For normalization [0,1] (=dot product d.d, sqrt)
- coordinate_type length = sqrt(dx * dx + dy * dy);
-
- // Because coordinates are not equal, length should not be zero
- BOOST_ASSERT((! geometry::math::equals(length, 0)));
-
- // Generate the normalized perpendicular p, to the left (ccw)
- coordinate_type px = -dy / length;
- coordinate_type py = dx / length;
-
- output_point_type p1, p2;
-
- coordinate_type d = distance.apply(*prev, *it, side);
-
- set<0>(p2, get<0>(*it) + px * d);
- set<1>(p2, get<1>(*it) + py * d);
-
- set<0>(p1, get<0>(*prev) + px * d);
- set<1>(p1, get<1>(*prev) + py * d);
-
- {
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- ring_type block;
- block.push_back(*prev);
- block.push_back(*it);
- block.push_back(p2);
- block.push_back(p1);
- block.push_back(*prev);
-
- mapper.map(block, "opacity:0.4;fill:rgb(0,255,0);stroke:rgb(0,0,0);stroke-width:1");
-#endif
- }
-
- if (! first)
- {
- output_point_type p;
- segment_type s1(p1, p2);
- segment_type s2(previous_p1, previous_p2);
- if (line_line_intersection<output_point_type, segment_type>::apply(s1, s2, p))
- {
- join.apply(p, *prev, previous_p2, p1,
- distance.apply(*prev, *it, side),
- inserter.get_ring());
- {
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- mapper.map(p, "fill:rgb(0,0,0);", 3);
-
- std::ostringstream out;
- out << index++;
- mapper.text(p, out.str(), "fill:rgb(0,0,0);font-family='Arial';", 5, 5);
-#endif
- }
- }
- else
- {
- skip = false;
- }
- }
- else
- {
- first = false;
- first_p1 = p1;
- first_p2 = p2;
-
- inserter.insert(p1);
- }
-
- if (! skip)
- {
- previous_p1 = p1;
- previous_p2 = p2;
- prev = it;
- }
- }
- }
-
- // Last one
- inserter.insert(previous_p2);
- }
-
-
- template
- <
- typename Inserter
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , typename Mapper
-#endif
- >
- static inline void apply(Linestring const& linestring, Inserter& inserter,
- DistanceStrategy const& distance,
- JoinStrategy const& join
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , Mapper& mapper
-#endif
- )
- {
- typedef typename boost::range_iterator
- <
- Linestring const
- >::type iterator_type;
-
- inserter.start_ring();
-
- iterate(inserter, boost::begin(linestring), boost::end(linestring),
- buffer_side_left,
- distance, join
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , mapper
-#endif
- );
-
- iterate(inserter, boost::rbegin(linestring), boost::rend(linestring),
- buffer_side_right, distance, join
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , mapper
-#endif
- );
-
- inserter.close_and_insert_ring();
- }
-};
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINESTRING_BUFFER_HPP
Deleted: branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/polygon_buffer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/polygon_buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,231 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_POLYGON_BUFFER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_POLYGON_BUFFER_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/range.hpp>
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-
-#include <boost/geometry/extensions/strategies/buffer_side.hpp>
-#include <boost/geometry/extensions/algorithms/buffer/line_line_intersection.hpp>
-
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-template <typename RingInput, typename RingOutput, typename JoinStrategy>
-struct ring_buffer
-{
- typedef typename point_type<RingOutput>::type output_point_type;
- typedef typename coordinate_type<output_point_type>::type coordinate_type;
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- template <typename Mapper>
-#endif
- static inline void apply(RingInput const& ring, RingOutput& buffered,
- coordinate_type distance,
- JoinStrategy const& join_strategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , Mapper& mapper
-#endif
- )
- {
- typedef model::referring_segment<output_point_type const> segment_type;
- typedef typename boost::range_iterator
- <
- RingInput const
- >::type iterator_type;
-
- output_point_type previous_p1, previous_p2;
- output_point_type first_p1, first_p2;
- bool first = true;
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- int index = 0;
-#endif
-
- iterator_type it = boost::begin(ring);
- for (iterator_type prev = it++;
- it != boost::end(ring); ++it)
- {
- if (! detail::equals::equals_point_point(*prev, *it))
- {
- bool skip = false;
-
- // Generate a block along (int most cases to the left of) the segment
-
- // Simulate a vector d (dx,dy)
- coordinate_type dx = get<0>(*it) - get<0>(*prev);
- coordinate_type dy = get<1>(*it) - get<1>(*prev);
-
-
- // For normalization [0,1] (=dot product d.d, sqrt)
- coordinate_type length = sqrt(dx * dx + dy * dy);
-
- // Because coordinates are not equal, length should not be zero
- BOOST_ASSERT((! geometry::math::equals(length, 0)));
-
- // Generate the normalized perpendicular p, to the left (ccw)
- coordinate_type px = -dy / length;
- coordinate_type py = dx / length;
-
- output_point_type p1, p2;
-
- coordinate_type d = distance;
-
- set<0>(p2, get<0>(*it) + px * d);
- set<1>(p2, get<1>(*it) + py * d);
-
- set<0>(p1, get<0>(*prev) + px * d);
- set<1>(p1, get<1>(*prev) + py * d);
-
- {
- RingOutput block;
- block.push_back(*prev);
- block.push_back(*it);
- block.push_back(p2);
- block.push_back(p1);
- block.push_back(*prev);
-
- #ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- mapper.map(block, "opacity:0.4;fill:rgb(255,128,0);stroke:rgb(0,0,0);stroke-width:1");
- #endif
- }
-
- if (! first)
- {
- output_point_type p;
- segment_type s1(p1, p2);
- segment_type s2(previous_p1, previous_p2);
- if (line_line_intersection<output_point_type, segment_type>::apply(s1, s2, p))
- {
- join_strategy.apply(p, *prev, previous_p2, p1, distance, buffered);
- {
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- mapper.map(p, "fill:rgb(0,0,0);", 3);
-
- std::ostringstream out;
- out << index++;
- mapper.text(p, out.str(), "fill:rgb(0,0,0);font-family='Arial';", 5, 5);
-#endif
- }
- }
- else
- {
- skip = false;
- }
- }
- else
- {
- first = false;
- first_p1 = p1;
- first_p2 = p2;
- }
-
- if (! skip)
- {
- previous_p1 = p1;
- previous_p2 = p2;
- prev = it;
- }
- }
- }
-
- // Last one
- {
- output_point_type p;
- segment_type s1(previous_p1, previous_p2);
- segment_type s2(first_p1, first_p2);
- line_line_intersection<output_point_type, segment_type>::apply(s1, s2, p);
-
- join_strategy.apply(p, *boost::begin(ring), previous_p2, first_p1, distance, buffered);
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- mapper.map(p, "fill:rgb(0,0,0);", 3);
- std::ostringstream out;
- out << index++;
- mapper.text(p, out.str(), "fill:rgb(0,0,0);font-family='Arial';", 5, 5);
-#endif
- }
-
- // Close the generated buffer
- {
- output_point_type p = *boost::begin(buffered);
- buffered.push_back(p);
- }
- }
-};
-
-
-
-template <typename PolygonInput, typename PolygonOutput, typename JoinStrategy>
-struct polygon_buffer
-{
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- template <typename Mapper>
-#endif
- static inline void apply(PolygonInput const& polygon, PolygonOutput& buffered,
- typename coordinate_type<PolygonOutput>::type distance,
- JoinStrategy const& join_strategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , Mapper& mapper
-#endif
- )
- {
- geometry::clear(buffered);
-
- typedef typename ring_type<PolygonInput>::type input_ring_type;
- typedef typename ring_type<PolygonOutput>::type output_ring_type;
-
- typedef ring_buffer<input_ring_type, output_ring_type, JoinStrategy> policy;
- policy::apply(exterior_ring(polygon), exterior_ring(buffered),
- distance, join_strategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , mapper
-#endif
- );
-
- typename interior_return_type<PolygonInput const>::type rings
- = interior_rings(polygon);
- for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
- {
- output_ring_type ring;
- policy::apply(*it, ring, distance, join_strategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , mapper
-#endif
- );
- interior_rings(buffered).push_back(ring);
- }
- }
-};
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_POLYGON_BUFFER_HPP
Deleted: branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/sectionalizing_buffer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/sectionalizing_buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,167 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SECTIONALIZING_BUFFER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SECTIONALIZING_BUFFER_HPP
-
-#include <cstddef>
-
-#include <boost/foreach.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/extensions/strategies/buffer_side.hpp>
-#include <boost/geometry/extensions/algorithms/detail/buffer/intersecting_inserter.hpp>
-#include <boost/geometry/extensions/algorithms/detail/buffer/linestring_buffer.hpp>
-#include <boost/geometry/extensions/algorithms/detail/buffer/line_line_intersection.hpp>
-
-#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
-#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
-
-#include <boost/geometry/extensions/algorithms/dissolve.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-
-template
-<
- typename GeometryOut, typename Geometry,
- typename DistanceStrategy,
- typename JoinStrategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , typename Mapper
-#endif
->
-void sectionalizing_buffer(Geometry const& geometry,
- std::vector<GeometryOut>& buffered,
- DistanceStrategy const& distance_strategy,
- JoinStrategy const& join_strategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , Mapper& mapper
-#endif
- )
-{
- typedef typename point_type<Geometry>::type point_type;
- typedef geometry::box<point_type> box_type;
- typedef geometry::sections<box_type, 2> sections_type;
- typedef typename geometry::ring_type<GeometryOut>::type ring_type;
-
- // TEMPORARY
- typedef intersecting_inserter
- <
- std::vector<GeometryOut>
- > inserter_type;
-
-
- sections_type sections;
- geometry::sectionalize(geometry, sections);
-
-
-
- // Buffer all sections separately, and put them in a temporary vector
- std::vector<GeometryOut> buffered_sections;
- BOOST_FOREACH(typename sections_type::value_type const& section, sections)
- {
- if (! section.duplicate)
- {
- typedef typename boost::range_iterator
- <
- typename geometry::detail::range_type<Geometry>::type const
- >::type iterator_type;
-
-
- inserter_type inserter(buffered_sections);
-
- iterator_type begin, end;
- typedef std::pair<iterator_type, iterator_type> section_range;
-
-TODO: UPDATE: get _ section IS OBSOLETE NOW AND DISCARDED.
-TAKE range_by_section AND ADD section.begin_index/section.end_index
-
- geometry::get _ section(geometry, section, begin, end); // get_section is DISCARDED
- geometry::detail::buffer::linestring_buffer
- <
- section_range, ring_type, DistanceStrategy, JoinStrategy
- >::apply(std::make_pair(begin, end), inserter,
- distance_strategy,
- join_strategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , mapper
-#endif
- );
- }
- }
-
- // IF there are bowl-like shapes, there can still be self-intersections
- std::vector<GeometryOut> dissolved;
- BOOST_FOREACH(GeometryOut const& p, buffered_sections)
- {
- geometry::dissolve(p, dissolved);
- }
-
- /*BOOST_FOREACH(GeometryOut const& p, buffered_sections)
- {
- if (geometry::intersects(p))
- {
- //std::cout << ".";
- }
- }*/
-
- // TEMP
- //buffered.swap(dissolved);
- //return;
- // END TEMP
-
-
- BOOST_FOREACH(GeometryOut const& p, dissolved)
- {
- if (buffered.empty())
- {
- buffered.push_back(p);
- //geometry::union_inserter<GeometryOut>(geometry, p, std::back_inserter(buffered));
- }
- else if (boost::size(buffered) == 1)
- {
- std::vector<GeometryOut> unioned;
- geometry::union_inserter<GeometryOut>(buffered.front(), p, std::back_inserter(unioned));
- buffered.swap(unioned);
- }
- else
- {
- std::cerr << " D " << buffered.size();
- /*std::vector<GeometryOut> dissolved;
- dissolved.push_back(p);
- geometry::dissolver(buffered, dissolved);
- dissolved.swap(buffered);*/
- }
- }
-
- // Output
-}
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SECTIONALIZING_BUFFER_HPP
Deleted: branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/segmenting_buffer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/segmenting_buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,350 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SEGMENTING_BUFFER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SEGMENTING_BUFFER_HPP
-
-
-#include <cstddef>
-#include <vector>
-
-#include <boost/foreach.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-
-#include <boost/geometry/extensions/strategies/buffer_side.hpp>
-#include <boost/geometry/extensions/strategies/buffer_join_round.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint.hpp>
-
-
-#include <boost/geometry/extensions/algorithms/dissolve.hpp>
-
-
-// TEMPORARY do not use yet.
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-template <typename Point, typename PointOut, typename DistanceType>
-inline bool calculate_parallels(Point const& point1, Point const& point2,
- PointOut& p1, PointOut& p2, DistanceType const& distance)
-{
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- // Simulate a vector d (dx,dy)
- coordinate_type dx = get<0>(point2) - get<0>(point1);
- coordinate_type dy = get<1>(point2) - get<1>(point1);
-
- // For normalization [0,1] (=dot product d.d, sqrt)
- // TODO: promote to non-integer
- coordinate_type length = sqrt(dx * dx + dy * dy);
-
- // Because coordinates are not equal, should been checked before, length should not be zero
- if(geometry::math::equals(length, 0))
- {
- return false;
- }
-
- // Generate the normalized perpendicular p, to the left (ccw)
- coordinate_type px = -dy / length;
- coordinate_type py = dx / length;
-
- set<0>(p1, get<0>(point1) + px * distance);
- set<1>(p1, get<1>(point1) + py * distance);
-
- set<0>(p2, get<0>(point2) + px * distance);
- set<1>(p2, get<1>(point2) + py * distance);
- return true;
-}
-
-
-
-template
-<
- typename GeometryOut, typename Range,
- typename DistanceStrategy,
- typename JoinStrategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , typename Mapper
-#endif
->
-struct per_segment_buffer
-{
- typedef typename point_type<Range>::type input_point_type;
- typedef typename point_type<GeometryOut>::type point_type;
- typedef typename coordinate_type<point_type>::type coordinate_type;
- typedef coordinate_type distance_type; // TODO promote to FP
- typedef model::segment<point_type const> segment_type;
- typedef typename geometry::ring_type<GeometryOut>::type ring_type;
- typedef typename strategy::side::services::default_strategy<typename cs_tag<point_type>::type>::type side;
-
- typedef typename boost::range_iterator<Range const>::type iterator_type;
-
-
- static inline void calculate_tail(input_point_type const& tail, input_point_type const& head,
- point_type& tail_left, point_type& tail_right,
- distance_type& distance_left,
- distance_type& distance_right,
- distance_type& buffered_length)
- {
- coordinate_type ext_x = get<0>(head) - get<0>(tail);
- coordinate_type ext_y = get<1>(head) - get<1>(tail);
- distance_type segment_length = sqrt(ext_x * ext_x + ext_y * ext_y);
-
- if (buffered_length < geometry::math::abs(distance_left))
- {
- distance_left = buffered_length * distance_left < 0 ? -1.0 : 1.0;
- }
- if (buffered_length < geometry::math::abs(distance_right))
- {
- distance_right = buffered_length * distance_right < 0 ? -1.0 : 1.0;
- }
-
- distance_type prop_left = geometry::math::abs(distance_left) / segment_length;
- distance_type prop_right = geometry::math::abs(distance_right) / segment_length;
-
- set<0>(tail_left, get<0>(tail) - ext_x * prop_left);
- set<1>(tail_left, get<1>(tail) - ext_y * prop_left);
- set<0>(tail_right, get<0>(tail) - ext_x * prop_right);
- set<1>(tail_right, get<1>(tail) - ext_y * prop_right);
-
- buffered_length += segment_length;
- }
-
-
- static inline void calculate_head(input_point_type const& tail, input_point_type const& head,
- point_type& head_left, point_type& head_right,
- distance_type& distance_left,
- distance_type& distance_right,
- distance_type const& rest_length)
- {
- coordinate_type ext_x = get<0>(head) - get<0>(tail);
- coordinate_type ext_y = get<1>(head) - get<1>(tail);
- distance_type segment_length = sqrt(ext_x * ext_x + ext_y * ext_y);
-
- if (rest_length < distance_left)
- {
- distance_left = rest_length;
- }
- if (rest_length < distance_right)
- {
- distance_right = rest_length;
- }
-
- distance_type prop_left = distance_left / segment_length;
- distance_type prop_right = distance_right / segment_length;
-
- set<0>(head_left, get<0>(head) + ext_x * prop_left);
- set<1>(head_left, get<1>(head) + ext_y * prop_left);
- set<0>(head_right, get<0>(head) + ext_x * prop_right);
- set<1>(head_right, get<1>(head) + ext_y * prop_right);
- }
-
- static inline void apply(Range const& range,
- std::vector<GeometryOut>& buffered,
- DistanceStrategy const& distance_strategy,
- JoinStrategy const& join_strategy
- #ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , Mapper& mapper
- #endif
- )
- {
- // Buffer all segments separately, and put them in a temporary vector
- std::vector<GeometryOut> buffered_pieces;
-
- bool first = true;
-
- strategy::buffer::join_round2<point_type> new_join;
- //strategy::buffer::join_none<point_type> new_join;
-
- distance_type range_length = geometry::length(range);
- distance_type buffered_length = coordinate_type();
-
- iterator_type it = boost::begin(range);
- //iterator_type it_c = boost::end(range);
- for (iterator_type previous = it++;
- it != boost::end(range);
- ++it)
- {
- bool const last = it + 1 == boost::end(range);
-
- distance_type distance_left = distance_strategy.apply(
- *previous, *it, buffer_side_left);
- distance_type distance_right = distance_strategy.apply(
- *previous, *it, buffer_side_right);
-
- point_type left_ab_p1, left_ab_p2, right_ab_p1, right_ab_p2;
-
- if (detail::disjoint::disjoint_point_point(*previous, *it)
- && calculate_parallels(*previous, *it, left_ab_p1, left_ab_p2,
- distance_left)
- && calculate_parallels(*previous, *it, right_ab_p1, right_ab_p2,
- -distance_right)
- )
- {
- {
- point_type tail_left, tail_right, head_left, head_right;
-
- // For flat buffers, generate corners only if outside range of buffer_distance
- distance_type distance_tail_left = distance_left;
- distance_type distance_tail_right = distance_right;
- distance_type distance_head_left = distance_left;
- distance_type distance_head_right = distance_right;
-
- calculate_tail(*previous, *it,
- tail_left, tail_right,
- distance_tail_left, distance_tail_right,
- buffered_length);
-
- distance_type const rest_length = range_length - buffered_length;
-
- calculate_head(*previous, *it,
- head_left, head_right,
- distance_head_left, distance_head_right,
- rest_length);
-
- // Add non-axis aligned rectangle
- buffered_pieces.resize(buffered_pieces.size() + 1);
- ring_type& ring = exterior_ring(buffered_pieces.back());
- ring.push_back(left_ab_p1);
- ring.push_back(left_ab_p2);
-
- if (! last)
- {
- new_join.apply(*it, left_ab_p2, left_ab_p2, head_left,
- distance_left, distance_head_left,
- std::back_inserter(ring));
-
- ring.push_back(head_left);
- ring.push_back(head_right);
-
- new_join.apply(*it, right_ab_p2, head_right, right_ab_p2,
- distance_right, distance_head_right,
- std::back_inserter(ring));
- }
-
- ring.push_back(right_ab_p2);
- ring.push_back(right_ab_p1);
-
- if (! first)
- {
- new_join.apply(*previous, right_ab_p1, right_ab_p1, tail_right,
- distance_right, distance_tail_right,
- std::back_inserter(ring));
-
- ring.push_back(tail_right);
- ring.push_back(tail_left);
-
- new_join.apply(*previous, left_ab_p1, tail_left, left_ab_p1,
- distance_left, distance_tail_left,
- std::back_inserter(ring));
- }
-
- ring.push_back(left_ab_p1);
- }
-
- previous = it;
-
- first = false;
- }
- }
-
- // TEMP, uncomment to see what was actually generated
- //buffered.swap(buffered_pieces);
- //return;
- // END TEMP
-
-
-
- BOOST_FOREACH(GeometryOut const& p, buffered_pieces)
- {
- if (buffered.empty())
- {
- buffered.push_back(p);
- }
- else if (boost::size(buffered) == 1)
- {
- std::vector<GeometryOut> unioned;
- geometry::union_inserter<GeometryOut>(buffered.front(), p, std::back_inserter(unioned));
- buffered.swap(unioned);
- }
- else
- {
- std::cerr << " D " << buffered.size();
- /*std::vector<GeometryOut> dissolved;
- dissolved.push_back(p);
- geometry::dissolver(buffered, dissolved);
- dissolved.swap(buffered);*/
- }
- }
-
- /***
- std::vector<GeometryOut> dissolved;
- BOOST_FOREACH(GeometryOut const& p, buffered)
- {
- geometry::dissolve(p, dissolved);
- }
- dissolved.swap(buffered);
- ***/
-
- // Output
- }
-};
-
-
-
-template
-<
- typename GeometryOut, typename Geometry,
- typename DistanceStrategy,
- typename JoinStrategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , typename Mapper
-#endif
->
-inline void segmenting_buffer(Geometry const& geometry,
- std::vector<GeometryOut>& buffered,
- DistanceStrategy const& distance_strategy,
- JoinStrategy const& join_strategy
- #ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , Mapper& mapper
- #endif
- )
-{
- per_segment_buffer
- <
- GeometryOut, Geometry,
- DistanceStrategy, JoinStrategy
- >::apply(geometry, buffered, distance_strategy, join_strategy);
-}
-
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SEGMENTING_BUFFER_HPP
Deleted: branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/splitting_buffer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/splitting_buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,116 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SPLITTING_BUFFER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SPLITTING_BUFFER_HPP
-
-#include <cstddef>
-
-#include <boost/foreach.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/extensions/strategies/buffer_side.hpp>
-#include <boost/geometry/extensions/algorithms/detail/buffer/intersecting_inserter.hpp>
-#include <boost/geometry/extensions/algorithms/detail/buffer/linestring_buffer.hpp>
-#include <boost/geometry/extensions/algorithms/detail/buffer/line_line_intersection.hpp>
-
-
-#include <boost/geometry/extensions/algorithms/detail/overlay/dissolver.hpp>
-#include <boost/geometry/extensions/algorithms/detail/overlay/split_rings.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-template
-<
- typename GeometryOut, typename Geometry,
- typename DistanceStrategy,
- typename JoinStrategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , typename Mapper
-#endif
->
-inline void splitting_buffer(Geometry const& geometry,
- std::vector<GeometryOut>& buffered,
- DistanceStrategy const& distance_strategy,
- JoinStrategy const& join_strategy
-
- , int option
- )
-{
- typedef typename ring_type<GeometryOut>::type ring_type;
- typedef detail::buffer::intersecting_inserter
- <
- std::vector<GeometryOut>
- > inserter_type;
-
-
- inserter_type inserter(buffered);
-
- detail::buffer::linestring_buffer
- <
- Geometry, GeometryOut, DistanceStrategy, JoinStrategy
- >::apply(geometry, inserter, distance_strategy, join_strategy);
-
- if (option == 0)
- {
- return;
- }
-
- std::vector<ring_type> rings;
- BOOST_FOREACH(GeometryOut const& polygon, buffered)
- {
-//std::cout << geometry::wkt(polygon) << " ; POLYGON" << std::endl;
- geometry::split_rings(polygon, rings);
- }
-
- if (option == 1)
- {
- buffered.resize(rings.size());
- int i = 0;
- BOOST_FOREACH(ring_type const& ring, rings)
- {
- exterior_ring(buffered[i++]) = ring;
- }
- return;
- }
-
- std::vector<GeometryOut> buffered_and_unioned;
- geometry::dissolver(rings, buffered_and_unioned);
-
- std::vector<GeometryOut> buffered_and_assembled;
- detail::overlay::assemble<GeometryOut>(buffered_and_unioned,
- std::map<ring_identifier, int>(),
- buffered_and_unioned[0], buffered_and_unioned[0], 1, true, true,
- std::back_inserter(buffered_and_assembled));
-
- buffered = buffered_and_assembled;
-}
-
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_SPLITTING_BUFFER_HPP
Deleted: branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/traversing_buffer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/buffer/traversing_buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,89 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TRAVERSING_BUFFER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TRAVERSING_BUFFER_HPP
-
-#include <cstddef>
-
-#include <boost/foreach.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/extensions/strategies/buffer_side.hpp>
-#include <boost/geometry/extensions/algorithms/buffer/intersecting_inserter.hpp>
-#include <boost/geometry/extensions/algorithms/buffer/linestring_buffer.hpp>
-#include <boost/geometry/extensions/algorithms/buffer/line_line_intersection.hpp>
-
-
-#include <boost/geometry/extensions/algorithms/dissolve.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-template
-<
- typename GeometryOut, typename Geometry,
- typename DistanceStrategy,
- typename JoinStrategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , typename Mapper
-#endif
->
-inline void traversing_buffer(Geometry const& geometry,
- std::vector<GeometryOut>& buffered,
- DistanceStrategy const& distance_strategy,
- JoinStrategy const& join_strategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , Mapper& mapper
-#endif
- )
-{
- typedef typename ring_type<GeometryOut>::type ring_type;
- typedef detail::buffer::intersecting_inserter
- <
- std::vector<GeometryOut>
- > inserter_type;
-
-
- inserter_type inserter(buffered);
-
- detail::buffer::linestring_buffer
- <
- Geometry, GeometryOut, DistanceStrategy, JoinStrategy
- >::apply(geometry, inserter, distance_strategy, join_strategy);
-
- std::vector<GeometryOut> buffered_and_assembled;
- detail::overlay::assemble<GeometryOut>(buffered,
- std::map<ring_identifier, int>(),
- buffered[0], buffered[0], 1, true, true,
- std::back_inserter(buffered_and_assembled));
-
- buffered = buffered_and_assembled;
-}
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TRAVERSING_BUFFER_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/algorithms/offset.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/algorithms/offset.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/algorithms/offset.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -9,12 +9,12 @@
#ifndef BOOST_GEOMETRY_EXTENSIONS_ALGORITHMS_OFFSET_HPP
#define BOOST_GEOMETRY_EXTENSIONS_ALGORITHMS_OFFSET_HPP
+#include <boost/config.hpp>
#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/extensions/algorithms/buffer/line_line_intersection.hpp>
+#include <boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp>
#include <boost/geometry/algorithms/detail/disjoint.hpp>
#include <boost/geometry/geometries/concepts/check.hpp>
@@ -32,91 +32,27 @@
template
<
typename Range,
- typename RangeOut,
- typename JoinStrategy,
- typename Distance
+ typename RangeOut
>
struct offset_range
+ : public geometry::detail::buffer::buffer_range
+ <
+ RangeOut,
+ linestring_tag
+ >
{
- typedef typename coordinate_type<RangeOut>::type coordinate_type;
- typedef typename point_type<RangeOut>::type output_point_type;
- typedef model::referring_segment<output_point_type const> segment_type;
- typedef typename boost::range_iterator<Range const>::type iterator_type;
-
- static inline void apply(Range const& range,
- RangeOut& out,
- JoinStrategy const& join,
- Distance const& distance)
+ template
+ <
+ typename Collection, typename DistanceStrategy, typename JoinStrategy
+ >
+ static inline void apply(Collection& collection, Range const& range,
+ DistanceStrategy const& distance,
+ JoinStrategy const& join)
{
- output_point_type previous_p1, previous_p2;
- output_point_type first_p1, first_p2;
-
- bool first = true;
-
- iterator_type it = boost::begin(range);
- for (iterator_type prev = it++; it != boost::end(range); ++it)
- {
- if (! detail::equals::equals_point_point(*prev, *it))
- {
- bool skip = false;
-
- // Simulate a vector d (dx,dy)
- coordinate_type dx = get<0>(*it) - get<0>(*prev);
- coordinate_type dy = get<1>(*it) - get<1>(*prev);
-
- // For normalization [0,1] (=dot product d.d, sqrt)
- coordinate_type length = sqrt(dx * dx + dy * dy);
-
- // Because coordinates are not equal, length should not be zero
- BOOST_ASSERT((! geometry::math::equals(length, 0)));
-
- // Generate the normalized perpendicular p, to the left (ccw)
- coordinate_type px = -dy / length;
- coordinate_type py = dx / length;
-
- output_point_type p1, p2;
-
- set<0>(p2, get<0>(*it) + px * distance);
- set<1>(p2, get<1>(*it) + py * distance);
-
- set<0>(p1, get<0>(*prev) + px * distance);
- set<1>(p1, get<1>(*prev) + py * distance);
-
- if (! first)
- {
- output_point_type p;
- segment_type s1(p1, p2);
- segment_type s2(previous_p1, previous_p2);
- if (detail::buffer::line_line_intersection<output_point_type, segment_type>::apply(s1, s2, p))
- {
- join.apply(p, *prev, previous_p2, p1, distance, out);
- }
- else
- {
- skip = false;
- }
- }
- else
- {
- first = false;
- first_p1 = p1;
- first_p2 = p2;
-
- out.push_back(p1);
- }
-
- if (! skip)
- {
- previous_p1 = p1;
- previous_p2 = p2;
- prev = it;
- }
- }
- }
-
- // Last one
- out.push_back(previous_p2);
-
+ collection.add_input();
+ iterate(collection, boost::begin(range), boost::end(range),
+ buffer_side_left,
+ distance, join);
}
};
@@ -134,9 +70,7 @@
typename GeometryTag,
typename GeometryOutTag,
typename Geometry,
- typename GeometryOut,
- typename JoinStrategy,
- typename Distance
+ typename GeometryOut
>
struct offset
{};
@@ -145,25 +79,19 @@
template
<
typename Geometry,
- typename GeometryOut,
- typename JoinStrategy,
- typename Distance
+ typename GeometryOut
>
struct offset
<
linestring_tag,
linestring_tag,
Geometry,
- GeometryOut,
- JoinStrategy,
- Distance
+ GeometryOut
>
: detail::offset::offset_range
<
Geometry,
- GeometryOut,
- JoinStrategy,
- Distance
+ GeometryOut
>
{};
@@ -186,15 +114,26 @@
concept::check<Geometry const>();
concept::check<GeometryOut>();
+ typedef strategy::buffer::distance_assymetric
+ <
+ typename geometry::coordinate_type<Geometry>::type
+ > distance_strategy_type;
+ distance_strategy_type distance_strategy(distance, distance);
+
+ detail::buffer::buffered_piece_collection
+ <
+ //typename geometry::ring_type<GeometryOut>::type
+ // TODO the piece collection will not require a polygonal argument
+ model::ring<typename point_type<Geometry>::type>
+ > collection;
+
dispatch::offset
<
typename tag<Geometry>::type,
typename tag<GeometryOut>::type,
Geometry,
- GeometryOut,
- JoinStrategy,
- Distance
- >::apply(geometry, out, join, distance);
+ GeometryOut
+ >::apply(collection, geometry, distance_strategy, join);
}
Modified: branches/quickbook-dev/boost/geometry/extensions/arithmetic/cross_product.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/arithmetic/cross_product.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/arithmetic/cross_product.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,6 +1,8 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
// 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,8 +14,6 @@
#include <cstddef>
-#include <boost/concept/requires.hpp>
-
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/geometries/concepts/point_concept.hpp>
#include <boost/geometry/util/select_coordinate_type.hpp>
@@ -83,13 +83,13 @@
// -- selection of lower dimension
/*!
- \brief Computes the cross product of two vector.
- \details Both vectors shall be of the same type.
- This type also determines type of result vector.
- \ingroup arithmetic
- \param p1 first vector
- \param p2 second vector
- \return the cross product vector
+\brief Computes the cross product of two vectors.
+\details Both vectors shall be of the same type.
+ This type also determines type of result vector.
+\ingroup arithmetic
+\param p1 first vector
+\param p2 second vector
+\return the cross product vector
*/
template <typename P1, typename P2>
inline P1 cross_product(P1 const& p1, P2 const& p2)
@@ -104,6 +104,7 @@
>::apply(p1, p2);
}
+
}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_EXTENSIONS_ARITHMETIC_CROSS_PRODUCT_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/geographic/strategies/dms_parser.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/geographic/strategies/dms_parser.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/geographic/strategies/dms_parser.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -38,7 +38,11 @@
#include <string>
#include <boost/static_assert.hpp>
+
+#if !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
#include <boost/lexical_cast.hpp>
+#endif // !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
+
#include <boost/algorithm/string.hpp>
#include <boost/geometry/core/cs.hpp>
@@ -129,7 +133,11 @@
template <size_t I>
static inline void assign_dms(dms_value& dms, std::string& value, bool& has_value)
{
+#if !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
dms.dms[I] = boost::lexical_cast<double>(value.c_str());
+#else // !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
+ dms.dms[I] = std::atof(value.c_str());
+#endif // !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
dms.has_dms[I] = true;
has_value = false;
value.clear();
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/epsg.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/epsg.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/epsg.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,7 +17,7 @@
// Only to be included if EPSG codes are necessary.
// It is not included automatically
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
@@ -3563,6 +3563,6 @@
return detail::pj_init_plus(args, false);
}
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/epsg_traits.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/epsg_traits.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/epsg_traits.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,7 +13,7 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
/*!
@@ -36,7 +36,7 @@
};
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/factory.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/factory.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/factory.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -70,6 +70,7 @@
#include <boost/geometry/extensions/gis/projections/proj/mill.hpp>
#include <boost/geometry/extensions/gis/projections/proj/mod_ster.hpp>
#include <boost/geometry/extensions/gis/projections/proj/moll.hpp>
+#include <boost/geometry/extensions/gis/projections/proj/natearth.hpp>
#include <boost/geometry/extensions/gis/projections/proj/nell.hpp>
#include <boost/geometry/extensions/gis/projections/proj/nell_h.hpp>
#include <boost/geometry/extensions/gis/projections/proj/nocol.hpp>
@@ -109,7 +110,7 @@
#include <boost/geometry/extensions/gis/projections/proj/wink1.hpp>
#include <boost/geometry/extensions/gis/projections/proj/wink2.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
template <typename LatLong, typename Cartesian, typename Parameters = parameters>
@@ -190,6 +191,7 @@
detail::mill_init(*this);
detail::mod_ster_init(*this);
detail::moll_init(*this);
+ detail::natearth_init(*this);
detail::nell_init(*this);
detail::nell_h_init(*this);
detail::nocol_init(*this);
@@ -250,6 +252,6 @@
}
};
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_FACTORY_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/aasincos.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/aasincos.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/aasincos.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
#include <boost/geometry/util/math.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
namespace detail
@@ -101,7 +101,7 @@
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_AASINCOS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/adjlon.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/adjlon.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/adjlon.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -35,39 +35,36 @@
#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_ADJLON_HPP
#define BOOST_GEOMETRY_PROJECTIONS_IMPL_ADJLON_HPP
-#include <cmath>
-
#include <boost/math/constants/constants.hpp>
#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
namespace detail
{
/* reduce argument to range +/- PI */
-inline double adjlon (double lon)
+template <typename T>
+inline T adjlon (T lon)
{
- static const double SPI = 3.14159265359;
- static const double TWOPI = 6.2831853071795864769;
- static const double ONEPI = 3.14159265358979323846;
-
- if (geometry::math::abs(lon) <= SPI)
+ if (geometry::math::abs(lon) <= boost::math::constants::pi<T>())
{
return lon;
}
- lon += ONEPI; /* adjust to 0..2pi rad */
- lon -= TWOPI * std::floor(lon / TWOPI); /* remove integral # of 'revolutions'*/
- lon -= ONEPI; /* adjust back to -pi..pi rad */
+ /* adjust to 0..2pi rad */
+ lon += boost::math::constants::pi<T>();
+ /* remove integral # of 'revolutions'*/
+ lon -= boost::math::constants::two_pi<T>() *
+ std::floor(lon / boost::math::constants::two_pi<T>());
+ /* adjust back to -pi..pi rad */
+ lon -= boost::math::constants::pi<T>();
return lon;
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_ADJLON_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/base_dynamic.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/base_dynamic.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/base_dynamic.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,7 +15,7 @@
#include <boost/geometry/extensions/gis/projections/projection.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
@@ -101,6 +101,6 @@
} // namespace detail
#endif // DOXYGEN_NO_DETAIL
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_BASE_DYNAMIC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/base_static.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/base_static.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/base_static.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_fwd.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_inv.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
@@ -34,6 +34,9 @@
{
public:
+ typedef LL geographic_point_type; ///< latlong point type
+ typedef XY cartesian_point_type; ///< xy point type
+
inline base_t_f(Prj const& prj, P const& params)
: m_par(params), m_prj(prj)
{}
@@ -99,7 +102,7 @@
#endif // DOXYGEN_NO_DETAIL
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_BASE_STATIC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/factory_entry.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/factory_entry.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/factory_entry.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,7 +13,7 @@
#include <boost/geometry/extensions/gis/projections/projection.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
namespace detail
@@ -38,6 +38,6 @@
};
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_FACTORY_ENTRY_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/function_overloads.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/function_overloads.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/function_overloads.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,7 +11,7 @@
#include <cmath>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
// Functions to resolve ambiguity when compiling with coordinates of different types
@@ -30,6 +30,6 @@
return int(std::floor(f));
}
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_FUNCTION_OVERLOADS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_auth.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_auth.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_auth.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -38,7 +38,7 @@
#include <cassert>
#include <cmath>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -80,6 +80,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_AUTH_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_datum_set.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_datum_set.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_datum_set.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -44,7 +44,7 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_param.hpp>
#include <boost/geometry/extensions/gis/projections/parameters.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -162,6 +162,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_DATUM_SET_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_datums.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_datums.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_datums.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -37,7 +37,7 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -101,6 +101,6 @@
};
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_DATUMS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_ell_set.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_ell_set.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_ell_set.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -43,7 +43,7 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_ellps.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_param.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -150,6 +150,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELL_SET_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_ellps.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_ellps.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_ellps.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -37,7 +37,7 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -88,6 +88,6 @@
};
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELLPS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_fwd.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_fwd.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_fwd.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -44,7 +44,7 @@
/* general forward projection */
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -93,6 +93,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_FWD_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_gauss.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_gauss.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_gauss.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -39,7 +39,7 @@
#include <boost/geometry/util/math.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail { namespace gauss {
@@ -125,6 +125,6 @@
}
}} // namespace detail::gauss
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_GAUSS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_init.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_init.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_init.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -55,7 +55,7 @@
#include <boost/geometry/extensions/gis/geographic/strategies/dms_parser.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
@@ -257,7 +257,7 @@
inline parameters pj_init_plus(std::string const& definition, bool use_defaults = true)
{
- static const char* sep = " +";
+ const char* sep = " +";
/* split into arguments based on '+' and trim white space */
@@ -296,6 +296,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_INIT_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_inv.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_inv.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_inv.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -43,7 +43,7 @@
/* general inverse projection */
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
namespace detail
@@ -75,6 +75,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -40,7 +40,7 @@
#include <boost/geometry/util/math.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -106,6 +106,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_msfn.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_msfn.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_msfn.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -36,7 +36,7 @@
#define BOOST_GEOMETRY_PROJECTIONS_PJ_MSFN_HPP
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -49,6 +49,6 @@
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_param.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_param.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_param.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -44,7 +44,7 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
@@ -150,6 +150,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_phi2.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_phi2.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_phi2.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -39,7 +39,7 @@
#include <boost/geometry/util/math.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
namespace phi2
@@ -68,6 +68,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_qsfn.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_qsfn.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_qsfn.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -36,7 +36,7 @@
#define BOOST_GEOMETRY_PROJECTIONS_PJ_QSFN_HPP
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{ namespace detail {
/* determine small q */
@@ -79,6 +79,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_tsfn.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_tsfn.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_tsfn.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -38,7 +38,7 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
/* determine small t */
@@ -50,5 +50,5 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_units.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_units.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_units.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -37,7 +37,7 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
namespace detail {
/* Field 2 that contains the multiplier to convert named units to meters
@@ -70,6 +70,6 @@
};
} // detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_UNITS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_zpoly1.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_zpoly1.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/pj_zpoly1.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -39,7 +39,7 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection { namespace detail {
+namespace boost { namespace geometry { namespace projections { namespace detail {
/* evaluate complex polynomial */
@@ -95,6 +95,6 @@
return a;
}
-}}}} // namespace boost::geometry::projection::impl
+}}}} // namespace boost::geometry::projections::detail
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/proj_mdist.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/proj_mdist.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/proj_mdist.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -39,7 +39,7 @@
#include <boost/geometry/util/math.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
namespace detail
{
@@ -132,6 +132,6 @@
}
} // namespace detail
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/projects.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/projects.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/impl/projects.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -40,8 +40,9 @@
#include <vector>
#include <boost/concept_check.hpp>
+#include <boost/math/constants/constants.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
@@ -49,13 +50,13 @@
{
/* some useful constants */
-static const double HALFPI = 1.5707963267948966;
-static const double FORTPI = 0.78539816339744833;
-static const double PI = 3.14159265358979323846;
-static const double TWOPI = 6.2831853071795864769;
+static const double HALFPI = boost::math::constants::half_pi<double>();
+static const double FORTPI = boost::math::constants::pi<double>() / 4.0;
+static const double PI = boost::math::constants::pi<double>();
+static const double TWOPI = boost::math::constants::two_pi<double>();
-static const double RAD_TO_DEG = 57.29577951308232;
-static const double DEG_TO_RAD = .0174532925199432958;
+static const double RAD_TO_DEG = boost::math::constants::radian<double>();
+static const double DEG_TO_RAD = boost::math::constants::degree<double>();
static const int PJD_UNKNOWN =0;
static const int PJD_3PARAM = 1;
@@ -180,5 +181,5 @@
}
};
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PROJECTS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/parameters.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/parameters.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/parameters.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,7 +18,7 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection {
+namespace boost { namespace geometry { namespace projections {
template <typename R>
inline parameters init(const R& arguments)
@@ -61,5 +61,5 @@
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aea.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aea.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aea.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -48,10 +48,10 @@
#include <boost/geometry/extensions/gis/projections/epsg_traits.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace aea{
+ namespace detail { namespace aea{
static const double EPS10 = 1.e-10;
static const double TOL7 = 1.e-7;
static const int N_ITER = 15;
@@ -72,17 +72,17 @@
double en[EN_SIZE];
int ellips;
};
-
-
-
-
-
+
+
+
+
+
/* determine latitude angle phi-1 */
inline double
phi1_(double qs, double Te, double Tone_es) {
int i;
double Phi, sinpi, cospi, con, com, dphi;
-
+
Phi = asin (.5 * qs);
if (Te < EPSILON)
return( Phi );
@@ -153,7 +153,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_aea& proj_parm)
+ void setup(Parameters& par, par_aea& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -213,7 +213,7 @@
}
}} // namespace detail::aea
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Albers Equal Area projection
@@ -293,7 +293,7 @@
factory.add_to_factory("leac", new leac_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
// Create EPSG specializations
// (Proof of Concept, only for some)
@@ -519,7 +519,7 @@
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_AEA_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aeqd.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aeqd.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aeqd.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -45,10 +45,10 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp>
#include <boost/geometry/extensions/gis/projections/impl/proj_mdist.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace aeqd{
+ namespace detail { namespace aeqd{
static const double EPS10 = 1.e-10;
static const double TOL = 1.e-14;
static const int N_POLE = 0;
@@ -68,11 +68,11 @@
double G;
int mode;
};
-
-
-
-
-
+
+
+
+
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -92,7 +92,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, cosphi, sinphi, rho, s, H, H2, c, Az, t, ct, st, cA, sA;
-
+
coslam = cos(lp_lon);
cosphi = cos(lp_lat);
sinphi = sin(lp_lat);
@@ -133,7 +133,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double c, Az, cosAz, A, B, D, E, F, psi, t;
-
+
if ((c = boost::math::hypot(xy_x, xy_y)) < EPS10) {
lp_lat = this->m_par.phi0;
lp_lon = 0.;
@@ -183,7 +183,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double cosphi, sinphi, t;
-
+
cosphi = cos(lp_lat);
sinphi = sin(lp_lat);
t = 1. / sqrt(1. - this->m_par.es * sinphi * sinphi);
@@ -196,7 +196,7 @@
{
double x2, t;
int i;
-
+
x2 = 0.5 * xy_x * xy_x;
lp_lat = this->m_par.phi0;
for (i = 0; i < 3; ++i) {
@@ -226,7 +226,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, cosphi, sinphi;
-
+
sinphi = sin(lp_lat);
cosphi = cos(lp_lat);
coslam = cos(lp_lon);
@@ -239,7 +239,7 @@
oblcon:
if (fabs(fabs(xy_y) - 1.) < TOL)
if (xy_y < 0.)
- throw proj_exception();
+ throw proj_exception();
else
xy_x = xy_y = 0.;
else {
@@ -264,7 +264,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double cosc, c_rh, sinc;
-
+
if ((c_rh = boost::math::hypot(xy_x, xy_y)) > PI) {
if (c_rh - EPS10 > PI) throw proj_exception();;
c_rh = PI;
@@ -277,7 +277,7 @@
sinc = sin(c_rh);
cosc = cos(c_rh);
if (this->m_proj_parm.mode == EQUIT) {
- lp_lat = aasin(xy_y * sinc / c_rh);
+ lp_lat = aasin(xy_y * sinc / c_rh);
xy_x *= sinc;
xy_y = cosc * c_rh;
} else {
@@ -348,7 +348,7 @@
}
}} // namespace detail::aeqd
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Azimuthal Equidistant projection
@@ -445,10 +445,10 @@
factory.add_to_factory("aeqd", new aeqd_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_AEQD_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/airy.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/airy.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/airy.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace airy{
+ namespace detail { namespace airy{
static const double EPS = 1.e-10;
static const int N_POLE = 0;
static const int S_POLE = 1;
@@ -61,10 +61,10 @@
int mode;
int no_cut; /* do not cut at hemisphere limit */
};
-
-
-
-
+
+
+
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -84,7 +84,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double sinlam, coslam, cosphi, sinphi, t, s, Krho, cosz;
-
+
sinlam = sin(lp_lon);
coslam = cos(lp_lon);
switch (this->m_proj_parm.mode) {
@@ -162,7 +162,7 @@
}
}} // namespace detail::airy
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Airy projection
@@ -208,10 +208,10 @@
factory.add_to_factory("airy", new airy_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_AIRY_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aitoff.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aitoff.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/aitoff.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,20 +43,20 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace aitoff{
+ namespace detail { namespace aitoff{
struct par_aitoff
{
double cosphi1;
int mode;
};
-
-
-
-
+
+
+
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -76,7 +76,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double c, d;
-
+
if((d = acos(cos(lp_lat) * cos(c = 0.5 * lp_lon)))) {/* basic Aitoff */
xy_x = 2. * d * cos(lp_lat) * sin(c) * (xy_y = 1. / sin(d));
xy_y *= d * sin(lp_lat);
@@ -90,7 +90,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_aitoff& proj_parm)
+ void setup(Parameters& par, par_aitoff& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -124,7 +124,7 @@
}
}} // namespace detail::aitoff
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Aitoff projection
@@ -201,10 +201,10 @@
factory.add_to_factory("wintri", new wintri_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_AITOFF_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/august.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/august.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/august.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace august{
+ namespace detail { namespace august{
static const double M = 1.333333333333333;
@@ -66,7 +66,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double t, c1, c, x1, x12, y1, y12;
-
+
t = tan(.5 * lp_lat);
c1 = sqrt(1. - t * t);
c = 1. + c1 * cos(lp_lon *= .5);
@@ -87,7 +87,7 @@
}
}} // namespace detail::august
- #endif // doxygen
+ #endif // doxygen
/*!
\brief August Epicycloidal projection
@@ -132,10 +132,10 @@
factory.add_to_factory("august", new august_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_AUGUST_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bacon.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bacon.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bacon.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace bacon{
+ namespace detail { namespace bacon{
static const double HLFPI2 = 2.46740110027233965467;
static const double EPS = 1e-10;
@@ -73,7 +73,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double ax, f;
-
+
xy_y = this->m_proj_parm.bacn ? HALFPI * sin(lp_lat) : lp_lat;
if ((ax = fabs(lp_lon)) >= EPS) {
if (this->m_proj_parm.ortl && ax >= HALFPI)
@@ -118,7 +118,7 @@
}
}} // namespace detail::bacon
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Apian Globular I projection
@@ -229,10 +229,10 @@
factory.add_to_factory("bacon", new bacon_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_BACON_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bipc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bipc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bipc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace bipc{
+ namespace detail { namespace bipc{
static const double EPS = 1e-10;
static const double EPS10 = 1e-10;
static const double ONEEPS = 1.000000001;
@@ -90,7 +90,7 @@
{
double cphi, sphi, tphi, t, al, Az, z, Av, cdlam, sdlam, r;
int tag;
-
+
cphi = cos(lp_lat);
sphi = sin(lp_lat);
cdlam = cos(sdlam = lamB - lp_lon);
@@ -140,8 +140,8 @@
xy_y += (tag ? -r : r) * cos(t);
if (this->m_proj_parm.noskew) {
t = xy_x;
- xy_x = -xy_x * cAzc - xy_y * sAzc;
- xy_y = -xy_y * cAzc + t * sAzc;
+ xy_x = -xy_x * cAzc - xy_y * sAzc;
+ xy_y = -xy_y * cAzc + t * sAzc;
}
}
@@ -149,11 +149,11 @@
{
double t, r, rp, rl, al, z, fAz, Az, s, c, Av;
int neg, i;
-
+
if (this->m_proj_parm.noskew) {
t = xy_x;
- xy_x = -xy_x * cAzc + xy_y * sAzc;
- xy_y = -xy_y * cAzc - t * sAzc;
+ xy_x = -xy_x * cAzc + xy_y * sAzc;
+ xy_y = -xy_y * cAzc - t * sAzc;
}
if( (neg = (xy_x < 0.)) ) {
xy_y = rhoc - xy_y;
@@ -200,7 +200,7 @@
}
}} // namespace detail::bipc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Bipolar conic of western hemisphere projection
@@ -244,10 +244,10 @@
factory.add_to_factory("bipc", new bipc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_BIPC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/boggs.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/boggs.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/boggs.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace boggs{
+ namespace detail { namespace boggs{
static const int NITER = 20;
static const double EPS = 1e-7;
static const double ONETOL = 1.000001;
@@ -73,7 +73,7 @@
{
double theta, th1, c;
int i;
-
+
theta = lp_lat;
if (fabs(fabs(lp_lat) - HALFPI) < EPS)
xy_x = 0.;
@@ -100,7 +100,7 @@
}
}} // namespace detail::boggs
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Boggs Eumorphic projection
@@ -145,10 +145,10 @@
factory.add_to_factory("boggs", new boggs_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_BOGGS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bonne.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bonne.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/bonne.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace bonne{
+ namespace detail { namespace bonne{
static const double EPS10 = 1e-10;
struct par_bonne
@@ -76,7 +76,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double rh, E, c;
-
+
rh = this->m_proj_parm.am1 + this->m_proj_parm.m1 - pj_mlfn(lp_lat, E = sin(lp_lat), c = cos(lp_lat), this->m_proj_parm.en);
E = c * lp_lon / (rh * sqrt(1. - this->m_par.es * E * E));
xy_x = rh * sin(E);
@@ -86,7 +86,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double s, rh;
-
+
rh = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.am1 - xy_y);
lp_lat = pj_inv_mlfn(this->m_proj_parm.am1 + this->m_proj_parm.m1 - rh, this->m_par.es, this->m_proj_parm.en);
if ((s = fabs(lp_lat)) < HALFPI) {
@@ -117,7 +117,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double E, rh;
-
+
rh = this->m_proj_parm.cphi1 + this->m_proj_parm.phi1 - lp_lat;
if (fabs(rh) > EPS10) {
xy_x = rh * sin(E = lp_lon * cos(lp_lat) / rh);
@@ -129,7 +129,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double rh;
-
+
rh = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.cphi1 - xy_y);
lp_lat = this->m_proj_parm.cphi1 + this->m_proj_parm.phi1 - rh;
if (fabs(lp_lat) > HALFPI) throw proj_exception();;
@@ -165,7 +165,7 @@
}
}} // namespace detail::bonne
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Bonne (Werner lat_1=90) projection
@@ -237,10 +237,10 @@
factory.add_to_factory("bonne", new bonne_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_BONNE_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cass.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cass.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cass.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -45,10 +45,10 @@
#include <boost/geometry/extensions/gis/projections/epsg_traits.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace cass{
+ namespace detail { namespace cass{
static const double EPS10 = 1e-10;
static const double C1 = .16666666666666666666;
static const double C2 = .00833333333333333333;
@@ -103,7 +103,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double ph1;
-
+
ph1 = pj_inv_mlfn(this->m_proj_parm.m0 + xy_y, this->m_par.es, this->m_proj_parm.en);
this->m_proj_parm.tn = tan(ph1); this->m_proj_parm.t = this->m_proj_parm.tn * this->m_proj_parm.tn;
this->m_proj_parm.n = sin(ph1);
@@ -163,7 +163,7 @@
}
}} // namespace detail::cass
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Cassini projection
@@ -233,7 +233,7 @@
factory.add_to_factory("cass", new cass_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
// Create EPSG specializations
// (Proof of Concept, only for some)
@@ -459,7 +459,7 @@
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_CASS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace cc{
+ namespace detail { namespace cc{
static const double EPS10 = 1.e-10;
struct par_cc
@@ -92,7 +92,7 @@
}
}} // namespace detail::cc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Central Cylindrical projection
@@ -136,10 +136,10 @@
factory.add_to_factory("cc", new cc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_CC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cea.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cea.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/cea.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,10 +44,10 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_qsfn.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_auth.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace cea{
+ namespace detail { namespace cea{
static const double EPS = 1e-10;
struct par_cea
@@ -108,7 +108,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double t;
-
+
if ((t = fabs(xy_y *= this->m_par.k0)) - EPS <= 1.) {
if (t >= 1.)
lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
@@ -123,11 +123,10 @@
template <typename Parameters>
void setup_cea(Parameters& par, par_cea& proj_parm)
{
- double t;
+ double t = 0;
if (pj_param(par.params, "tlat_ts").i &&
- (par.k0 = cos(t = pj_param(par.params, "rlat_ts").f)) < 0.) throw proj_exception(-24);
- else
- t = 0.;
+ (par.k0 = cos(t = pj_param(par.params, "rlat_ts").f)) < 0.)
+ throw proj_exception(-24);
if (par.es) {
t = sin(t);
par.k0 /= sqrt(1. - par.es * t * t);
@@ -143,7 +142,7 @@
}
}} // namespace detail::cea
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Equal Area Cylindrical projection
@@ -215,10 +214,10 @@
factory.add_to_factory("cea", new cea_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_CEA_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/chamb.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/chamb.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/chamb.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -45,10 +45,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/aasincos.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace chamb{
+ namespace detail { namespace chamb{
static const double THIRD = 0.333333333333333333;
static const double TOL = 1e-9;
@@ -71,7 +71,7 @@
vect(double dphi, double c1, double s1, double c2, double s2, double dlam) {
VECT v;
double cdl, dp, dl;
-
+
cdl = cos(dlam);
if (fabs(dphi) > 1. || fabs(dlam) > 1.)
v.r = aacos(s1 * s2 + c1 * c2 * cdl);
@@ -111,7 +111,7 @@
double sinphi, cosphi, a;
VECT v[3];
int i, j;
-
+
sinphi = sin(lp_lat);
cosphi = cos(lp_lat);
for (i = 0; i < 3; ++i) { /* dist/azimiths from control */
@@ -187,7 +187,7 @@
}
}} // namespace detail::chamb
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Chamberlin Trimetric projection
@@ -233,10 +233,10 @@
factory.add_to_factory("chamb", new chamb_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_CHAMB_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/collg.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/collg.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/collg.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace collg{
+ namespace detail { namespace collg{
static const double FXC = 1.12837916709551257390;
static const double FYC = 1.77245385090551602729;
static const double ONEEPS = 1.0000001;
@@ -99,7 +99,7 @@
}
}} // namespace detail::collg
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Collignon projection
@@ -143,10 +143,10 @@
factory.add_to_factory("collg", new collg_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_COLLG_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/crast.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/crast.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/crast.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace crast{
+ namespace detail { namespace crast{
static const double XM = 0.97720502380583984317;
static const double RXM = 1.02332670794648848847;
static const double YM = 3.06998012383946546542;
@@ -91,7 +91,7 @@
}
}} // namespace detail::crast
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Craster Parabolic (Putnins P4) projection
@@ -135,10 +135,10 @@
factory.add_to_factory("crast", new crast_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_CRAST_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/denoy.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/denoy.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/denoy.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace denoy{
+ namespace detail { namespace denoy{
static const double C0 = 0.95;
static const double C1 = -.08333333333333333333;
static const double C3 = .00166666666666666666;
@@ -86,7 +86,7 @@
}
}} // namespace detail::denoy
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Denoyer Semi-Elliptical projection
@@ -131,10 +131,10 @@
factory.add_to_factory("denoy", new denoy_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_DENOY_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck1.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck1.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck1.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck1{
+ namespace detail { namespace eck1{
static const double FC = .92131773192356127802;
static const double RP = .31830988618379067154;
@@ -87,7 +87,7 @@
}
}} // namespace detail::eck1
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Eckert I projection
@@ -131,10 +131,10 @@
factory.add_to_factory("eck1", new eck1_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_ECK1_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck2.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck2.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck2.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck2{
+ namespace detail { namespace eck2{
static const double FXC = 0.46065886596178063902;
static const double FYC = 1.44720250911653531871;
static const double C13 = 0.33333333333333333333;
@@ -98,7 +98,7 @@
}
}} // namespace detail::eck2
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Eckert II projection
@@ -142,10 +142,10 @@
factory.add_to_factory("eck2", new eck2_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_ECK2_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck3.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck3.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck3.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck3{
+ namespace detail { namespace eck3{
struct par_eck3
{
@@ -82,7 +82,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_eck3& proj_parm)
+ void setup(Parameters& par, par_eck3& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -137,7 +137,7 @@
}
}} // namespace detail::eck3
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Eckert III projection
@@ -277,10 +277,10 @@
factory.add_to_factory("kav7", new kav7_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_ECK3_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck4.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck4.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck4.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck4{
+ namespace detail { namespace eck4{
static const double C_x = .42223820031577120149;
static const double C_y = 1.32650042817700232218;
static const double RC_y = .75386330736002178205;
@@ -73,7 +73,7 @@
{
double p, V, s, c;
int i;
-
+
p = C_p * sin(lp_lat);
V = lp_lat * lp_lat;
lp_lat *= 0.895168 + V * ( 0.0218849 + V * 0.00826809 );
@@ -97,7 +97,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double c;
-
+
lp_lat = aasin(xy_y / C_y);
lp_lon = xy_x / (C_x * (1. + (c = cos(lp_lat))));
lp_lat = aasin((lp_lat + sin(lp_lat) * (c + 2.)) / C_p);
@@ -114,7 +114,7 @@
}
}} // namespace detail::eck4
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Eckert IV projection
@@ -158,10 +158,10 @@
factory.add_to_factory("eck4", new eck4_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_ECK4_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck5.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck5.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eck5.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck5{
+ namespace detail { namespace eck5{
static const double XF = 0.44101277172455148219;
static const double RXF = 2.26750802723822639137;
static const double YF = 0.88202554344910296438;
@@ -88,7 +88,7 @@
}
}} // namespace detail::eck5
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Eckert V projection
@@ -132,10 +132,10 @@
factory.add_to_factory("eck5", new eck5_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_ECK5_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eqc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eqc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eqc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eqc{
+ namespace detail { namespace eqc{
struct par_eqc
{
@@ -91,7 +91,7 @@
}
}} // namespace detail::eqc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Equidistant Cylindrical (Plate Caree) projection
@@ -137,10 +137,10 @@
factory.add_to_factory("eqc", new eqc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_EQC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eqdc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eqdc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/eqdc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,10 +44,10 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_msfn.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eqdc{
+ namespace detail { namespace eqdc{
static const double EPS10 = 1.e-10;
struct par_eqdc
@@ -107,7 +107,7 @@
inline void fac(Geographic lp, Factors &fac) const
{
double sinphi, cosphi;
-
+
sinphi = sin(lp_lat);
cosphi = cos(lp_lat);
this->m_fac.code |= IS_ANAL_HK;
@@ -128,7 +128,7 @@
proj_parm.phi2 = pj_param(par.params, "rlat_2").f;
if (fabs(proj_parm.phi1 + proj_parm.phi2) < EPS10) throw proj_exception(-21);
pj_enfn(par.es, proj_parm.en);
-
+
proj_parm.n = sinphi = sin(proj_parm.phi1);
cosphi = cos(proj_parm.phi1);
secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= EPS10;
@@ -157,7 +157,7 @@
}
}} // namespace detail::eqdc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Equidistant Conic projection
@@ -203,10 +203,10 @@
factory.add_to_factory("eqdc", new eqdc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_EQDC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/fahey.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/fahey.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/fahey.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace fahey{
+ namespace detail { namespace fahey{
static const double TOL = 1e-6;
@@ -87,7 +87,7 @@
}
}} // namespace detail::fahey
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Fahey projection
@@ -131,10 +131,10 @@
factory.add_to_factory("fahey", new fahey_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_FAHEY_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/fouc_s.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/fouc_s.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/fouc_s.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace fouc_s{
+ namespace detail { namespace fouc_s{
static const int MAX_ITER = 10;
static const double LOOP_TOL = 1e-7;
@@ -72,7 +72,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double t;
-
+
t = cos(lp_lat);
xy_x = lp_lon * t / (this->m_proj_parm.n + this->m_proj_parm.n1 * t);
xy_y = this->m_proj_parm.n * lp_lat + this->m_proj_parm.n1 * sin(lp_lat);
@@ -82,7 +82,7 @@
{
double V;
int i;
-
+
if (this->m_proj_parm.n) {
lp_lat = xy_y;
for (i = MAX_ITER; i ; --i) {
@@ -114,7 +114,7 @@
}
}} // namespace detail::fouc_s
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Foucaut Sinusoidal projection
@@ -158,10 +158,10 @@
factory.add_to_factory("fouc_s", new fouc_s_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_FOUC_S_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gall.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gall.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gall.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gall{
+ namespace detail { namespace gall{
static const double YF = 1.70710678118654752440;
static const double XF = 0.70710678118654752440;
static const double RYF = 0.58578643762690495119;
@@ -89,7 +89,7 @@
}
}} // namespace detail::gall
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Gall (Gall Stereographic) projection
@@ -133,10 +133,10 @@
factory.add_to_factory("gall", new gall_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_GALL_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/geocent.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/geocent.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/geocent.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,15 +42,15 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace geocent{
-
-
-
-
+ namespace detail { namespace geocent{
+
+
+
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -84,7 +84,7 @@
void setup_geocent(Parameters& par)
{
par.is_geocent = 1;
-
+
par.x0 = 0.0;
par.y0 = 0.0;
// par.inv = inverse;
@@ -92,7 +92,7 @@
}
}} // namespace detail::geocent
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Geocentric projection
@@ -134,10 +134,10 @@
factory.add_to_factory("geocent", new geocent_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_GEOCENT_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/geos.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/geos.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/geos.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace geos{
+ namespace detail { namespace geos{
struct par_geos
{
@@ -56,9 +56,11 @@
double radius_g;
double radius_g_1;
double C;
+ std::string sweep_axis;
+ int flip_axis;
};
-
-
+
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -78,7 +80,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double r, Vx, Vy, Vz, tmp;
-
+
/* Calculation of geocentric latitude. */
lp_lat = atan (this->m_proj_parm.radius_p2 * tan (lp_lat));
/* Calculation of the three components of the vector from satellite to
@@ -92,18 +94,34 @@
throw proj_exception();;
/* Calculation based on view angles from satellite. */
tmp = this->m_proj_parm.radius_g - Vx;
- xy_x = this->m_proj_parm.radius_g_1 * atan (Vy / tmp);
- xy_y = this->m_proj_parm.radius_g_1 * atan (Vz / boost::math::hypot (Vy, tmp));
+ if(this->m_proj_parm.flip_axis)
+ {
+ xy_x = this->m_proj_parm.radius_g_1 * atan (Vy / boost::math::hypot (Vz, tmp));
+ xy_y = this->m_proj_parm.radius_g_1 * atan (Vz / tmp);
+ }
+ else
+ {
+ xy_x = this->m_proj_parm.radius_g_1 * atan (Vy / tmp);
+ xy_y = this->m_proj_parm.radius_g_1 * atan (Vz / boost::math::hypot (Vy, tmp));
+ }
}
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double Vx, Vy, Vz, a, b, det, k;
-
+
/* Setting three components of vector from satellite to position.*/
Vx = -1.0;
- Vy = tan (xy_x / this->m_proj_parm.radius_g_1);
- Vz = tan (xy_y / this->m_proj_parm.radius_g_1) * boost::math::hypot(1.0, Vy);
+ if(this->m_proj_parm.flip_axis)
+ {
+ Vz = tan (xy_y / this->m_proj_parm.radius_g_1);
+ Vy = tan (xy_x / this->m_proj_parm.radius_g_1) * boost::math::hypot(1.0, Vz);
+ }
+ else
+ {
+ Vy = tan (xy_x / this->m_proj_parm.radius_g_1);
+ Vz = tan (xy_y / this->m_proj_parm.radius_g_1) * boost::math::hypot(1.0, Vy);
+ }
/* Calculation of terms in cubic equation and determinant.*/
a = Vz / this->m_proj_parm.radius_p;
a = Vy * Vy + a * a + Vx * Vx;
@@ -139,7 +157,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double Vx, Vy, Vz, tmp;
-
+
/* Calculation of the three components of the vector from satellite to
** position on earth surface (lon,lat).*/
tmp = cos(lp_lat);
@@ -150,18 +168,34 @@
if (((this->m_proj_parm.radius_g - Vx) * Vx - Vy * Vy - Vz * Vz) < 0.) throw proj_exception();;
/* Calculation based on view angles from satellite.*/
tmp = this->m_proj_parm.radius_g - Vx;
- xy_x = this->m_proj_parm.radius_g_1 * atan(Vy / tmp);
- xy_y = this->m_proj_parm.radius_g_1 * atan(Vz / boost::math::hypot(Vy, tmp));
+ if(this->m_proj_parm.flip_axis)
+ {
+ xy_x = this->m_proj_parm.radius_g_1 * atan(Vy / boost::math::hypot(Vz, tmp));
+ xy_y = this->m_proj_parm.radius_g_1 * atan(Vz / tmp);
+ }
+ else
+ {
+ xy_x = this->m_proj_parm.radius_g_1 * atan(Vy / tmp);
+ xy_y = this->m_proj_parm.radius_g_1 * atan(Vz / boost::math::hypot(Vy, tmp));
+ }
}
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double Vx, Vy, Vz, a, b, det, k;
-
+
/* Setting three components of vector from satellite to position.*/
Vx = -1.0;
- Vy = tan (xy_x / (this->m_proj_parm.radius_g - 1.0));
- Vz = tan (xy_y / (this->m_proj_parm.radius_g - 1.0)) * sqrt (1.0 + Vy * Vy);
+ if(this->m_proj_parm.flip_axis)
+ {
+ Vz = tan (xy_y / (this->m_proj_parm.radius_g - 1.0));
+ Vy = tan (xy_x / (this->m_proj_parm.radius_g - 1.0)) * sqrt (1.0 + Vz * Vz);
+ }
+ else
+ {
+ Vy = tan (xy_x / (this->m_proj_parm.radius_g - 1.0));
+ Vz = tan (xy_y / (this->m_proj_parm.radius_g - 1.0)) * sqrt (1.0 + Vy * Vy);
+ }
/* Calculation of terms in cubic equation and determinant.*/
a = Vy * Vy + Vz * Vz + Vx * Vx;
b = 2 * this->m_proj_parm.radius_g * Vx;
@@ -183,7 +217,22 @@
{
if ((proj_parm.h = pj_param(par.params, "dh").f) <= 0.) throw proj_exception(-30);
if (par.phi0) throw proj_exception(-46);
- proj_parm.radius_g = 1. + (proj_parm.radius_g_1 = proj_parm.h / par.a);
+ proj_parm.sweep_axis = pj_param(par.params, "ssweep").s;
+ if (proj_parm.sweep_axis.empty())
+ proj_parm.flip_axis = 0;
+ else
+ {
+ if (proj_parm.sweep_axis[1] != '\0' ||
+ (proj_parm.sweep_axis[0] != 'x' &&
+ proj_parm.sweep_axis[0] != 'y'))
+ throw proj_exception(-49);
+ if (proj_parm.sweep_axis[0] == 'y')
+ proj_parm.flip_axis = 1;
+ else
+ proj_parm.flip_axis = 0;
+ }
+ proj_parm.radius_g_1 = proj_parm.h / par.a;
+ proj_parm.radius_g = 1. + proj_parm.radius_g_1;
proj_parm.C = proj_parm.radius_g * proj_parm.radius_g - 1.0;
if (par.es) {
proj_parm.radius_p = sqrt (par.one_es);
@@ -199,7 +248,7 @@
}
}} // namespace detail::geos
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Geostationary Satellite View projection
@@ -271,10 +320,10 @@
factory.add_to_factory("geos", new geos_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_GEOS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gins8.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gins8.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gins8.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gins8{
+ namespace detail { namespace gins8{
static const double Cl = 0.000952426;
static const double Cp = 0.162388;
static const double C12 = 0.08333333333333333;
@@ -68,7 +68,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double t = lp_lat * lp_lat;
-
+
xy_y = lp_lat * (1. + t * C12);
xy_x = lp_lon * (1. - Cp * t);
t = lp_lon * lp_lon;
@@ -86,7 +86,7 @@
}
}} // namespace detail::gins8
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Ginsburg VIII (TsNIIGAiK) projection
@@ -131,10 +131,10 @@
factory.add_to_factory("gins8", new gins8_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_GINS8_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gn_sinu.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gn_sinu.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gn_sinu.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,10 +44,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gn_sinu{
+ namespace detail { namespace gn_sinu{
static const double EPS10 = 1e-10;
static const int MAX_ITER = 8;
static const double LOOP_TOL = 1e-7;
@@ -77,15 +77,15 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double s, c;
-
+
xy_y = pj_mlfn(lp_lat, s = sin(lp_lat), c = cos(lp_lat), this->m_proj_parm.en);
xy_x = lp_lon * c / sqrt(1. - this->m_par.es * s * s);
}
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
- double s; boost::ignore_unused_variable_warning(s);
-
+ double s;
+
if ((s = fabs(lp_lat = pj_inv_mlfn(xy_y, this->m_par.es, this->m_proj_parm.en))) < HALFPI) {
s = sin(lp_lat);
lp_lon = xy_x * sqrt(1. - this->m_par.es * s * s) / cos(lp_lat);
@@ -119,7 +119,7 @@
else {
double k, V;
int i;
-
+
k = this->m_proj_parm.n * sin(lp_lat);
for (i = MAX_ITER; i ; --i) {
lp_lat -= V = (this->m_proj_parm.m * lp_lat + sin(lp_lat) - k) /
@@ -136,8 +136,6 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
- double s; boost::ignore_unused_variable_warning(s);
-
xy_y /= this->m_proj_parm.C_y;
lp_lat = this->m_proj_parm.m ? aasin((this->m_proj_parm.m * xy_y + sin(xy_y)) / this->m_proj_parm.n) :
( this->m_proj_parm.n != 1. ? aasin(sin(xy_y) / this->m_proj_parm.n) : xy_y );
@@ -146,7 +144,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_gn_sinu& proj_parm)
+ void setup(Parameters& par, par_gn_sinu& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -174,7 +172,7 @@
void setup_sinu(Parameters& par, par_gn_sinu& proj_parm)
{
pj_enfn(par.es, proj_parm.en);
-
+
if (par.es) {
// par.inv = e_inverse;
// par.fwd = e_forward;
@@ -204,7 +202,7 @@
}
}} // namespace detail::gn_sinu
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Sinusoidal (Sanson-Flamsteed) projection
@@ -371,10 +369,10 @@
factory.add_to_factory("mbtfps", new mbtfps_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_GN_SINU_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gnom.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gnom.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gnom.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gnom{
+ namespace detail { namespace gnom{
static const double EPS10 = 1.e-10;
static const int N_POLE = 0;
static const int S_POLE = 1;
@@ -77,7 +77,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, cosphi, sinphi;
-
+
sinphi = sin(lp_lat);
cosphi = cos(lp_lat);
coslam = cos(lp_lon);
@@ -115,7 +115,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double rh, cosz, sinz;
-
+
rh = boost::math::hypot(xy_x, xy_y);
sinz = sin(lp_lat = atan(rh));
cosz = sqrt(1. - sinz * sinz);
@@ -174,7 +174,7 @@
}
}} // namespace detail::gnom
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Gnomonic projection
@@ -218,10 +218,10 @@
factory.add_to_factory("gnom", new gnom_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_GNOM_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/goode.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/goode.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/goode.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -45,10 +45,10 @@
#include <boost/geometry/extensions/gis/projections/proj/moll.hpp>
#include <boost/geometry/extensions/gis/projections/proj/gn_sinu.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace goode{
+ namespace detail { namespace goode{
static const double Y_COR = 0.05280;
static const double PHI_LIM = .71093078197902358062;
@@ -57,7 +57,7 @@
{
sinu_ellipsoid<Geographic, Cartesian, Parameters> sinu;
moll_spheroid<Geographic, Cartesian, Parameters> moll;
-
+
par_goode(const Parameters& par) : sinu(par), moll(par) {}
};
@@ -107,7 +107,7 @@
}
}} // namespace detail::goode
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Goode Homolosine projection
@@ -151,10 +151,10 @@
factory.add_to_factory("goode", new goode_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_GOODE_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gstmerc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gstmerc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/gstmerc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,10 +44,10 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_tsfn.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_phi2.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gstmerc{
+ namespace detail { namespace gstmerc{
struct par_gstmerc
{
@@ -59,7 +59,7 @@
double XS;
double YS;
};
-
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -121,7 +121,7 @@
}
}} // namespace detail::gstmerc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion) projection
@@ -167,10 +167,10 @@
factory.add_to_factory("gstmerc", new gstmerc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_GSTMERC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/hammer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/hammer.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/hammer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace hammer{
+ namespace detail { namespace hammer{
struct par_hammer
{
@@ -71,7 +71,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double cosphi, d;
-
+
d = sqrt(2./(1. + (cosphi = cos(lp_lat)) * cos(lp_lon *= this->m_proj_parm.w)));
xy_x = this->m_proj_parm.m * d * cosphi * sin(lp_lon);
xy_y = this->m_proj_parm.rm * d * sin(lp_lat);
@@ -97,7 +97,7 @@
}
}} // namespace detail::hammer
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Hammer & Eckert-Greifendorff projection
@@ -143,10 +143,10 @@
factory.add_to_factory("hammer", new hammer_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_HAMMER_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/hatano.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/hatano.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/hatano.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace hatano{
+ namespace detail { namespace hatano{
static const int NITER = 20;
static const double EPS = 1e-7;
static const double ONETOL = 1.000001;
@@ -79,7 +79,7 @@
{
double th1, c;
int i;
-
+
c = sin(lp_lat) * (lp_lat < 0. ? CS : CN);
for (i = NITER; i; --i) {
lp_lat -= th1 = (lp_lat + sin(lp_lat) - c) / (1. + cos(lp_lat));
@@ -92,7 +92,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double th;
-
+
th = xy_y * ( xy_y < 0. ? RYCS : RYCN);
if (fabs(th) > 1.)
if (fabs(th) > ONETOL) throw proj_exception();
@@ -120,7 +120,7 @@
}
}} // namespace detail::hatano
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Hatano Asymmetrical Equal Area projection
@@ -164,10 +164,10 @@
factory.add_to_factory("hatano", new hatano_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_HATANO_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/imw_p.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/imw_p.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/imw_p.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace imw_p{
+ namespace detail { namespace imw_p{
static const double TOL = 1e-10;
static const double EPS = 1e-10;
@@ -63,7 +63,7 @@
inline int
phi12(Parameters& par, par_imw_p& proj_parm, double *del, double *sig) {
int err = 0;
-
+
if (!pj_param(par.params, "tlat_1").i ||
!pj_param(par.params, "tlat_2").i) {
err = -41;
@@ -80,13 +80,13 @@
inline PXY
loc_for(double const& lp_lam, double const& lp_phi, const Parameters& par, par_imw_p const& proj_parm, double *yc) {
PXY xy;
-
+
if (! lp_phi) {
xy.x = lp_lam;
xy.y = 0.;
} else {
double xa, ya, xb, yb, xc, D, B, m, sp, t, R, C;
-
+
sp = sin(lp_phi);
m = pj_mlfn(lp_phi, sp, cos(lp_phi), proj_parm.en);
xa = proj_parm.Pp + proj_parm.Qp * m;
@@ -124,19 +124,19 @@
}
return (xy);
}
-
+
template <typename Parameters>
inline void
xy(Parameters& par, par_imw_p& proj_parm, double phi, double *x, double *y, double *sp, double *R) {
double F;
-
+
*sp = sin(phi);
*R = 1./(tan(phi) * sqrt(1. - par.es * *sp * *sp ));
F = proj_parm.lam_1 * *sp;
*y = *R * (1 - cos(F));
*x = *R * sin(F);
}
-
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -164,7 +164,7 @@
{
PXY t;
double yc = 0;
-
+
lp_lat = this->m_proj_parm.phi_2;
lp_lon = xy_x / cos(lp_lat);
do {
@@ -227,7 +227,7 @@
}
}} // namespace detail::imw_p
- #endif // doxygen
+ #endif // doxygen
/*!
\brief International Map of the World Polyconic projection
@@ -272,10 +272,10 @@
factory.add_to_factory("imw_p", new imw_p_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_IMW_P_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/krovak.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/krovak.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/krovak.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,45 +42,45 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace krovak{
+ namespace detail { namespace krovak{
struct par_krovak
{
double C_x;
};
-
-
-
-
-
+
+
+
+
+
/**
NOTES: According to EPSG the full Krovak projection method should have
the following parameters. Within PROJ.4 the azimuth, and pseudo
- standard parallel are hardcoded in the algorithm and can't be
+ standard parallel are hardcoded in the algorithm and can't be
altered from outside. The others all have defaults to match the
common usage with Krovak projection.
-
+
lat_0 = latitude of centre of the projection
-
+
lon_0 = longitude of centre of the projection
-
+
** = azimuth (true) of the centre line passing through the centre of the projection
-
+
** = latitude of pseudo standard parallel
-
+
k = scale factor on the pseudo standard parallel
-
+
x_0 = False Easting of the centre of the projection at the apex of the cone
-
+
y_0 = False Northing of the centre of the projection at the apex of the cone
-
+
**/
-
-
-
+
+
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -100,20 +100,17 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
/* calculate xy from lat/lon */
-
-
-
-
+
/* Constants, identical to inverse transform function */
double s45, s90, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n;
double gfi, u, fi0, deltav, s, d, eps, ro;
-
-
+
+
s45 = 0.785398163397448; /* 45 DEG */
s90 = 2 * s45;
fi0 = this->m_par.phi0; /* Latitude of projection centre 49 DEG 30' */
-
- /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must
+
+ /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must
be set to 1 here.
Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128,
e2=0.006674372230614;
@@ -122,67 +119,67 @@
/* e2 = this->m_par.es;*/ /* 0.006674372230614; */
e2 = 0.006674372230614;
e = sqrt(e2);
-
+
alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2));
-
+
uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */
u0 = asin(sin(fi0) / alfa);
g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. );
-
+
k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g;
-
+
k1 = this->m_par.k0;
n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2));
s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78 DEG 30'00" N */
n = sin(s0);
ro0 = k1 * n0 / tan(s0);
ad = s90 - uq;
-
+
/* Transformation */
-
+
gfi =pow ( ((1. + e * sin(lp_lat)) /
(1. - e * sin(lp_lat))) , (alfa * e / 2.));
-
+
u= 2. * (atan(k * pow( tan(lp_lat / 2. + s45), alfa) / gfi)-s45);
-
+
deltav = - lp_lon * alfa;
-
+
s = asin(cos(ad) * sin(u) + sin(ad) * cos(u) * cos(deltav));
d = asin(cos(u) * sin(deltav) / cos(s));
eps = n * d;
ro = ro0 * pow(tan(s0 / 2. + s45) , n) / pow(tan(s / 2. + s45) , n) ;
-
+
/* x and y are reverted! */
xy_y = ro * cos(eps) / a;
xy_x = ro * sin(eps) / a;
-
+
if( !pj_param(this->m_par.params, "tczech").i )
{
xy_y *= -1.0;
xy_x *= -1.0;
}
-
+
return;
}
-
-
-
+
+
+
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
/* calculate lat/lon from xy */
-
+
/* Constants, identisch wie in der Umkehrfunktion */
double s45, s90, fi0, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n;
double u, deltav, s, d, eps, ro, fi1, xy0;
int ok;
-
+
s45 = 0.785398163397448; /* 45 DEG */
s90 = 2 * s45;
fi0 = this->m_par.phi0; /* Latitude of projection centre 49 DEG 30' */
-
-
- /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must
+
+
+ /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must
be set to 1 here.
Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128,
e2=0.006674372230614;
@@ -191,47 +188,47 @@
/* e2 = this->m_par.es; */ /* 0.006674372230614; */
e2 = 0.006674372230614;
e = sqrt(e2);
-
+
alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2));
uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */
u0 = asin(sin(fi0) / alfa);
g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. );
-
+
k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g;
-
+
k1 = this->m_par.k0;
n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2));
s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78 DEG 30'00" N */
n = sin(s0);
ro0 = k1 * n0 / tan(s0);
ad = s90 - uq;
-
-
+
+
/* Transformation */
/* revert y, x*/
xy0=xy_x;
xy_x=xy_y;
xy_y=xy0;
-
+
if( !pj_param(this->m_par.params, "tczech").i )
{
xy_x *= -1.0;
xy_y *= -1.0;
}
-
+
ro = sqrt(xy_x * xy_x + xy_y * xy_y);
eps = atan2(xy_y, xy_x);
d = eps / sin(s0);
s = 2. * (atan( pow(ro0 / ro, 1. / n) * tan(s0 / 2. + s45)) - s45);
-
+
u = asin(cos(ad) * sin(s) - sin(ad) * cos(s) * cos(d));
deltav = asin(cos(s) * sin(d) / cos(u));
-
+
lp_lon = this->m_par.lam0 - deltav / alfa;
-
+
/* ITERATION FOR lp_lat */
fi1 = u;
-
+
ok = 0;
do
{
@@ -239,18 +236,18 @@
pow( tan(u / 2. + s45) , 1. / alfa) *
pow( (1. + e * sin(fi1)) / (1. - e * sin(fi1)) , e / 2.)
) - s45);
-
+
if (fabs(fi1 - lp_lat) < 0.000000000000001) ok=1;
fi1 = lp_lat;
-
+
}
while (ok==0);
-
+
lp_lon -= this->m_par.lam0;
-
+
return;
}
-
+
};
// Krovak
@@ -262,14 +259,14 @@
* here Latitude Truescale */
ts = pj_param(par.params, "rlat_ts").f;
proj_parm.C_x = ts;
-
+
/* we want Bessel as fixed ellipsoid */
par.a = 6377397.155;
par.e = sqrt(par.es = 0.006674372230614);
/* if latitude of projection center is not set, use 49d30'N */
if (!pj_param(par.params, "tlat_0").i)
par.phi0 = 0.863937979737193;
-
+
/* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */
/* that will correspond to using longitudes relative to greenwich */
/* as input and output, instead of lat/long relative to Ferro */
@@ -280,12 +277,12 @@
par.k0 = 0.9999;
/* always the same */
// par.inv = e_inverse;
-
+
// par.fwd = e_forward;
}
}} // namespace detail::krovak
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Krovak projection
@@ -329,10 +326,10 @@
factory.add_to_factory("krovak", new krovak_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_KROVAK_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/labrd.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/labrd.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/labrd.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace labrd{
+ namespace detail { namespace labrd{
static const double EPS = 1.e-10;
struct par_labrd
@@ -73,7 +73,7 @@
{
double V1, V2, ps, sinps, cosps, sinps2, cosps2, I1, I2, I3, I4, I5, I6,
x2, y2, t;
-
+
V1 = this->m_proj_parm.A * log( tan(FORTPI + .5 * lp_lat) );
t = this->m_par.e * sin(lp_lat);
V2 = .5 * this->m_par.e * this->m_proj_parm.A * log ((1. + t)/(1. - t));
@@ -104,7 +104,7 @@
double x2, y2, V1, V2, V3, V4, t, t2, ps, pe, tpe, s,
I7, I8, I9, I10, I11, d, Re;
int i;
-
+
x2 = xy_x * xy_x;
y2 = xy_y * xy_y;
V1 = 3. * xy_x * y2 - xy_x * x2;
@@ -177,7 +177,7 @@
}
}} // namespace detail::labrd
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Laborde projection
@@ -222,10 +222,10 @@
factory.add_to_factory("labrd", new labrd_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LABRD_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/laea.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/laea.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/laea.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,10 +44,10 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_qsfn.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_auth.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace laea{
+ namespace detail { namespace laea{
static const double EPS10 = 1.e-10;
static const int NITER = 20;
static const double CONV = 1.e-10;
@@ -88,7 +88,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0;
-
+
coslam = cos(lp_lon);
sinlam = sin(lp_lon);
sinphi = sin(lp_lat);
@@ -121,7 +121,7 @@
goto eqcon;
break;
case EQUIT:
- xy_y = (b = sqrt(2. / (1. + cosb * coslam))) * sinb * this->m_proj_parm.ymf;
+ xy_y = (b = sqrt(2. / (1. + cosb * coslam))) * sinb * this->m_proj_parm.ymf;
eqcon:
xy_x = this->m_proj_parm.xmf * b * cosb * sinlam;
break;
@@ -139,7 +139,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double cCe, sCe, q, rho, ab=0.0;
-
+
switch (this->m_proj_parm.mode) {
case EQUIT:
case OBLIQ:
@@ -197,7 +197,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, cosphi, sinphi;
-
+
sinphi = sin(lp_lat);
cosphi = cos(lp_lat);
coslam = cos(lp_lon);
@@ -228,7 +228,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double cosz=0.0, rh, sinz=0.0;
-
+
rh = boost::math::hypot(xy_x, xy_y);
if ((lp_lat = rh * .5 ) > 1.) throw proj_exception();;
lp_lat = 2. * asin(lp_lat);
@@ -312,7 +312,7 @@
}
}} // namespace detail::laea
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Lambert Azimuthal Equal Area projection
@@ -382,10 +382,10 @@
factory.add_to_factory("laea", new laea_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LAEA_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lagrng.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lagrng.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lagrng.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lagrng{
+ namespace detail { namespace lagrng{
static const double TOL = 1e-10;
struct par_lagrng
@@ -73,7 +73,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double v, c;
-
+
if (fabs(fabs(lp_lat) - HALFPI) < TOL) {
xy_x = 0;
xy_y = lp_lat < 0 ? -2. : 2.;
@@ -103,7 +103,7 @@
}
}} // namespace detail::lagrng
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Lagrange projection
@@ -149,10 +149,10 @@
factory.add_to_factory("lagrng", new lagrng_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LAGRNG_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/larr.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/larr.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/larr.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace larr{
+ namespace detail { namespace larr{
static const double SIXTH = .16666666666666666;
@@ -80,7 +80,7 @@
}
}} // namespace detail::larr
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Larrivee projection
@@ -125,10 +125,10 @@
factory.add_to_factory("larr", new larr_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LARR_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lask.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lask.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lask.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lask{
+ namespace detail { namespace lask{
static const double a10 = 0.975534;
static const double a12 = -0.119161;
static const double a32 = -0.0143059;
@@ -75,7 +75,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double l2, p2;
-
+
l2 = lp_lon * lp_lon;
p2 = lp_lat * lp_lat;
xy_x = lp_lon * (a10 + p2 * (a12 + l2 * a32 + p2 * a14));
@@ -94,7 +94,7 @@
}
}} // namespace detail::lask
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Laskowski projection
@@ -139,10 +139,10 @@
factory.add_to_factory("lask", new lask_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LASK_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/latlong.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/latlong.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/latlong.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,14 +44,14 @@
#include <boost/geometry/extensions/gis/projections/epsg_traits.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace latlong{
-
+ namespace detail { namespace latlong{
+
/* very loosely based upon DMA code by Bradford W. Drew */
-
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -69,14 +69,14 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
-
+
xy_x = lp_lon / this->m_par.a;
xy_y = lp_lat / this->m_par.a;
}
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
-
+
lp_lat = xy_y * this->m_par.a;
lp_lon = xy_x * this->m_par.a;
}
@@ -127,7 +127,7 @@
}
}} // namespace detail::latlong
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Lat/long (Geodetic) projection
@@ -259,7 +259,7 @@
factory.add_to_factory("longlat", new longlat_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
// Create EPSG specializations
// (Proof of Concept, only for some)
@@ -276,7 +276,7 @@
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LATLONG_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lcc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lcc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lcc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -47,10 +47,10 @@
#include <boost/geometry/extensions/gis/projections/epsg_traits.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lcc{
+ namespace detail { namespace lcc{
static const double EPS10 = 1.e-10;
struct par_lcc
@@ -180,7 +180,7 @@
}
}} // namespace detail::lcc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Lambert Conformal Conic projection
@@ -226,7 +226,7 @@
factory.add_to_factory("lcc", new lcc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
// Create EPSG specializations
// (Proof of Concept, only for some)
@@ -243,7 +243,7 @@
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LCC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lcca.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lcca.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lcca.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lcca{
+ namespace detail { namespace lcca{
static const int MAX_ITER = 10;
static const double DEL_TOL = 1e-12;
@@ -56,8 +56,8 @@
double r0, l, M0;
double C;
};
-
-
+
+
inline double /* func to compute dr */
fS(double S, double C) {
return(S * ( 1. + S * S * C));
@@ -85,7 +85,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double S, r, dr;
-
+
S = pj_mlfn(lp_lat, sin(lp_lat), cos(lp_lat), this->m_proj_parm.en) - this->m_proj_parm.M0;
dr = fS(S, this->m_proj_parm.C);
r = this->m_proj_parm.r0 - dr;
@@ -97,7 +97,7 @@
{
double theta, dr, S, dif;
int i;
-
+
xy_x /= this->m_par.k0;
xy_y /= this->m_par.k0;
theta = atan2(xy_x , this->m_proj_parm.r0 - xy_y);
@@ -136,7 +136,7 @@
}
}} // namespace detail::lcca
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Lambert Conformal Conic Alternative projection
@@ -182,10 +182,10 @@
factory.add_to_factory("lcca", new lcca_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LCCA_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/loxim.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/loxim.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/loxim.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace loxim{
+ namespace detail { namespace loxim{
static const double EPS = 1e-8;
struct par_loxim
@@ -111,7 +111,7 @@
}
}} // namespace detail::loxim
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Loximuthal projection
@@ -155,10 +155,10 @@
factory.add_to_factory("loxim", new loxim_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LOXIM_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lsat.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lsat.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/lsat.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lsat{
+ namespace detail { namespace lsat{
static const double TOL = 1e-7;
static const double PI_HALFPI = 4.71238898038468985766;
static const double TWOPI_HALFPI = 7.85398163397448309610;
@@ -60,14 +60,14 @@
inline void
seraz0(double lam, double mult, Parameters& par, par_lsat& proj_parm) {
double sdsq, h, s, fc, sd, sq, d__1;
-
+
lam *= DEG_TO_RAD;
sd = sin(lam);
sdsq = sd * sd;
s = proj_parm.p22 * proj_parm.sa * cos(lam) * sqrt((1. + proj_parm.t * sdsq) / ((
1. + proj_parm.w * sdsq) * (1. + proj_parm.q * sdsq)));
d__1 = 1. + proj_parm.q * sdsq;
- h = sqrt((1. + proj_parm.q * sdsq) / (1. + proj_parm.w * sdsq)) * ((1. +
+ h = sqrt((1. + proj_parm.q * sdsq) / (1. + proj_parm.w * sdsq)) * ((1. +
proj_parm.w * sdsq) / (d__1 * d__1) - proj_parm.p22 * proj_parm.ca);
sq = sqrt(proj_parm.xj * proj_parm.xj + s * s);
proj_parm.b += fc = mult * (h * proj_parm.xj - s * s) / sq;
@@ -98,7 +98,7 @@
int l, nn;
double lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph,
lamtp, cl, sd, sp, fac, sav, tanphi;
-
+
if (lp_lat > HALFPI)
lp_lat = HALFPI;
else if (lp_lat < -HALFPI)
@@ -131,7 +131,7 @@
}
if (l) {
sp = sin(lp_lat);
- phidp = aasin((this->m_par.one_es * this->m_proj_parm.ca * sp - this->m_proj_parm.sa * cos(lp_lat) *
+ phidp = aasin((this->m_par.one_es * this->m_proj_parm.ca * sp - this->m_proj_parm.sa * cos(lp_lat) *
sin(lamt)) / sqrt(1. - this->m_par.es * sp * sp));
tanph = log(tan(FORTPI + .5 * phidp));
sd = sin(lamdp);
@@ -150,7 +150,7 @@
{
int nn;
double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp;
-
+
lamdp = xy_x / this->m_proj_parm.b;
nn = 50;
do {
@@ -165,7 +165,7 @@
lamdp /= this->m_proj_parm.b;
} while (fabs(lamdp - sav) >= TOL && --nn);
sl = sin(lamdp);
- fac = exp(sqrt(1. + s * s / this->m_proj_parm.xj / this->m_proj_parm.xj) * (xy_y -
+ fac = exp(sqrt(1. + s * s / this->m_proj_parm.xj / this->m_proj_parm.xj) * (xy_y -
this->m_proj_parm.c1 * sl - this->m_proj_parm.c3 * sin(lamdp * 3.)));
phidp = 2. * (atan(fac) - FORTPI);
dd = sl * sl;
@@ -173,9 +173,9 @@
lamdp -= TOL;
spp = sin(phidp);
sppsq = spp * spp;
- lamt = atan(((1. - sppsq * this->m_par.rone_es) * tan(lamdp) *
+ lamt = atan(((1. - sppsq * this->m_par.rone_es) * tan(lamdp) *
this->m_proj_parm.ca - spp * this->m_proj_parm.sa * sqrt((1. + this->m_proj_parm.q * dd) * (
- 1. - sppsq) - sppsq * this->m_proj_parm.u) / cos(lamdp)) / (1. - sppsq
+ 1. - sppsq) - sppsq * this->m_proj_parm.u) / cos(lamdp)) / (1. - sppsq
* (1. + this->m_proj_parm.u)));
sl = lamt >= 0. ? 1. : -1.;
scl = cos(lamdp) >= 0. ? 1. : -1;
@@ -244,7 +244,7 @@
}
}} // namespace detail::lsat
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Space oblique for LANDSAT projection
@@ -290,10 +290,10 @@
factory.add_to_factory("lsat", new lsat_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_LSAT_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbt_fps.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbt_fps.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbt_fps.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mbt_fps{
+ namespace detail { namespace mbt_fps{
static const int MAX_ITER = 10;
static const double LOOP_TOL = 1e-7;
static const double C1 = 0.45503;
@@ -74,7 +74,7 @@
{
double k, V, t;
int i;
-
+
k = C3 * sin(lp_lat);
for (i = MAX_ITER; i ; --i) {
t = lp_lat / C2;
@@ -91,7 +91,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double t;
-
+
lp_lat = C2 * (t = aasin(xy_y / C_y));
lp_lon = xy_x / (C_x * (1. + 3. * cos(lp_lat)/cos(t)));
lp_lat = aasin((C1 * sin(t) + sin(lp_lat)) / C3);
@@ -108,7 +108,7 @@
}
}} // namespace detail::mbt_fps
- #endif // doxygen
+ #endif // doxygen
/*!
\brief McBryde-Thomas Flat-Pole Sine (No. 2) projection
@@ -152,10 +152,10 @@
factory.add_to_factory("mbt_fps", new mbt_fps_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_MBT_FPS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbtfpp.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbtfpp.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbtfpp.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mbtfpp{
+ namespace detail { namespace mbtfpp{
static const double CS = .95257934441568037152;
static const double FXC = .92582009977255146156;
static const double FYC = 3.40168025708304504493;
@@ -102,7 +102,7 @@
}
}} // namespace detail::mbtfpp
- #endif // doxygen
+ #endif // doxygen
/*!
\brief McBride-Thomas Flat-Polar Parabolic projection
@@ -146,10 +146,10 @@
factory.add_to_factory("mbtfpp", new mbtfpp_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_MBTFPP_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbtfpq.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbtfpq.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mbtfpq.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mbtfpq{
+ namespace detail { namespace mbtfpq{
static const int NITER = 20;
static const double EPS = 1e-7;
static const double ONETOL = 1.000001;
@@ -75,7 +75,7 @@
{
double th1, c;
int i;
-
+
c = C * sin(lp_lat);
for (i = NITER; i; --i) {
lp_lat -= th1 = (sin(.5*lp_lat) + sin(lp_lat) - c) /
@@ -89,7 +89,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double t;
-
+
lp_lat = RYC * xy_y;
if (fabs(lp_lat) > 1.) {
if (fabs(lp_lat) > ONETOL) throw proj_exception();
@@ -117,7 +117,7 @@
}
}} // namespace detail::mbtfpq
- #endif // doxygen
+ #endif // doxygen
/*!
\brief McBryde-Thomas Flat-Polar Quartic projection
@@ -161,10 +161,10 @@
factory.add_to_factory("mbtfpq", new mbtfpq_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_MBTFPQ_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/merc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/merc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/merc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -45,10 +45,10 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_tsfn.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_phi2.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace merc{
+ namespace detail { namespace merc{
static const double EPS10 = 1.e-10;
@@ -132,7 +132,7 @@
}
}} // namespace detail::merc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Mercator projection
@@ -204,10 +204,10 @@
factory.add_to_factory("merc", new merc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_MERC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mill.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mill.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mill.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mill{
+ namespace detail { namespace mill{
// template class, using CRTP to implement forward/inverse
@@ -85,7 +85,7 @@
}
}} // namespace detail::mill
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Miller Cylindrical projection
@@ -129,10 +129,10 @@
factory.add_to_factory("mill", new mill_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_MILL_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mod_ster.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mod_ster.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/mod_ster.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,10 +44,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_zpoly1.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mod_ster{
+ namespace detail { namespace mod_ster{
static const double EPSLN = 1e-10;
struct par_mod_ster
@@ -57,7 +57,7 @@
int n;
};
/* based upon Snyder and Linck, USGS-NMD */
-
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -78,7 +78,7 @@
{
double sinlon, coslon, esphi, chi, schi, cchi, s;
COMPLEX p;
-
+
sinlon = sin(lp_lon);
coslon = cos(lp_lon);
esphi = this->m_par.e * sin(lp_lat);
@@ -99,7 +99,7 @@
int nn;
COMPLEX p, fxy, fpxy, dp;
double den, rh = 0, z, sinz = 0, cosz = 0, chi, phi = 0, dphi, esphi;
-
+
p.r = xy_x;
p.i = xy_y;
for (nn = 20; nn ;--nn) {
@@ -137,7 +137,7 @@
}
if (nn) {
lp_lat = phi;
- lp_lon = atan2(p.r * sinz, rh * this->m_proj_parm.cchio * cosz - p.i *
+ lp_lon = atan2(p.r * sinz, rh * this->m_proj_parm.cchio * cosz - p.i *
this->m_proj_parm.schio * sinz);
} else
lp_lon = lp_lat = HUGE_VAL;
@@ -298,7 +298,7 @@
}
}} // namespace detail::mod_ster
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Miller Oblated Stereographic projection
@@ -465,10 +465,10 @@
factory.add_to_factory("gs50", new gs50_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_MOD_STER_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/moll.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/moll.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/moll.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,11 +42,12 @@
#include <boost/geometry/extensions/gis/projections/impl/base_dynamic.hpp>
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
+#include <boost/geometry/extensions/gis/projections/impl/aasincos.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace moll{
+ namespace detail { namespace moll{
static const int MAX_ITER = 10;
static const double LOOP_TOL = 1e-7;
@@ -74,7 +75,7 @@
{
double k, V;
int i;
-
+
k = this->m_proj_parm.C_p * sin(lp_lat);
for (i = MAX_ITER; i ; --i) {
lp_lat -= V = (lp_lat + sin(lp_lat) - k) /
@@ -92,8 +93,6 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
-
-
lp_lat = aasin(xy_y / this->m_proj_parm.C_y);
lp_lon = xy_x / (this->m_proj_parm.C_x * cos(lp_lat));
lp_lat += lp_lat;
@@ -102,7 +101,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_moll& proj_parm, double p)
+ void setup(Parameters& par, par_moll& proj_parm, double p)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -145,7 +144,7 @@
}
}} // namespace detail::moll
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Mollweide projection
@@ -253,10 +252,10 @@
factory.add_to_factory("wag5", new wag5_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_MOLL_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nell.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nell.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nell.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nell{
+ namespace detail { namespace nell{
static const int MAX_ITER = 10;
static const double LOOP_TOL = 1e-7;
@@ -68,7 +68,7 @@
{
double k, V;
int i;
-
+
k = 2. * sin(lp_lat);
V = lp_lat * lp_lat;
lp_lat *= 1.00371 + V * (-0.0935382 + V * -0.011412);
@@ -84,8 +84,6 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
-
-
lp_lon = 2. * xy_x / (1. + cos(xy_y));
lp_lat = aasin(0.5 * (xy_y + sin(xy_y)));
}
@@ -101,7 +99,7 @@
}
}} // namespace detail::nell
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Nell projection
@@ -145,10 +143,10 @@
factory.add_to_factory("nell", new nell_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_NELL_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nell_h.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nell_h.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nell_h.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nell_h{
+ namespace detail { namespace nell_h{
static const int NITER = 9;
static const double EPS = 1e-7;
@@ -74,7 +74,7 @@
{
double V, c, p;
int i;
-
+
p = 0.5 * xy_y;
for (i = NITER; i ; --i) {
c = cos(0.5 * lp_lat);
@@ -100,7 +100,7 @@
}
}} // namespace detail::nell_h
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Nell-Hammer projection
@@ -144,10 +144,10 @@
factory.add_to_factory("nell_h", new nell_h_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_NELL_H_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nocol.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nocol.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nocol.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nocol{
+ namespace detail { namespace nocol{
static const double EPS = 1e-10;
@@ -79,7 +79,7 @@
xy_y = lp_lat;
} else {
double tb, c, d, m, n, r2, sp;
-
+
tb = HALFPI / lp_lon - lp_lon / HALFPI;
c = lp_lat / HALFPI;
d = (1 - c * c)/((sp = sin(lp_lat)) - c);
@@ -106,7 +106,7 @@
}
}} // namespace detail::nocol
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Nicolosi Globular projection
@@ -151,10 +151,10 @@
factory.add_to_factory("nicol", new nicol_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_NOCOL_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nsper.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nsper.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nsper.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nsper{
+ namespace detail { namespace nsper{
static const double EPS10 = 1.e-10;
static const int N_POLE = 0;
static const int S_POLE = 1;
@@ -89,7 +89,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, cosphi, sinphi;
-
+
sinphi = sin(lp_lat);
cosphi = cos(lp_lat);
coslam = cos(lp_lon);
@@ -126,7 +126,7 @@
}
if (this->m_proj_parm.tilt) {
double yt, ba;
-
+
yt = xy_y * this->m_proj_parm.cg + xy_x * this->m_proj_parm.sg;
ba = 1. / (yt * this->m_proj_parm.sw * this->m_proj_parm.h + this->m_proj_parm.cw);
xy_x = (xy_x * this->m_proj_parm.cg - xy_y * this->m_proj_parm.sg) * this->m_proj_parm.cw * ba;
@@ -137,10 +137,10 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double rh, cosz, sinz;
-
+
if (this->m_proj_parm.tilt) {
double bm, bq, yt;
-
+
yt = 1./(this->m_proj_parm.pn1 - xy_y * this->m_proj_parm.sw);
bm = this->m_proj_parm.pn1 * xy_x * yt;
bq = this->m_proj_parm.pn1 * xy_y * this->m_proj_parm.cw * yt;
@@ -180,7 +180,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_nsper& proj_parm)
+ void setup(Parameters& par, par_nsper& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -230,7 +230,7 @@
}
}} // namespace detail::nsper
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Near-sided perspective projection
@@ -308,10 +308,10 @@
factory.add_to_factory("tpers", new tpers_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_NSPER_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nzmg.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nzmg.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/nzmg.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nzmg{
+ namespace detail { namespace nzmg{
static const double EPSLN = 1e-10;
static const double SEC5_TO_RAD = 0.4848136811095359935899141023;
static const double RAD_TO_SEC5 = 2.062648062470963551564733573;
@@ -53,10 +53,10 @@
static const int Ntpsi = 9;
static const int Ntphi = 8;
-
-
-
-
+
+
+
+
static COMPLEX
bf[] = {
{.7557853228, 0.0},
@@ -90,7 +90,7 @@
COMPLEX p;
double *C;
int i;
-
+
lp_lat = (lp_lat - this->m_par.phi0) * RAD_TO_SEC5;
for (p.r = *(C = tpsi + (i = Ntpsi)); i ; --i)
p.r = *--C + lp_lat * p.r;
@@ -106,7 +106,7 @@
int nn, i;
COMPLEX p, f, fp, dp;
double den, *C;
-
+
p.r = xy_y;
p.i = xy_x;
for (nn = 20; nn ;--nn) {
@@ -144,7 +144,7 @@
}
}} // namespace detail::nzmg
- #endif // doxygen
+ #endif // doxygen
/*!
\brief New Zealand Map Grid projection
@@ -187,10 +187,10 @@
factory.add_to_factory("nzmg", new nzmg_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_NZMG_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ob_tran.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ob_tran.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ob_tran.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,13 +43,13 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
template <typename Geographic, typename Cartesian, typename Parameters> class factory;
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace ob_tran{
+ namespace detail { namespace ob_tran{
static const double TOL = 1e-10;
template <typename Geographic, typename Cartesian>
@@ -78,9 +78,9 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, sinphi, cosphi;
-
-
-
+
+
+
coslam = cos(lp_lon);
sinphi = sin(lp_lat);
cosphi = cos(lp_lat);
@@ -93,7 +93,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double coslam, sinphi, cosphi;
-
+
m_proj_parm.link->inv(xy_x, xy_y, lp_lon, lp_lat);
if (lp_lon != HUGE_VAL) {
coslam = cos(lp_lon -= this->m_proj_parm.lamp);
@@ -124,9 +124,9 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double cosphi, coslam;
-
-
-
+
+
+
cosphi = cos(lp_lat);
coslam = cos(lp_lon);
lp_lon = adjlon(aatan2(cosphi * sin(lp_lon), sin(lp_lat)) + this->m_proj_parm.lamp);
@@ -137,7 +137,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double cosphi, t;
-
+
m_proj_parm.link->inv(xy_x, xy_y, lp_lon, lp_lat);
if (lp_lon != HUGE_VAL) {
cosphi = cos(lp_lat);
@@ -154,8 +154,8 @@
{
int i;
double phip;
-
-
+
+
Parameters pj;
/* copy existing header into new */
par.es = 0.;
@@ -175,7 +175,7 @@
pj.one_es = pj.rone_es = 1.;
pj.es = pj.e = 0.;
pj.name = pj_param(par.params, "so_proj").s;
-
+
factory<Geographic, Cartesian, Parameters> fac;
if (create)
{
@@ -230,7 +230,7 @@
}
}} // namespace detail::ob_tran
- #endif // doxygen
+ #endif // doxygen
/*!
\brief General Oblique Transformation projection
@@ -309,10 +309,10 @@
factory.add_to_factory("ob_tran", new ob_tran_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_OB_TRAN_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ocea.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ocea.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ocea.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace ocea{
+ namespace detail { namespace ocea{
struct par_ocea
{
@@ -75,7 +75,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double t;
-
+
xy_y = sin(lp_lon);
/*
xy_x = atan2((tan(lp_lat) * this->m_proj_parm.cosphi + this->m_proj_parm.sinphi * xy_y) , cos(lp_lon));
@@ -91,7 +91,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double t, s;
-
+
xy_y /= this->m_proj_parm.rok;
xy_x /= this->m_proj_parm.rtk;
t = sqrt(1. - xy_y * xy_y);
@@ -135,7 +135,7 @@
}
}} // namespace detail::ocea
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Oblique Cylindrical Equal Area projection
@@ -180,10 +180,10 @@
factory.add_to_factory("ocea", new ocea_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_OCEA_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/oea.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/oea.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/oea.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace oea{
+ namespace detail { namespace oea{
struct par_oea
{
@@ -73,7 +73,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double Az, M, N, cp, sp, cl, shz;
-
+
cp = cos(lp_lat);
sp = sin(lp_lat);
cl = cos(lp_lon);
@@ -88,7 +88,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double N, M, xp, yp, z, Az, cz, sz, cAz;
-
+
N = this->m_proj_parm.hn * aasin(xy_y * this->m_proj_parm.rn);
M = this->m_proj_parm.hm * aasin(xy_x * this->m_proj_parm.rm * cos(N * this->m_proj_parm.two_r_n) / cos(N));
xp = 2. * sin(M);
@@ -127,7 +127,7 @@
}
}} // namespace detail::oea
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Oblated Equal Area projection
@@ -172,10 +172,10 @@
factory.add_to_factory("oea", new oea_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_OEA_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/omerc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/omerc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/omerc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,14 +44,14 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_tsfn.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_phi2.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace omerc{
+ namespace detail { namespace omerc{
static const double TOL = 1.e-7;
static const double EPS = 1.e-10;
- inline double TSFN0(double x)
+ inline double TSFN0(double x)
{return tan(.5 * (HALFPI - (x))); }
@@ -61,8 +61,8 @@
double v_pole_n, v_pole_s, u_0;
int no_rot;
};
-
-
+
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -82,7 +82,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double Q, S, T, U, V, temp, u, v;
-
+
if (fabs(fabs(lp_lat) - HALFPI) > EPS) {
Q = this->m_proj_parm.E / pow(pj_tsfn(lp_lat, sin(lp_lat), this->m_par.e), this->m_proj_parm.B);
temp = 1. / Q;
@@ -95,7 +95,7 @@
v = 0.5 * this->m_proj_parm.ArB * log((1. - U)/(1. + U));
temp = cos(this->m_proj_parm.B * lp_lon);
u = (fabs(temp) < TOL) ? this->m_proj_parm.AB * lp_lon :
- this->m_proj_parm.ArB * atan2((S * this->m_proj_parm.cosgam + V * this->m_proj_parm.singam) , temp);
+ this->m_proj_parm.ArB * atan2((S * this->m_proj_parm.cosgam + V * this->m_proj_parm.singam) , temp);
} else {
v = lp_lat > 0 ? this->m_proj_parm.v_pole_n : this->m_proj_parm.v_pole_s;
u = this->m_proj_parm.ArB * lp_lat;
@@ -113,7 +113,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double u, v, Qp, Sp, Tp, Vp, Up;
-
+
if (this->m_proj_parm.no_rot) {
v = xy_y;
u = xy_x;
@@ -147,13 +147,17 @@
gamma0, lamc, lam1, lam2, phi1, phi2, alpha_c;
int alp, gam, no_off = 0;
proj_parm.no_rot = pj_param(par.params, "tno_rot").i;
- if ((alp = pj_param(par.params, "talpha").i))
+ if ((alp = pj_param(par.params, "talpha").i) != 0)
alpha_c = pj_param(par.params, "ralpha").f;
- if ((gam = pj_param(par.params, "tgamma").i))
+ if ((gam = pj_param(par.params, "tgamma").i) != 0)
gamma = pj_param(par.params, "rgamma").f;
if (alp || gam) {
lamc = pj_param(par.params, "rlonc").f;
- no_off = pj_param(par.params, "tno_off").i;
+ no_off =
+ /* For libproj4 compatability */
+ pj_param(par.params, "tno_off").i
+ /* for backward compatibility */
+ || pj_param(par.params, "tno_uoff").i;
} else {
lam1 = pj_param(par.params, "rlon_1").f;
phi1 = pj_param(par.params, "rlat_1").f;
@@ -239,7 +243,7 @@
}
}} // namespace detail::omerc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Oblique Mercator projection
@@ -286,10 +290,10 @@
factory.add_to_factory("omerc", new omerc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_OMERC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ortho.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ortho.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/ortho.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace ortho{
+ namespace detail { namespace ortho{
static const double EPS10 = 1.e-10;
static const int N_POLE = 0;
static const int S_POLE = 1;
@@ -77,7 +77,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, cosphi, sinphi;
-
+
cosphi = cos(lp_lat);
coslam = cos(lp_lon);
switch (this->m_proj_parm.mode) {
@@ -100,12 +100,12 @@
xy_x = cosphi * sin(lp_lon);
return;
}
-
+
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double rh, cosc, sinc;
-
+
if ((sinc = (rh = boost::math::hypot(xy_x, xy_y))) > 1.) {
if ((sinc - 1.) > EPS10) throw proj_exception();;
sinc = 1.;
@@ -145,7 +145,7 @@
}
return;
}
-
+
};
// Orthographic
@@ -166,7 +166,7 @@
}
}} // namespace detail::ortho
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Orthographic projection
@@ -210,10 +210,10 @@
factory.add_to_factory("ortho", new ortho_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_ORTHO_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/poly.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/poly.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/poly.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,10 +44,10 @@
#include <boost/geometry/extensions/gis/projections/impl/pj_msfn.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_mlfn.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace poly{
+ namespace detail { namespace poly{
static const double TOL = 1e-10;
static const double CONV = 1e-10;
static const int N_ITER = 10;
@@ -78,7 +78,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double ms, sp, cp;
-
+
if (fabs(lp_lat) <= TOL) { xy_x = lp_lon; xy_y = -this->m_proj_parm.ml0; }
else {
sp = sin(lp_lat);
@@ -95,7 +95,7 @@
else {
double r, c, sp, cp, s2ph, ml, mlb, mlp, dPhi;
int i;
-
+
r = xy_y * xy_y + xy_x * xy_x;
for (lp_lat = xy_y, i = I_ITER; i ; --i) {
sp = sin(lp_lat);
@@ -139,7 +139,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double cot, E;
-
+
if (fabs(lp_lat) <= TOL) { xy_x = lp_lon; xy_y = this->m_proj_parm.ml0; }
else {
cot = 1. / tan(lp_lat);
@@ -152,7 +152,7 @@
{
double B, dphi, tp;
int i;
-
+
if (fabs(xy_y = this->m_par.phi0 + xy_y) <= TOL) { lp_lon = xy_x; lp_lat = 0.; }
else {
lp_lat = xy_y;
@@ -187,7 +187,7 @@
}
}} // namespace detail::poly
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Polyconic (American) projection
@@ -257,10 +257,10 @@
factory.add_to_factory("poly", new poly_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_POLY_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp2.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp2.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp2.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp2{
+ namespace detail { namespace putp2{
static const double C_x = 1.89490;
static const double C_y = 1.71848;
static const double C_p = 0.6141848493043784;
@@ -72,7 +72,7 @@
{
double p, c, s, V;
int i;
-
+
p = C_p * sin(lp_lat);
s = lp_lat * lp_lat;
lp_lat *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 );
@@ -93,7 +93,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double c;
-
+
lp_lat = aasin(xy_y / C_y);
lp_lon = xy_x / (C_x * ((c = cos(lp_lat)) - 0.5));
lp_lat = aasin((lp_lat + sin(lp_lat) * (c - 1.)) / C_p);
@@ -110,7 +110,7 @@
}
}} // namespace detail::putp2
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Putnins P2 projection
@@ -154,10 +154,10 @@
factory.add_to_factory("putp2", new putp2_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP2_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp3.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp3.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp3.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp3{
+ namespace detail { namespace putp3{
static const double C = 0.79788456;
static const double RPISQ = 0.1013211836;
@@ -84,7 +84,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_putp3& proj_parm)
+ void setup(Parameters& par, par_putp3& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -111,7 +111,7 @@
}
}} // namespace detail::putp3
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Putnins P3 projection
@@ -188,10 +188,10 @@
factory.add_to_factory("putp3p", new putp3p_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP3_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp4p.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp4p.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp4p.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp4p{
+ namespace detail { namespace putp4p{
struct par_putp4p
{
@@ -87,7 +87,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_putp4p& proj_parm)
+ void setup(Parameters& par, par_putp4p& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -116,7 +116,7 @@
}
}} // namespace detail::putp4p
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Putnins P4' projection
@@ -192,10 +192,10 @@
factory.add_to_factory("weren", new weren_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP4P_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp5.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp5.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp5.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp5{
+ namespace detail { namespace putp5{
static const double C = 1.01346;
static const double D = 1.2158542;
@@ -84,7 +84,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_putp5& proj_parm)
+ void setup(Parameters& par, par_putp5& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -113,7 +113,7 @@
}
}} // namespace detail::putp5
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Putnins P5 projection
@@ -189,10 +189,10 @@
factory.add_to_factory("putp5p", new putp5p_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP5_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp6.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp6.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/putp6.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp6{
+ namespace detail { namespace putp6{
static const double EPS = 1e-10;
static const int NITER = 10;
static const double CON_POLE = 1.732050807568877;
@@ -75,7 +75,7 @@
{
double p, r, V;
int i;
-
+
p = this->m_proj_parm.B * sin(lp_lat);
lp_lat *= 1.10265779;
for (i = NITER; i ; --i) {
@@ -94,7 +94,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double r;
-
+
lp_lat = xy_y / this->m_proj_parm.C_y;
r = sqrt(1. + lp_lat * lp_lat);
lp_lon = xy_x / (this->m_proj_parm.C_x * (this->m_proj_parm.D - r));
@@ -103,7 +103,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_putp6& proj_parm)
+ void setup(Parameters& par, par_putp6& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -138,7 +138,7 @@
}
}} // namespace detail::putp6
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Putnins P6 projection
@@ -214,10 +214,10 @@
factory.add_to_factory("putp6p", new putp6p_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP6_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/robin.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/robin.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/robin.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/function_overloads.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace robin{
+ namespace detail { namespace robin{
static const double FXC = 0.8487;
static const double FYC = 1.3523;
static const double C1 = 11.45915590261646417544;
@@ -59,45 +59,45 @@
static struct COEFS {
double c0, c1, c2, c3;
} X[] = {
- {1, -5.67239e-12, -7.15511e-05, 3.11028e-06},
- {0.9986, -0.000482241, -2.4897e-05, -1.33094e-06},
- {0.9954, -0.000831031, -4.4861e-05, -9.86588e-07},
- {0.99, -0.00135363, -5.96598e-05, 3.67749e-06},
- {0.9822, -0.00167442, -4.4975e-06, -5.72394e-06},
- {0.973, -0.00214869, -9.03565e-05, 1.88767e-08},
- {0.96, -0.00305084, -9.00732e-05, 1.64869e-06},
- {0.9427, -0.00382792, -6.53428e-05, -2.61493e-06},
- {0.9216, -0.00467747, -0.000104566, 4.8122e-06},
- {0.8962, -0.00536222, -3.23834e-05, -5.43445e-06},
- {0.8679, -0.00609364, -0.0001139, 3.32521e-06},
- {0.835, -0.00698325, -6.40219e-05, 9.34582e-07},
- {0.7986, -0.00755337, -5.00038e-05, 9.35532e-07},
- {0.7597, -0.00798325, -3.59716e-05, -2.27604e-06},
- {0.7186, -0.00851366, -7.0112e-05, -8.63072e-06},
- {0.6732, -0.00986209, -0.000199572, 1.91978e-05},
- {0.6213, -0.010418, 8.83948e-05, 6.24031e-06},
- {0.5722, -0.00906601, 0.000181999, 6.24033e-06},
- {0.5322, 0.,0.,0. }},
+ {1, -5.67239e-12, -7.15511e-05, 3.11028e-06},
+ {0.9986, -0.000482241, -2.4897e-05, -1.33094e-06},
+ {0.9954, -0.000831031, -4.4861e-05, -9.86588e-07},
+ {0.99, -0.00135363, -5.96598e-05, 3.67749e-06},
+ {0.9822, -0.00167442, -4.4975e-06, -5.72394e-06},
+ {0.973, -0.00214869, -9.03565e-05, 1.88767e-08},
+ {0.96, -0.00305084, -9.00732e-05, 1.64869e-06},
+ {0.9427, -0.00382792, -6.53428e-05, -2.61493e-06},
+ {0.9216, -0.00467747, -0.000104566, 4.8122e-06},
+ {0.8962, -0.00536222, -3.23834e-05, -5.43445e-06},
+ {0.8679, -0.00609364, -0.0001139, 3.32521e-06},
+ {0.835, -0.00698325, -6.40219e-05, 9.34582e-07},
+ {0.7986, -0.00755337, -5.00038e-05, 9.35532e-07},
+ {0.7597, -0.00798325, -3.59716e-05, -2.27604e-06},
+ {0.7186, -0.00851366, -7.0112e-05, -8.63072e-06},
+ {0.6732, -0.00986209, -0.000199572, 1.91978e-05},
+ {0.6213, -0.010418, 8.83948e-05, 6.24031e-06},
+ {0.5722, -0.00906601, 0.000181999, 6.24033e-06},
+ {0.5322, 0.,0.,0.} },
Y[] = {
- {0, 0.0124, 3.72529e-10, 1.15484e-09},
- {0.062, 0.0124001, 1.76951e-08, -5.92321e-09},
- {0.124, 0.0123998, -7.09668e-08, 2.25753e-08},
- {0.186, 0.0124008, 2.66917e-07, -8.44523e-08},
- {0.248, 0.0123971, -9.99682e-07, 3.15569e-07},
- {0.31, 0.0124108, 3.73349e-06, -1.1779e-06},
- {0.372, 0.0123598, -1.3935e-05, 4.39588e-06},
- {0.434, 0.0125501, 5.20034e-05, -1.00051e-05},
- {0.4968, 0.0123198, -9.80735e-05, 9.22397e-06},
- {0.5571, 0.0120308, 4.02857e-05, -5.2901e-06},
- {0.6176, 0.0120369, -3.90662e-05, 7.36117e-07},
- {0.6769, 0.0117015, -2.80246e-05, -8.54283e-07},
- {0.7346, 0.0113572, -4.08389e-05, -5.18524e-07},
- {0.7903, 0.0109099, -4.86169e-05, -1.0718e-06},
- {0.8435, 0.0103433, -6.46934e-05, 5.36384e-09},
- {0.8936, 0.00969679, -6.46129e-05, -8.54894e-06},
- {0.9394, 0.00840949, -0.000192847, -4.21023e-06},
- {0.9761, 0.00616525, -0.000256001, -4.21021e-06},
- {1., 0.,0.,0 }};
+ {0, 0.0124, 3.72529e-10, 1.15484e-09},
+ {0.062, 0.0124001, 1.76951e-08, -5.92321e-09},
+ {0.124, 0.0123998, -7.09668e-08, 2.25753e-08},
+ {0.186, 0.0124008, 2.66917e-07, -8.44523e-08},
+ {0.248, 0.0123971, -9.99682e-07, 3.15569e-07},
+ {0.31, 0.0124108, 3.73349e-06, -1.1779e-06},
+ {0.372, 0.0123598, -1.3935e-05, 4.39588e-06},
+ {0.434, 0.0125501, 5.20034e-05, -1.00051e-05},
+ {0.4958, 0.0123198, -9.80735e-05, 9.22397e-06},
+ {0.5571, 0.0120308, 4.02857e-05, -5.2901e-06},
+ {0.6176, 0.0120369, -3.90662e-05, 7.36117e-07},
+ {0.6769, 0.0117015, -2.80246e-05, -8.54283e-07},
+ {0.7346, 0.0113572, -4.08389e-05, -5.18524e-07},
+ {0.7903, 0.0109099, -4.86169e-05, -1.0718e-06},
+ {0.8435, 0.0103433, -6.46934e-05, 5.36384e-09},
+ {0.8936, 0.00969679, -6.46129e-05, -8.54894e-06},
+ {0.9394, 0.00840949, -0.000192847, -4.21023e-06},
+ {0.9761, 0.00616525, -0.000256001, -4.21021e-06},
+ {1., 0.,0.,0} };
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -122,7 +122,7 @@
{
int i;
double dphi;
-
+
i = int_floor((dphi = fabs(lp_lat)) * C1);
if (i >= NODES) i = NODES - 1;
dphi = RAD_TO_DEG * (dphi - RC1 * i);
@@ -136,7 +136,7 @@
int i;
double t, t1;
struct COEFS T;
-
+
lp_lon = xy_x / FXC;
lp_lat = fabs(xy_y / FYC);
if (lp_lat >= 1.) { /* simple pathologic cases */
@@ -179,7 +179,7 @@
}
}} // namespace detail::robin
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Robinson projection
@@ -223,10 +223,10 @@
factory.add_to_factory("robin", new robin_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_ROBIN_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/rouss.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/rouss.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/rouss.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/proj_mdist.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace rouss{
+ namespace detail { namespace rouss{
struct par_rouss
{
@@ -76,7 +76,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double s, al, cp, sp, al2, s2;
-
+
cp = cos(lp_lat);
sp = sin(lp_lat);
s = proj_mdist(lp_lat, sp, cp, this->m_proj_parm.en) - this->m_proj_parm.s0;
@@ -93,7 +93,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double s, al, x = xy_x / this->m_par.k0, y = xy_y / this->m_par.k0, x2, y2;;
-
+
x2 = x * x;
y2 = y * y;
al = x*(1.-this->m_proj_parm.C1*y2+x2*(this->m_proj_parm.C2+this->m_proj_parm.C3*y-this->m_proj_parm.C4*x2+this->m_proj_parm.C5*y2-this->m_proj_parm.C7*x2*y)
@@ -113,7 +113,7 @@
{
double N0, es2, t, t2, R_R0_2, R_R0_4;
proj_mdist_ini(par.es, proj_parm.en);
-
+
es2 = sin(par.phi0);
proj_parm.s0 = proj_mdist(par.phi0, es2, cos(par.phi0), proj_parm.en);
t = 1. - (es2 = par.es * es2 * es2);
@@ -158,7 +158,7 @@
}
}} // namespace detail::rouss
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Roussilhe Stereographic projection
@@ -202,10 +202,10 @@
factory.add_to_factory("rouss", new rouss_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_ROUSS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/rpoly.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/rpoly.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/rpoly.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace rpoly{
+ namespace detail { namespace rpoly{
static const double EPS = 1e-9;
struct par_rpoly
@@ -74,7 +74,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double fa;
-
+
if (this->m_proj_parm.mode)
fa = tan(lp_lon * this->m_proj_parm.fxb) * this->m_proj_parm.fxa;
else
@@ -103,7 +103,7 @@
}
}} // namespace detail::rpoly
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Rectangular Polyconic projection
@@ -149,10 +149,10 @@
factory.add_to_factory("rpoly", new rpoly_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_RPOLY_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sconics.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sconics.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sconics.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace sconics{
+ namespace detail { namespace sconics{
static const int EULER = 0;
static const int MURD1 = 1;
static const int MURD2 = 2;
@@ -59,12 +59,12 @@
struct par_sconics
{
- double n;
- double rho_c;
- double rho_0;
- double sig;
- double c1, c2;
- int type;
+ double n;
+ double rho_c;
+ double rho_0;
+ double sig;
+ double c1, c2;
+ int type;
};
/* get common factors for simple conics */
template <typename Parameters>
@@ -72,7 +72,7 @@
phi12(Parameters& par, par_sconics& proj_parm, double *del) {
double p1, p2;
int err = 0;
-
+
if (!pj_param(par.params, "tlat_1").i ||
!pj_param(par.params, "tlat_2").i) {
err = -41;
@@ -105,13 +105,14 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double rho;
-
+
switch (this->m_proj_parm.type) {
case MURD2:
rho = this->m_proj_parm.rho_c + tan(this->m_proj_parm.sig - lp_lat);
break;
case PCONIC:
rho = this->m_proj_parm.c2 * (this->m_proj_parm.c1 - tan(lp_lat - this->m_proj_parm.sig));
+ // rho = this->m_proj_parm.c2 * (this->m_proj_parm.c1 - tan(lp_lat)); BUG STILL IN proj (reported 2012-03-03)
break;
default:
rho = this->m_proj_parm.rho_c - lp_lat;
@@ -124,7 +125,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double rho;
-
+
rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho_0 - xy_y);
if (this->m_proj_parm.n < 0.) {
rho = - rho;
@@ -146,7 +147,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_sconics& proj_parm)
+ void setup(Parameters& par, par_sconics& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -180,6 +181,7 @@
proj_parm.n = sin(proj_parm.sig) * sin(del) / del;
del *= 0.5;
proj_parm.rho_c = del / (tan(del) * tan(proj_parm.sig)) + proj_parm.sig;
+
proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
break;
case PCONIC:
@@ -259,7 +261,7 @@
}
}} // namespace detail::sconics
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Tissot projection
@@ -502,10 +504,10 @@
factory.add_to_factory("vitk1", new vitk1_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_SCONICS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/somerc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/somerc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/somerc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace somerc{
+ namespace detail { namespace somerc{
static const double EPS = 1.e-10;
static const int NITER = 6;
@@ -72,7 +72,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double phip, lamp, phipp, lampp, sp, cp;
-
+
sp = this->m_par.e * sin(lp_lat);
phip = 2.* atan( exp( this->m_proj_parm.c * (
log(tan(FORTPI + 0.5 * lp_lat)) - this->m_proj_parm.hlf_e * log((1. + sp)/(1. - sp)))
@@ -89,7 +89,7 @@
{
double phip, lamp, phipp, lampp, cp, esp, con, delp;
int i;
-
+
phipp = 2. * (atan(exp(xy_y / this->m_proj_parm.kR)) - FORTPI);
lampp = xy_x / this->m_proj_parm.kR;
cp = cos(phipp);
@@ -134,7 +134,7 @@
}
}} // namespace detail::somerc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Swiss. Obl. Mercator projection
@@ -179,10 +179,10 @@
factory.add_to_factory("somerc", new somerc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_SOMERC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/stere.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/stere.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/stere.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -44,10 +44,10 @@
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
#include <boost/geometry/extensions/gis/projections/impl/pj_tsfn.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace stere{
+ namespace detail { namespace stere{
static const double EPS10 = 1.e-10;
static const double TOL = 1.e-8;
static const int NITER = 8;
@@ -90,7 +90,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double coslam, sinlam, sinX=0.0, cosX=0.0, X, A, sinphi;
-
+
coslam = cos(lp_lon);
sinlam = sin(lp_lon);
sinphi = sin(lp_lat);
@@ -126,7 +126,7 @@
{
double cosphi, sinphi, tp=0.0, phi_l=0.0, rho, halfe=0.0, halfpi=0.0;
int i;
-
+
rho = boost::math::hypot(xy_x, xy_y);
switch (this->m_proj_parm.mode) {
case OBLIQ:
@@ -137,7 +137,7 @@
phi_l = asin(cosphi * this->m_proj_parm.sinX1);
else
phi_l = asin(cosphi * this->m_proj_parm.sinX1 + (xy_y * sinphi * this->m_proj_parm.cosX1 / rho));
-
+
tp = tan(.5 * (HALFPI + phi_l));
xy_x *= sinphi;
xy_y = rho * this->m_proj_parm.cosX1 * cosphi - xy_y * this->m_proj_parm.sinX1* sinphi;
@@ -185,7 +185,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double sinphi, cosphi, coslam, sinlam;
-
+
sinphi = sin(lp_lat);
cosphi = cos(lp_lat);
coslam = cos(lp_lon);
@@ -216,7 +216,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double c, rh, sinc, cosc;
-
+
sinc = sin(c = 2. * atan((rh = boost::math::hypot(xy_x, xy_y)) / this->m_proj_parm.akm1));
cosc = cos(c);
lp_lon = 0.;
@@ -316,7 +316,7 @@
void setup_stere(Parameters& par, par_stere& proj_parm)
{
proj_parm.phits = pj_param(par.params, "tlat_ts").i ?
- pj_param(par.params, "rlat_ts").f : HALFPI;
+ pj_param(par.params, "rlat_ts").f : HALFPI;
setup(par, proj_parm);
}
@@ -336,7 +336,7 @@
}
}} // namespace detail::stere
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Stereographic projection
@@ -442,10 +442,10 @@
factory.add_to_factory("ups", new ups_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_STERE_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sterea.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sterea.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sterea.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -45,10 +45,10 @@
#include <boost/geometry/extensions/gis/projections/epsg_traits.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace sterea{
+ namespace detail { namespace sterea{
static const double DEL_TOL = 1.e-14;
static const int MAX_ITER = 10;
@@ -59,9 +59,9 @@
double R2;
gauss::GAUSS en;
};
-
-
-
+
+
+
// template class, using CRTP to implement forward/inverse
template <typename Geographic, typename Cartesian, typename Parameters>
@@ -80,21 +80,21 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
- double cosc, sinc, cosl, k;
-
+ double cosc, sinc, cosl_, k;
+
detail::gauss::gauss(m_proj_parm.en, lp_lon, lp_lat);
sinc = sin(lp_lat);
cosc = cos(lp_lat);
- cosl = cos(lp_lon);
- k = this->m_par.k0 * this->m_proj_parm.R2 / (1. + this->m_proj_parm.sinc0 * sinc + this->m_proj_parm.cosc0 * cosc * cosl);
+ cosl_ = cos(lp_lon);
+ k = this->m_par.k0 * this->m_proj_parm.R2 / (1. + this->m_proj_parm.sinc0 * sinc + this->m_proj_parm.cosc0 * cosc * cosl_);
xy_x = k * cosc * sin(lp_lon);
- xy_y = k * (this->m_proj_parm.cosc0 * sinc - this->m_proj_parm.sinc0 * cosc * cosl);
+ xy_y = k * (this->m_proj_parm.cosc0 * sinc - this->m_proj_parm.sinc0 * cosc * cosl_);
}
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double rho, c, sinc, cosc;
-
+
xy_x /= this->m_par.k0;
xy_y /= this->m_par.k0;
if((rho = boost::math::hypot(xy_x, xy_y))) {
@@ -116,6 +116,9 @@
template <typename Parameters>
void setup_sterea(Parameters& par, par_sterea& proj_parm)
{
+
+
+
double R;
proj_parm.en = detail::gauss::gauss_ini(par.e, par.phi0, proj_parm.phic0, R);
proj_parm.sinc0 = sin(proj_parm.phic0);
@@ -126,7 +129,7 @@
}
}} // namespace detail::sterea
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Oblique Stereographic Alternative projection
@@ -171,7 +174,7 @@
factory.add_to_factory("sterea", new sterea_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
// Create EPSG specializations
// (Proof of Concept, only for some)
@@ -375,7 +378,7 @@
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_STEREA_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sts.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sts.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/sts.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace sts{
+ namespace detail { namespace sts{
struct par_sts
{
@@ -72,7 +72,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double c;
-
+
xy_x = this->m_proj_parm.C_x * lp_lon * cos(lp_lat);
xy_y = this->m_proj_parm.C_y;
lp_lat *= this->m_proj_parm.C_p;
@@ -89,7 +89,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double c;
-
+
xy_y /= this->m_proj_parm.C_y;
c = cos(lp_lat = this->m_proj_parm.tan_mode ? atan(xy_y) : aasin(xy_y));
lp_lat /= this->m_proj_parm.C_p;
@@ -102,7 +102,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_sts& proj_parm, double p, double q, int mode)
+ void setup(Parameters& par, par_sts& proj_parm, double p, double q, int mode)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -145,7 +145,7 @@
}
}} // namespace detail::sts
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Kavraisky V projection
@@ -285,10 +285,10 @@
factory.add_to_factory("fouc", new fouc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_STS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tcc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tcc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tcc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace tcc{
+ namespace detail { namespace tcc{
static const double EPS10 = 1.e-10;
struct par_tcc
@@ -71,7 +71,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double b, bt;
-
+
b = cos(lp_lat) * sin(lp_lon);
if ((bt = 1. - b * b) < EPS10) throw proj_exception();;
xy_x = b / sqrt(bt);
@@ -88,7 +88,7 @@
}
}} // namespace detail::tcc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Transverse Central Cylindrical projection
@@ -133,10 +133,10 @@
factory.add_to_factory("tcc", new tcc_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_TCC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tcea.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tcea.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tcea.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace tcea{
+ namespace detail { namespace tcea{
struct par_tcea
{
@@ -76,7 +76,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double t;
-
+
xy_y = xy_y * this->m_proj_parm.rk0 + this->m_par.phi0;
xy_x *= this->m_par.k0;
t = sqrt(1. - xy_x * xy_x);
@@ -96,7 +96,7 @@
}
}} // namespace detail::tcea
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Transverse Cylindrical Equal Area projection
@@ -140,10 +140,10 @@
factory.add_to_factory("tcea", new tcea_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_TCEA_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tmerc.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tmerc.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tmerc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -47,10 +47,10 @@
#include <boost/geometry/extensions/gis/projections/epsg_traits.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace tmerc{
+ namespace detail { namespace tmerc{
static const double EPS10 = 1.e-10;
static const double FC1 = 1.;
static const double FC2 = .5;
@@ -86,22 +86,22 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double al, als, n, cosphi, sinphi, t;
-
+
/*
- * Fail if our longitude is more than 90 degrees from the
- * central meridian since the results are essentially garbage.
+ * Fail if our longitude is more than 90 degrees from the
+ * central meridian since the results are essentially garbage.
* Is error -20 really an appropriate return value?
- *
+ *
* http://trac.osgeo.org/proj/ticket/5
*/
if( lp_lon < -HALFPI || lp_lon > HALFPI )
{
xy_x = HUGE_VAL;
xy_y = HUGE_VAL;
- throw proj_exception( -14);
+ throw proj_exception( -14 );
return;
}
-
+
sinphi = sin(lp_lat); cosphi = cos(lp_lat);
t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.;
t *= t;
@@ -125,7 +125,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double n, con, cosphi, d, ds, sinphi, t;
-
+
lp_lat = pj_inv_mlfn(this->m_proj_parm.ml0 + xy_y / this->m_par.k0, this->m_par.es, this->m_proj_parm.en);
if (fabs(lp_lat) >= HALFPI) {
lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
@@ -172,22 +172,22 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double b, cosphi;
-
+
/*
- * Fail if our longitude is more than 90 degrees from the
- * central meridian since the results are essentially garbage.
+ * Fail if our longitude is more than 90 degrees from the
+ * central meridian since the results are essentially garbage.
* Is error -20 really an appropriate return value?
- *
+ *
* http://trac.osgeo.org/proj/ticket/5
*/
if( lp_lon < -HALFPI || lp_lon > HALFPI )
{
xy_x = HUGE_VAL;
xy_y = HUGE_VAL;
- throw proj_exception( -14);
+ throw proj_exception( -14 );
return;
}
-
+
b = (cosphi = cos(lp_lat)) * sin(lp_lon);
if (fabs(fabs(b) - 1.) <= EPS10) throw proj_exception();;
xy_x = this->m_proj_parm.ml0 * log((1. + b) / (1. - b));
@@ -203,7 +203,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double h, g;
-
+
h = exp(xy_x / this->m_proj_parm.esp);
g = .5 * (h - 1. / h);
h = cos(this->m_par.phi0 + xy_y / this->m_proj_parm.esp);
@@ -220,7 +220,7 @@
boost::ignore_unused_variable_warning(proj_parm);
if (par.es) {
pj_enfn(par.es, proj_parm.en);
-
+
proj_parm.ml0 = pj_mlfn(par.phi0, sin(par.phi0), cos(par.phi0), proj_parm.en);
proj_parm.esp = par.es / (1. - par.es);
// par.inv = e_inverse;
@@ -266,7 +266,7 @@
}
}} // namespace detail::tmerc
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Transverse Mercator projection
@@ -369,7 +369,7 @@
factory.add_to_factory("utm", new utm_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
// Create EPSG specializations
// (Proof of Concept, only for some)
@@ -452,7 +452,7 @@
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_TMERC_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tpeqd.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tpeqd.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/tpeqd.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace tpeqd{
+ namespace detail { namespace tpeqd{
struct par_tpeqd
{
@@ -71,7 +71,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double t, z1, z2, dl1, dl2, sp, cp;
-
+
sp = sin(lp_lat);
cp = cos(lp_lat);
z1 = aacos(this->m_proj_parm.sp1 * sp + this->m_proj_parm.cp1 * cp * cos(dl1 = lp_lon + this->m_proj_parm.dlam2));
@@ -88,7 +88,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double cz1, cz2, s, d, cp, sp;
-
+
cz1 = cos(boost::math::hypot(xy_y, xy_x + this->m_proj_parm.hz0));
cz2 = cos(boost::math::hypot(xy_y, xy_x - this->m_proj_parm.hz0));
s = cz1 + cz2;
@@ -144,7 +144,7 @@
}
}} // namespace detail::tpeqd
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Two Point Equidistant projection
@@ -189,10 +189,10 @@
factory.add_to_factory("tpeqd", new tpeqd_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_TPEQD_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/urm5.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/urm5.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/urm5.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace urm5{
+ namespace detail { namespace urm5{
struct par_urm5
{
@@ -70,7 +70,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double t;
-
+
t = lp_lat = aasin(this->m_proj_parm.n * sin(lp_lat));
xy_x = this->m_proj_parm.m * lp_lon * cos(lp_lat);
t *= t;
@@ -95,7 +95,7 @@
}
}} // namespace detail::urm5
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Urmaev V projection
@@ -140,10 +140,10 @@
factory.add_to_factory("urm5", new urm5_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_URM5_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/urmfps.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/urmfps.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/urmfps.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -43,10 +43,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace urmfps{
+ namespace detail { namespace urmfps{
static const double C_x = 0.8773826753;
static const double Cy = 1.139753528477;
@@ -86,7 +86,7 @@
};
template <typename Parameters>
- void setup(Parameters& par, par_urmfps& proj_parm)
+ void setup(Parameters& par, par_urmfps& proj_parm)
{
boost::ignore_unused_variable_warning(par);
boost::ignore_unused_variable_warning(proj_parm);
@@ -119,7 +119,7 @@
}
}} // namespace detail::urmfps
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Urmaev Flat-Polar Sinusoidal projection
@@ -196,10 +196,10 @@
factory.add_to_factory("wag1", new wag1_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_URMFPS_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace vandg{
+ namespace detail { namespace vandg{
static const double TOL = 1.e-10;
static const double THIRD = .33333333333333333333;
static const double TWO_THRD = .66666666666666666666;
@@ -73,7 +73,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double al, al2, g, g2, p2;
-
+
p2 = fabs(lp_lat / HALFPI);
if ((p2 - TOL) > 1.) throw proj_exception();;
if (p2 > 1.)
@@ -107,7 +107,7 @@
inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
{
double t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2;
-
+
x2 = xy_x * xy_x;
if ((ay = fabs(xy_y)) < TOL) {
lp_lat = 0.;
@@ -148,7 +148,7 @@
}
}} // namespace detail::vandg
- #endif // doxygen
+ #endif // doxygen
/*!
\brief van der Grinten (I) projection
@@ -192,10 +192,10 @@
factory.add_to_factory("vandg", new vandg_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_VANDG_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg2.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg2.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg2.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace vandg2{
+ namespace detail { namespace vandg2{
static const double TOL = 1e-10;
static const double TWORPI = 0.63661977236758134308;
@@ -72,7 +72,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double x1, at, bt, ct;
-
+
bt = fabs(TWORPI * lp_lat);
if ((ct = 1. - bt * bt) < 0.)
ct = 0.;
@@ -118,7 +118,7 @@
}
}} // namespace detail::vandg2
- #endif // doxygen
+ #endif // doxygen
/*!
\brief van der Grinten II projection
@@ -196,10 +196,10 @@
factory.add_to_factory("vandg3", new vandg3_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_VANDG2_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg4.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg4.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/vandg4.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace vandg4{
+ namespace detail { namespace vandg4{
static const double TOL = 1e-10;
static const double TWORPI = 0.63661977236758134308;
@@ -67,7 +67,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double x1, t, bt, ct, ft, bt2, ct2, dt, dt2;
-
+
if (fabs(lp_lat) < TOL) {
xy_x = lp_lon;
xy_y = 0.;
@@ -109,7 +109,7 @@
}
}} // namespace detail::vandg4
- #endif // doxygen
+ #endif // doxygen
/*!
\brief van der Grinten IV projection
@@ -154,10 +154,10 @@
factory.add_to_factory("vandg4", new vandg4_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_VANDG4_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag2.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag2.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag2.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wag2{
+ namespace detail { namespace wag2{
static const double C_x = 0.92483;
static const double C_y = 1.38725;
static const double C_p1 = 0.88022;
@@ -91,7 +91,7 @@
}
}} // namespace detail::wag2
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Wagner II projection
@@ -135,10 +135,10 @@
factory.add_to_factory("wag2", new wag2_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_WAG2_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag3.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag3.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag3.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wag3{
+ namespace detail { namespace wag3{
static const double TWOTHIRD = 0.6666666666666666666667;
struct par_wag3
@@ -94,7 +94,7 @@
}
}} // namespace detail::wag3
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Wagner III projection
@@ -139,10 +139,10 @@
factory.add_to_factory("wag3", new wag3_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_WAG3_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag7.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag7.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wag7.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wag7{
+ namespace detail { namespace wag7{
// template class, using CRTP to implement forward/inverse
@@ -65,7 +65,7 @@
inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
{
double theta, ct, D;
-
+
theta = asin(xy_y = 0.90630778703664996 * sin(lp_lat));
xy_x = 2.66723 * (ct = cos(theta)) * sin(lp_lon /= 3.);
xy_y *= 1.24104 * (D = 1/(sqrt(0.5 * (1 + ct * cos(lp_lon)))));
@@ -83,7 +83,7 @@
}
}} // namespace detail::wag7
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Wagner VII projection
@@ -128,10 +128,10 @@
factory.add_to_factory("wag7", new wag7_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_WAG7_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wink1.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wink1.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wink1.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wink1{
+ namespace detail { namespace wink1{
struct par_wink1
{
@@ -91,7 +91,7 @@
}
}} // namespace detail::wink1
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Winkel I projection
@@ -136,10 +136,10 @@
factory.add_to_factory("wink1", new wink1_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_WINK1_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wink2.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wink2.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/proj/wink2.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,7 +4,7 @@
// Boost.Geometry - extensions-gis-projections (based on PROJ4)
// This file is automatically generated. DO NOT EDIT.
-// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -13,10 +13,10 @@
// This file is converted from PROJ4, http://trac.osgeo.org/proj
// PROJ4 is originally written by Gerald Evenden (then of the USGS)
// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels (Geodan, Amsterdam)
+// PROJ4 is converted to Boost.Geometry by Barend Gehrels
// Original copyright notice:
-
+
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
@@ -42,10 +42,10 @@
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
#include <boost/geometry/extensions/gis/projections/impl/factory_entry.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wink2{
+ namespace detail { namespace wink2{
static const int MAX_ITER = 10;
static const double LOOP_TOL = 1e-7;
static const double TWO_D_PI = 0.636619772367581343;
@@ -74,7 +74,7 @@
{
double k, V;
int i;
-
+
xy_y = lp_lat * TWO_D_PI;
k = PI * sin(lp_lat);
lp_lat *= 1.8;
@@ -104,7 +104,7 @@
}
}} // namespace detail::wink2
- #endif // doxygen
+ #endif // doxygen
/*!
\brief Winkel II projection
@@ -150,10 +150,10 @@
factory.add_to_factory("wink2", new wink2_entry<Geographic, Cartesian, Parameters>);
}
- } // namespace detail
+ } // namespace detail
#endif // doxygen
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_PROJECTIONS_WINK2_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/project_inverse_transformer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/project_inverse_transformer.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/project_inverse_transformer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,7 +18,7 @@
#include <boost/geometry/extensions/gis/projections/parameters.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
@@ -67,7 +67,7 @@
};
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_STRATEGY_PROJECT_INVERSE_TRANSFORMER_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/project_transformer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/project_transformer.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/project_transformer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,13 +13,13 @@
#include <boost/shared_ptr.hpp>
#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
#include <boost/geometry/extensions/gis/projections/factory.hpp>
#include <boost/geometry/extensions/gis/projections/parameters.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
/*!
\brief Transformation strategy to do transform using a Map Projection
@@ -52,14 +52,14 @@
{
// Latlong (LatLong -> Cartesian) will be projected, rest will be copied.
// So first copy third or higher dimensions
- geometry::detail::convert::point_to_point<LatLong, Cartesian, 2,
- geometry::dimension<Cartesian>::value> ::copy(p1, p2);
+ geometry::detail::conversion::point_to_point<LatLong, Cartesian, 2,
+ geometry::dimension<Cartesian>::value> ::apply(p1, p2);
return m_prj->forward(p1, p2);
}
};
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
#endif // BOOST_GEOMETRY_STRATEGY_PROJECT_TRANSFORMER_HPP
Modified: branches/quickbook-dev/boost/geometry/extensions/gis/projections/projection.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/gis/projections/projection.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/gis/projections/projection.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,7 +13,7 @@
#include <string>
#include <boost/geometry/extensions/gis/projections/impl/projects.hpp>
-namespace boost { namespace geometry { namespace projection
+namespace boost { namespace geometry { namespace projections
{
/*!
@@ -35,6 +35,10 @@
typedef double XY_T;
public :
+
+ typedef LL geographic_point_type; ///< latlong point type
+ typedef XY cartesian_point_type; ///< xy point type
+
/// Forward projection, from Latitude-Longitude to Cartesian
virtual bool forward(LL const& lp, XY& xy) const = 0;
@@ -57,7 +61,7 @@
};
-}}} // namespace boost::geometry::projection
+}}} // namespace boost::geometry::projections
Modified: branches/quickbook-dev/boost/geometry/extensions/strategies/buffer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/extensions/strategies/buffer.hpp (original)
+++ branches/quickbook-dev/boost/geometry/extensions/strategies/buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -21,26 +21,17 @@
#include <boost/geometry/strategies/tags.hpp>
#include <boost/geometry/strategies/side.hpp>
#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
#include <boost/geometry/extensions/strategies/buffer_side.hpp>
-// This should NOT be defined, it omits essential points in concavities.
-// Code is commented now
-// #define BOOST_GEOMETRY_BUFFER_NO_HELPER_POINTS
-
-
namespace boost { namespace geometry
{
-
-
-
namespace strategy { namespace buffer
{
-
-
/*
A Buffer-join strategy gets 4 input points.
@@ -69,45 +60,8 @@
*/
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
-template
-<
- typename PointIn, typename Mapper
->
-struct join_mapper
-{
- Mapper const& m_mapper;
- join_mapper(Mapper const& mapper)
- : m_mapper(mapper)
- {}
-
- template <typename Ring>
- inline void map(PointIn const& ip, PointIn const& vertex,
- PointIn const& perp1, PointIn const& perp2) const
- {
- Ring corner;
- corner.push_back(vertex);
- corner.push_back(perp1);
- corner.push_back(ip);
- corner.push_back(perp2);
- corner.push_back(vertex);
-
- const_cast<Mapper&>(m_mapper).map(corner,
- "opacity:0.4;fill:rgb(255,0,0);stroke:rgb(0,0,0);stroke-width:1");
- }
-};
-#endif
-
-
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
-// Forget this, it will go
-template<typename PointIn, typename PointOut, typename Mapper>
-struct join_miter : public join_mapper<PointIn, Mapper>
-{
- join_miter(Mapper const& mapper) : join_mapper(mapper) {}
-#else
+// TODO: merge join_miter with join_round, lot of duplicate code
template
<
@@ -116,41 +70,23 @@
>
struct join_miter
{
-
-#endif
typedef typename strategy::side::services::default_strategy<typename cs_tag<PointIn>::type>::type side;
typedef typename coordinate_type<PointIn>::type coordinate_type;
- template <typename Ring>
+ template <typename RangeOut>
inline void apply(PointIn const& ip, PointIn const& vertex,
PointIn const& perp1, PointIn const& perp2,
coordinate_type const& buffer_distance,
- Ring& buffered) const
+ RangeOut& range_out) const
{
coordinate_type zero = 0;
- int signum = buffer_distance > zero
- ? 1
- : buffer_distance < zero
- ? -1
- : 0;
+ int signum = buffer_distance > zero ? 1
+ : buffer_distance < zero ? -1
+ : 0;
if (side::apply(perp1, ip, perp2) == signum)
{
-
-//#ifdef BOOST_GEOMETRY_BUFFER_NO_HELPER_POINTS
- // Because perp1 crosses perp2 at IP, it is not necessary to
- // include IP
- //buffered.push_back(ip);
-//#else
- // If it is concave (corner to left), add helperline
- // The helper-line IS essential for buffering holes. Without,
- // holes might be generated, while they should NOT be there.
- // DOES NOT WORK ALWAYS buffered.push_back(ip);
- // We might consider to make it optional (because more efficient)
- buffered.push_back(perp1);
- buffered.push_back(perp2);
-//#endif
}
else
{
@@ -181,27 +117,15 @@
#endif
}
- buffered.push_back(p);
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- map<Ring>(ip, vertex, perp1, perp2);
-#endif
+ range_out.push_back(perp1);
+ range_out.push_back(p);
+ range_out.push_back(perp2);
}
-
}
};
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
-// Forget this, it will go
-template<typename PointIn, typename PointOut, typename Mapper>
-struct join_bevel : public join_mapper<PointIn, Mapper>
-{
- join_bevel(Mapper const& mapper) : join_mapper(mapper) {}
-#else
-
-
template
<
typename PointIn,
@@ -209,39 +133,18 @@
>
struct join_bevel
{
-#endif
-
-
typedef typename coordinate_type<PointIn>::type coordinate_type;
- template <typename Ring>
+ template <typename RangeOut>
inline void apply(PointIn const& ip, PointIn const& vertex,
PointIn const& perp1, PointIn const& perp2,
coordinate_type const& buffer_distance,
- Ring& buffered) const
+ RangeOut& range_out) const
{
- buffered.push_back(perp1);
- buffered.push_back(perp2);
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- map<Ring>(ip, vertex, perp1, perp2);
-#endif
}
};
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
-// Forget this, it will go
-template<typename PointIn, typename PointOut, typename Mapper>
-struct join_round : public join_mapper<PointIn, Mapper>
-{
- join_round(Mapper const& mapper, int max_level = 4)
- : join_mapper(mapper)
- , m_max_level(max_level)
- {}
-#else
-
-
template
<
typename PointIn,
@@ -252,18 +155,28 @@
inline join_round(int max_level = 4)
: m_max_level(max_level)
{}
-#endif
typedef typename strategy::side::services::default_strategy<typename cs_tag<PointIn>::type>::type side;
typedef typename coordinate_type<PointOut>::type coordinate_type;
- int m_max_level;
+ typedef typename geometry::select_most_precise
+ <
+ typename geometry::select_most_precise
+ <
+ typename geometry::coordinate_type<PointIn>::type,
+ typename geometry::coordinate_type<PointOut>::type
+ >::type,
+ double
+ >::type promoted_type;
+
+ int m_max_level;
- template <typename Ring>
+#ifdef BOOST_GEOMETRY_BUFFER_USE_MIDPOINTS
+ template <typename RangeOut>
inline void mid_points(PointIn const& vertex,
PointIn const& p1, PointIn const& p2,
coordinate_type const& buffer_distance,
- Ring& buffered,
+ RangeOut& range_out,
int level = 1) const
{
// Generate 'vectors'
@@ -288,39 +201,82 @@
if (level < m_max_level)
{
- mid_points(vertex, p1, mid_point, buffer_distance, buffered, level + 1);
+ mid_points(vertex, p1, mid_point, buffer_distance, range_out, level + 1);
}
- buffered.push_back(mid_point);
+ range_out.push_back(mid_point);
if (level < m_max_level)
{
- mid_points(vertex, mid_point, p2, buffer_distance, buffered, level + 1);
+ mid_points(vertex, mid_point, p2, buffer_distance, range_out, level + 1);
}
-
}
+#endif
+
+ template <typename RangeOut>
+ inline void generate_points(PointIn const& vertex,
+ PointIn const& perp1, PointIn const& perp2,
+ promoted_type const& buffer_distance,
+ RangeOut& range_out) const
+ {
+ promoted_type dx1 = get<0>(perp1) - get<0>(vertex);
+ promoted_type dy1 = get<1>(perp1) - get<1>(vertex);
+ promoted_type dx2 = get<0>(perp2) - get<0>(vertex);
+ promoted_type dy2 = get<1>(perp2) - get<1>(vertex);
+
+ dx1 /= buffer_distance;
+ dy1 /= buffer_distance;
+ dx2 /= buffer_distance;
+ dy2 /= buffer_distance;
+
+ promoted_type angle_diff = std::acos(dx1 * dx2 + dy1 * dy2);
+
+ // Default might be 100 steps for a full circle (2 pi)
+ promoted_type const steps_per_circle = 100.0;
+ int n = int(steps_per_circle * angle_diff
+ / (2.0 * geometry::math::pi<promoted_type>()));
+
+ if (n > 1000)
+ {
+ std::cout << dx1 << ", " << dy1 << " .. " << dx2 << ", " << dy2 << std::endl;
+ std::cout << angle_diff << " -> " << n << std::endl;
+ n = 1000;
+ }
+ else if (n <= 1)
+ {
+ return;
+ }
+
+ promoted_type const angle1 = std::atan2(dy1, dx1);
+ promoted_type diff = angle_diff / promoted_type(n);
+ promoted_type a = angle1 - diff;
+ for (int i = 0; i < n - 1; i++, a -= diff)
+ {
+ PointIn p;
+ set<0>(p, get<0>(vertex) + buffer_distance * cos(a));
+ set<1>(p, get<1>(vertex) + buffer_distance * sin(a));
+ range_out.push_back(p);
+ }
+ }
- template <typename Ring>
+ template <typename RangeOut>
inline void apply(PointIn const& ip, PointIn const& vertex,
PointIn const& perp1, PointIn const& perp2,
coordinate_type const& buffer_distance,
- Ring& buffered) const
+ RangeOut& range_out) const
{
+ if (geometry::equals(perp1, perp2))
+ {
+ //std::cout << "Corner for equal points " << geometry::wkt(ip) << " " << geometry::wkt(perp1) << std::endl;
+ return;
+ }
+
coordinate_type zero = 0;
- int signum = buffer_distance > zero
- ? 1
- : buffer_distance < zero
- ? -1
- : 0;
+ int signum = buffer_distance > zero ? 1
+ : buffer_distance < zero ? -1
+ : 0;
if (side::apply(perp1, ip, perp2) == signum)
{
-//#ifdef BOOST_GEOMETRY_BUFFER_NO_HELPER_POINTS
-// buffered.push_back(ip);
-//#else
- // If it is concave (corner to left), add helperline
- buffered.push_back(perp1);
- buffered.push_back(perp2);
-//#endif
}
else
{
@@ -338,26 +294,27 @@
set<0>(bp, get<0>(vertex) + vix * prop);
set<1>(bp, get<1>(vertex) + viy * prop);
+ range_out.push_back(perp1);
+
+#ifdef BOOST_GEOMETRY_BUFFER_USE_MIDPOINTS
if (m_max_level <= 1)
{
- buffered.push_back(perp1);
if (m_max_level == 1)
{
- buffered.push_back(bp);
+ range_out.push_back(bp);
}
- buffered.push_back(perp2);
}
else
{
- buffered.push_back(perp1);
- mid_points(vertex, perp1, bp, bd, buffered);
- mid_points(vertex, bp, perp2, bd, buffered);
- buffered.push_back(perp2);
+ mid_points(vertex, perp1, bp, bd, range_out);
+ range_out.push_back(bp);
+ mid_points(vertex, bp, perp2, bd, range_out);
}
-
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- map<Ring>(bp, vertex, perp1, perp2);
+#else
+ generate_points(vertex, perp1, perp2, bd, range_out);
#endif
+
+ range_out.push_back(perp2);
}
}
};
@@ -383,6 +340,11 @@
{
return side == buffer_side_left ? m_left : m_right;
}
+
+ inline int factor() const
+ {
+ return m_left < 0 ? -1 : 1;
+ }
private :
CoordinateType m_left;
Modified: branches/quickbook-dev/boost/geometry/geometries/point_xy.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/geometries/point_xy.hpp (original)
+++ branches/quickbook-dev/boost/geometry/geometries/point_xy.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -36,6 +36,9 @@
[heading Model of]
[link geometry.reference.concepts.concept_point Point Concept]
}
+
+\qbk{[include reference/geometries/point_assign_warning.qbk]}
+
*/
template<typename CoordinateType, typename CoordinateSystem = cs::cartesian>
class point_xy : public model::point<CoordinateType, 2, CoordinateSystem>
Modified: branches/quickbook-dev/boost/geometry/geometry.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/geometry.hpp (original)
+++ branches/quickbook-dev/boost/geometry/geometry.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -40,13 +40,17 @@
#include <boost/geometry/algorithms/buffer.hpp>
#include <boost/geometry/algorithms/centroid.hpp>
#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/comparable_distance.hpp>
+#include <boost/geometry/algorithms/convert.hpp>
#include <boost/geometry/algorithms/convex_hull.hpp>
#include <boost/geometry/algorithms/correct.hpp>
#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/comparable_distance.hpp>
#include <boost/geometry/algorithms/difference.hpp>
+#include <boost/geometry/algorithms/disjoint.hpp>
#include <boost/geometry/algorithms/distance.hpp>
#include <boost/geometry/algorithms/envelope.hpp>
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/expand.hpp>
#include <boost/geometry/algorithms/for_each.hpp>
#include <boost/geometry/algorithms/intersection.hpp>
#include <boost/geometry/algorithms/intersects.hpp>
Deleted: branches/quickbook-dev/boost/geometry/io/wkt/iomanip.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/io/wkt/iomanip.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,46 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_IO_WKT_IOMANIP_HPP
-#define BOOST_GEOMETRY_IO_WKT_IOMANIP_HPP
-
-#include <boost/geometry/io/wkt/write.hpp>
-
-// This short file contains only one manipulator, streaming as WKT
-// Don't move contents to as_wkt, developers must be able to choose how to stream
-
-// Don't use namespace boost::geometry, to enable the library to stream custom geometries which
-// are living outside the namespace boost { namespace geometry
-
-//namespace boost { namespace geometry
-//{
-
-
-/*!
-\brief Streams a geometry as Well-Known Text
-\ingroup wkt
-*/
-template<typename Char, typename Traits, typename Geometry>
-inline std::basic_ostream<Char,Traits>& operator<<
- (
- std::basic_ostream<Char,Traits> &os,
- Geometry const& geom
- )
-{
- os << boost::geometry::wkt(geom);
- return os;
-}
-
-//}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_IO_WKT_IOMANIP_HPP
Modified: branches/quickbook-dev/boost/geometry/io/wkt/wkt.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/io/wkt/wkt.hpp (original)
+++ branches/quickbook-dev/boost/geometry/io/wkt/wkt.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,6 +16,10 @@
#include <boost/geometry/io/wkt/read.hpp>
#include <boost/geometry/io/wkt/write.hpp>
-#include <boost/geometry/io/wkt/iomanip.hpp>
+
+// BSG 2011-02-03
+// We don't include stream.hpp by default. That tries to stream anything not known
+// by default (such as ttmath) and reports errors.
+// Users can include stream.hpp themselves (if they want to)
#endif // BOOST_GEOMETRY_IO_WKT_WKT_HPP
Modified: branches/quickbook-dev/boost/geometry/multi/algorithms/centroid.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/multi/algorithms/centroid.hpp (original)
+++ branches/quickbook-dev/boost/geometry/multi/algorithms/centroid.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,9 +18,7 @@
#include <boost/range.hpp>
#include <boost/geometry/algorithms/centroid.hpp>
-#include <boost/geometry/algorithms/num_points.hpp>
#include <boost/geometry/multi/core/point_type.hpp>
-#include <boost/geometry/multi/algorithms/detail/multi_sum.hpp>
#include <boost/geometry/multi/algorithms/num_points.hpp>
@@ -73,12 +71,14 @@
static inline void apply(Multi const& multi, Point& centroid,
Strategy const& strategy)
{
+#if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW)
// If there is nothing in any of the ranges, it is not possible
// to calculate the centroid
if (geometry::num_points(multi) == 0)
{
throw centroid_exception();
}
+#endif
typename Strategy::state_type state;
Modified: branches/quickbook-dev/boost/geometry/multi/algorithms/convert.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/multi/algorithms/convert.hpp (original)
+++ branches/quickbook-dev/boost/geometry/multi/algorithms/convert.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -30,7 +30,7 @@
{
template <typename Single, typename Multi, typename Policy>
-struct single_to_multi
+struct single_to_multi: private Policy
{
static inline void apply(Single const& single, Multi& multi)
{
@@ -42,7 +42,7 @@
template <typename Multi1, typename Multi2, typename Policy>
-struct multi_to_multi
+struct multi_to_multi: private Policy
{
static inline void apply(Multi1 const& multi1, Multi2& multi2)
{
Modified: branches/quickbook-dev/boost/geometry/multi/algorithms/correct.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/multi/algorithms/correct.hpp (original)
+++ branches/quickbook-dev/boost/geometry/multi/algorithms/correct.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -32,19 +32,19 @@
{
template <typename MultiPoint>
-struct correct<multi_point_tag, MultiPoint>
+struct correct<MultiPoint, multi_point_tag>
: detail::correct::correct_nop<MultiPoint>
{};
template <typename MultiLineString>
-struct correct<multi_linestring_tag, MultiLineString>
+struct correct<MultiLineString, multi_linestring_tag>
: detail::correct::correct_nop<MultiLineString>
{};
template <typename Geometry>
-struct correct<multi_polygon_tag, Geometry>
+struct correct<Geometry, multi_polygon_tag>
: detail::multi_modify
<
Geometry,
Modified: branches/quickbook-dev/boost/geometry/multi/algorithms/covered_by.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/multi/algorithms/covered_by.hpp (original)
+++ branches/quickbook-dev/boost/geometry/multi/algorithms/covered_by.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,6 +15,7 @@
#define BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP
+#include <boost/geometry/algorithms/covered_by.hpp>
#include <boost/geometry/multi/core/closure.hpp>
#include <boost/geometry/multi/core/point_order.hpp>
#include <boost/geometry/multi/core/tags.hpp>
@@ -29,9 +30,10 @@
namespace dispatch
{
-template <typename Point, typename MultiPolygon, typename Strategy>
-struct covered_by<point_tag, multi_polygon_tag, Point, MultiPolygon, Strategy>
+template <typename Point, typename MultiPolygon>
+struct covered_by<Point, MultiPolygon, point_tag, multi_polygon_tag>
{
+ template <typename Strategy>
static inline bool apply(Point const& point,
MultiPolygon const& multi_polygon, Strategy const& strategy)
{
Modified: branches/quickbook-dev/boost/geometry/multi/algorithms/intersection.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/multi/algorithms/intersection.hpp (original)
+++ branches/quickbook-dev/boost/geometry/multi/algorithms/intersection.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -14,6 +14,7 @@
#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/algorithms/covered_by.hpp>
#include <boost/geometry/multi/algorithms/envelope.hpp>
#include <boost/geometry/multi/algorithms/num_points.hpp>
#include <boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp>
Modified: branches/quickbook-dev/boost/geometry/multi/algorithms/within.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/multi/algorithms/within.hpp (original)
+++ branches/quickbook-dev/boost/geometry/multi/algorithms/within.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -69,9 +69,10 @@
namespace dispatch
{
-template <typename Point, typename MultiPolygon, typename Strategy>
-struct within<point_tag, multi_polygon_tag, Point, MultiPolygon, Strategy>
+template <typename Point, typename MultiPolygon>
+struct within<Point, MultiPolygon, point_tag, multi_polygon_tag>
{
+ template <typename Strategy>
static inline bool apply(Point const& point,
MultiPolygon const& multi_polygon, Strategy const& strategy)
{
Modified: branches/quickbook-dev/boost/geometry/multi/io/wkt/read.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/multi/io/wkt/read.hpp (original)
+++ branches/quickbook-dev/boost/geometry/multi/io/wkt/read.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -58,6 +58,69 @@
handle_close_parenthesis(it, tokens.end(), wkt);
}
+
+ check_end(it, tokens.end(), wkt);
+ }
+};
+
+template <typename P>
+struct noparenthesis_point_parser
+{
+ static inline void apply(tokenizer::iterator& it, tokenizer::iterator end,
+ std::string const& wkt, P& point)
+ {
+ parsing_assigner<P, 0, dimension<P>::value>::apply(it, end, point, wkt);
+ }
+};
+
+template <typename MultiGeometry, typename PrefixPolicy>
+struct multi_point_parser
+{
+ static inline void apply(std::string const& wkt, MultiGeometry& geometry)
+ {
+ traits::clear<MultiGeometry>::apply(geometry);
+
+ tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
+ tokenizer::iterator it;
+
+ if (initialize<MultiGeometry>(tokens, PrefixPolicy::apply(), wkt, it))
+ {
+ handle_open_parenthesis(it, tokens.end(), wkt);
+
+ // If first point definition starts with "(" then parse points as (x y)
+ // otherwise as "x y"
+ bool using_brackets = (it != tokens.end() && *it == "(");
+
+ while(it != tokens.end() && *it != ")")
+ {
+ traits::resize<MultiGeometry>::apply(geometry, boost::size(geometry) + 1);
+
+ if (using_brackets)
+ {
+ point_parser
+ <
+ typename boost::range_value<MultiGeometry>::type
+ >::apply(it, tokens.end(), wkt, geometry.back());
+ }
+ else
+ {
+ noparenthesis_point_parser
+ <
+ typename boost::range_value<MultiGeometry>::type
+ >::apply(it, tokens.end(), wkt, geometry.back());
+ }
+
+ if (it != tokens.end() && *it == ",")
+ {
+ // Skip "," after point is parsed
+ ++it;
+ }
+ }
+
+ handle_close_parenthesis(it, tokens.end(), wkt);
+ }
+
+ check_end(it, tokens.end(), wkt);
}
};
@@ -69,10 +132,9 @@
template <typename MultiGeometry>
struct read_wkt<multi_point_tag, MultiGeometry>
- : detail::wkt::multi_parser
+ : detail::wkt::multi_point_parser
<
MultiGeometry,
- detail::wkt::point_parser,
detail::wkt::prefix_multipoint
>
{};
Modified: branches/quickbook-dev/boost/geometry/multi/multi.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/multi/multi.hpp (original)
+++ branches/quickbook-dev/boost/geometry/multi/multi.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,20 +17,21 @@
#include <boost/geometry/multi/core/closure.hpp>
#include <boost/geometry/multi/core/geometry_id.hpp>
-#include <boost/geometry/multi/core/is_areal.hpp>
#include <boost/geometry/multi/core/interior_rings.hpp>
+#include <boost/geometry/multi/core/is_areal.hpp>
#include <boost/geometry/multi/core/point_order.hpp>
#include <boost/geometry/multi/core/point_type.hpp>
#include <boost/geometry/multi/core/ring_type.hpp>
#include <boost/geometry/multi/core/tags.hpp>
#include <boost/geometry/multi/core/topological_dimension.hpp>
-
+#include <boost/geometry/multi/algorithms/append.hpp>
#include <boost/geometry/multi/algorithms/area.hpp>
#include <boost/geometry/multi/algorithms/centroid.hpp>
#include <boost/geometry/multi/algorithms/clear.hpp>
#include <boost/geometry/multi/algorithms/convert.hpp>
#include <boost/geometry/multi/algorithms/correct.hpp>
+#include <boost/geometry/multi/algorithms/covered_by.hpp>
#include <boost/geometry/multi/algorithms/distance.hpp>
#include <boost/geometry/multi/algorithms/envelope.hpp>
#include <boost/geometry/multi/algorithms/equals.hpp>
@@ -58,6 +59,7 @@
#include <boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp>
#include <boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp>
#include <boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp>
+#include <boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp>
#include <boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp>
#include <boost/geometry/multi/geometries/concepts/check.hpp>
Modified: branches/quickbook-dev/boost/geometry/policies/relate/de9im.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/policies/relate/de9im.hpp (original)
+++ branches/quickbook-dev/boost/geometry/policies/relate/de9im.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -167,14 +167,6 @@
true);
}
-
- static inline return_type parallel()
- {
- return de9im_segment(0,0,
- -1, -1, 1,
- -1, -1, 0,
- 1, 0, 2, false, false, true);
- }
};
Modified: branches/quickbook-dev/boost/geometry/policies/relate/direction.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/policies/relate/direction.hpp (original)
+++ branches/quickbook-dev/boost/geometry/policies/relate/direction.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,6 +15,7 @@
#include <boost/concept_check.hpp>
+#include <boost/geometry/arithmetic/determinant.hpp>
#include <boost/geometry/strategies/side_info.hpp>
#include <boost/geometry/util/math.hpp>
@@ -31,6 +32,8 @@
struct direction_type
{
+ // NOTE: "char" will be replaced by enum in future version
+
inline direction_type(side_info const& s, char h,
int ha, int hb,
int da = 0, int db = 0,
@@ -60,6 +63,8 @@
}
+ // TODO: replace this
+ // NOTE: "char" will be replaced by enum in future version
// "How" is the intersection formed?
char how;
@@ -121,7 +126,9 @@
typedef typename select_most_precise<coordinate_type, double>::type rtype;
+ template <typename R>
static inline return_type segments_intersect(side_info const& sides,
+ R const&,
coordinate_type const& dx1, coordinate_type const& dy1,
coordinate_type const& dx2, coordinate_type const& dy2,
S1 const& s1, S2 const& s2)
@@ -235,20 +242,31 @@
return return_type('d', false);
}
-
- static inline return_type parallel()
- {
- return return_type('p', false);
- }
-
static inline return_type error(std::string const&)
{
- // msg
- return return_type('d', false);
+ // Return "E" to denote error
+ // This will throw an error in get_turn_info
+ // TODO: change to enum or similar
+ return return_type('E', false);
}
private :
+ static inline bool is_left
+ (
+ coordinate_type const& ux,
+ coordinate_type const& uy,
+ coordinate_type const& vx,
+ coordinate_type const& vy
+ )
+ {
+ // This is a "side calculation" as in the strategies, but here terms are precalculated
+ // We might merge this with side, offering a pre-calculated term (in fact already done using cross-product)
+ // Waiting for implementing spherical...
+
+ rtype const zero = rtype();
+ return geometry::detail::determinant<rtype>(ux, uy, vx, vy) > zero;
+ }
template <std::size_t I>
static inline return_type calculate_side(side_info const& sides,
@@ -259,11 +277,7 @@
coordinate_type dpx = get<I, 0>(s2) - get<0, 0>(s1);
coordinate_type dpy = get<I, 1>(s2) - get<0, 1>(s1);
- // This is a "side calculation" as in the strategies, but here two terms are precalculated
- // We might merge this with side, offering a pre-calculated term
- // Waiting for implementing spherical...
-
- return dx1 * dpy - dy1 * dpx > 0
+ return is_left(dx1, dy1, dpx, dpy)
? return_type(sides, how, how_a, how_b, -1, 1)
: return_type(sides, how, how_a, how_b, 1, -1);
}
@@ -277,7 +291,7 @@
coordinate_type dpx = get<I, 0>(s2) - get<0, 0>(s1);
coordinate_type dpy = get<I, 1>(s2) - get<0, 1>(s1);
- return dx1 * dpy - dy1 * dpx > 0
+ return is_left(dx1, dy1, dpx, dpy)
? return_type(sides, how, how_a, how_b, 1, 1)
: return_type(sides, how, how_a, how_b, -1, -1);
}
@@ -293,7 +307,7 @@
coordinate_type dpx = get<1, 0>(s2) - get<0, 0>(s1);
coordinate_type dpy = get<1, 1>(s2) - get<0, 1>(s1);
- int dir = dx1 * dpy - dy1 * dpx > 0 ? 1 : -1;
+ int dir = is_left(dx1, dy1, dpx, dpy) ? 1 : -1;
// From other perspective, then reverse
bool const is_a = which == 'A';
@@ -321,7 +335,7 @@
// Ending at the middle, one ARRIVES, the other one is NEUTRAL
// (because it both "arrives" and "departs" there
- return dx * dpy - dy * dpx > 0
+ return is_left(dx, dy, dpx, dpy)
? return_type(sides, 'm', 1, 0, 1, 1)
: return_type(sides, 'm', 1, 0, -1, -1);
}
@@ -334,7 +348,7 @@
coordinate_type dpx = get<1, 0>(s1) - get<0, 0>(s2);
coordinate_type dpy = get<1, 1>(s1) - get<0, 1>(s2);
- return dx * dpy - dy * dpx > 0
+ return is_left(dx, dy, dpx, dpy)
? return_type(sides, 'm', 0, 1, 1, 1)
: return_type(sides, 'm', 0, 1, -1, -1);
}
Modified: branches/quickbook-dev/boost/geometry/policies/relate/intersection_points.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/policies/relate/intersection_points.hpp (original)
+++ branches/quickbook-dev/boost/geometry/policies/relate/intersection_points.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,6 +16,7 @@
#include <boost/concept_check.hpp>
#include <boost/numeric/conversion/cast.hpp>
+#include <boost/geometry/arithmetic/determinant.hpp>
#include <boost/geometry/core/access.hpp>
#include <boost/geometry/strategies/side_info.hpp>
#include <boost/geometry/util/select_calculation_type.hpp>
@@ -35,57 +36,33 @@
typedef ReturnType return_type;
typedef S1 segment_type1;
typedef S2 segment_type2;
+
typedef typename select_calculation_type
<
S1, S2, CalculationType
>::type coordinate_type;
- // Get the same type, but at least a double
- typedef typename select_most_precise<coordinate_type, double>::type rtype;
-
+ template <typename R>
static inline return_type segments_intersect(side_info const&,
+ 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)
{
- return_type result;
typedef typename geometry::coordinate_type
<
typename return_type::point_type
- >::type coordinate_type;
-
- // Get the same type, but at least a double (also used for divisions
- typedef typename select_most_precise
- <
- coordinate_type, double
- >::type promoted_type;
-
- promoted_type const s1x = get<0, 0>(s1);
- promoted_type const s1y = get<0, 1>(s1);
+ >::type return_coordinate_type;
- // Calculate other determinants - Cramers rule
- promoted_type const wx = get<0, 0>(s1) - get<0, 0>(s2);
- promoted_type const wy = get<0, 1>(s1) - get<0, 1>(s2);
- promoted_type const d = (dy2 * dx1) - (dx2 * dy1);
- promoted_type const da = (promoted_type(dx2) * wy) - (promoted_type(dy2) * wx);
-
- // r: ratio 0-1 where intersection divides A/B
- promoted_type r = da / d;
- // Handle robustness issues
- if (r < 0)
- {
- r = 0;
- }
- else if (r > 1)
- {
- r = 1;
- }
+ coordinate_type const s1x = get<0, 0>(s1);
+ coordinate_type const s1y = get<0, 1>(s1);
+ return_type result;
result.count = 1;
set<0>(result.intersections[0],
- boost::numeric_cast<coordinate_type>(s1x + r * promoted_type(dx1)));
+ boost::numeric_cast<return_coordinate_type>(R(s1x) + r * R(dx1)));
set<1>(result.intersections[0],
- boost::numeric_cast<coordinate_type>(s1y + r * promoted_type(dy1)));
+ boost::numeric_cast<return_coordinate_type>(R(s1y) + r * R(dy1)));
return result;
}
@@ -169,10 +146,7 @@
{
return return_type();
}
- static inline return_type parallel()
- {
- return return_type();
- }
+
static inline return_type degenerate(S1 const& s, bool)
{
return_type result;
Deleted: branches/quickbook-dev/boost/geometry/policies/relate/intersection_points_determinant.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/policies/relate/intersection_points_determinant.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,176 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
-#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
-
-
-#include <string>
-
-#include <boost/concept_check.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace policies { namespace relate
-{
-
-
-template <typename S1, typename S2, typename ReturnType, typename CalculationType = void>
-struct segments_intersection_points
-{
- typedef ReturnType return_type;
- typedef S1 segment_type1;
- typedef S2 segment_type2;
- typedef typename select_calculation_type
- <
- S1, S2, CalculationType
- >::type coordinate_type;
-
- // Get the same type, but at least a double
- typedef typename select_most_precise<coordinate_type, double>::type rtype;
-
- static inline return_type segments_intersect(side_info const&,
- coordinate_type const& dx1, coordinate_type const& dy1,
- coordinate_type const& dx2, coordinate_type const& dy2,
- S1 const& s1, S2 const& s2)
- {
- return_type result;
- typedef typename geometry::coordinate_type
- <
- typename return_type::point_type
- >::type coordinate_type;
-
- // Get the same type, but at least a double (also used for divisions
- typedef typename select_most_precise
- <
- coordinate_type, double
- >::type promoted_type;
-
- coordinate_type const s1x = get<0, 0>(s1);
- coordinate_type const s1y = get<0, 1>(s1);
-
- // Calculate other determinants - Cramers rule
- promoted_type const wx = get<0, 0>(s1) - get<0, 0>(s2);
- promoted_type const wy = get<0, 1>(s1) - get<0, 1>(s2);
- promoted_type const d = (dy2 * dx1) - (dx2 * dy1);
- promoted_type const da = (dx2 * wy) - (dy2 * wx);
-
- // r: ratio 0-1 where intersection divides A/B
- promoted_type const r = da / d;
-
- result.count = 1;
- set<0>(result.intersections[0],
- boost::numeric_cast<coordinate_type>(s1x + r * dx1));
- set<1>(result.intersections[0],
- boost::numeric_cast<coordinate_type>(s1y + r * dy1));
-
- return result;
- }
-
- static inline return_type collinear_touch(coordinate_type const& x,
- coordinate_type const& y, bool, char)
- {
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0], x);
- set<1>(result.intersections[0], y);
- return result;
- }
-
- template <typename S>
- static inline return_type collinear_inside(S const& s)
- {
- return_type result;
- result.count = 2;
- set<0>(result.intersections[0], get<0, 0>(s));
- set<1>(result.intersections[0], get<0, 1>(s));
- set<0>(result.intersections[1], get<1, 0>(s));
- set<1>(result.intersections[1], get<1, 1>(s));
- return result;
- }
-
- template <typename S>
- static inline return_type collinear_interior_boundary_intersect(S const& s, bool, bool)
- {
- return collinear_inside(s);
- }
-
- static inline return_type collinear_a_in_b(S1 const& s, bool)
- {
- return collinear_inside(s);
- }
- static inline return_type collinear_b_in_a(S2 const& s, bool)
- {
- return collinear_inside(s);
- }
-
- static inline return_type collinear_overlaps(
- coordinate_type const& x1, coordinate_type const& y1,
- coordinate_type const& x2, coordinate_type const& y2, bool)
- {
- return_type result;
- result.count = 2;
- set<0>(result.intersections[0], x1);
- set<1>(result.intersections[0], y1);
- set<0>(result.intersections[1], x2);
- set<1>(result.intersections[1], y2);
- return result;
- }
-
- static inline return_type segment_equal(S1 const& s, bool)
- {
- return_type result;
- result.count = 2;
- set<0>(result.intersections[0], get<0, 0>(s));
- set<1>(result.intersections[0], get<0, 1>(s));
- set<0>(result.intersections[1], get<1, 0>(s));
- set<1>(result.intersections[1], get<1, 1>(s));
- return result;
- }
-
- static inline return_type disjoint()
- {
- return return_type();
- }
- static inline return_type error(std::string const& msg)
- {
- return return_type();
- }
-
- static inline return_type collinear_disjoint()
- {
- return return_type();
- }
- static inline return_type parallel()
- {
- return return_type();
- }
- static inline return_type degenerate(S1 const& s, bool)
- {
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0], get<0, 0>(s));
- set<1>(result.intersections[0], get<0, 1>(s));
- return result;
- }
-};
-
-
-}} // namespace policies::relate
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
Deleted: branches/quickbook-dev/boost/geometry/policies/relate/intersection_points_slope.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/policies/relate/intersection_points_slope.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,213 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// 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)
-
-#ifndef BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
-#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
-
-
-#include <string>
-
-#include <boost/concept_check.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace policies { namespace relate
-{
-
-
-template <typename S1, typename S2, typename ReturnType, typename CalculationType = void>
-struct segments_intersection_points
-{
- typedef ReturnType return_type;
- typedef S1 segment_type1;
- typedef S2 segment_type2;
- typedef typename select_calculation_type
- <
- S1, S2, CalculationType
- >::type coordinate_type;
-
- // Get the same type, but at least a double (also used for divisions
- typedef typename select_most_precise
- <
- coordinate_type, double
- >::type promoted_type;
-
- template <int Dimension>
- static inline return_type rico(
- coordinate_type const& dm1, coordinate_type const& dn1,
- coordinate_type const& dm2, coordinate_type const& dn2,
- S1 const& s1, S2 const& s2)
- {
- promoted_type const a1 = dn1 / dm1;
- promoted_type const a2 = dn2 / dm2;
- promoted_type const da = a1 - a2;
-
- if (math::equals(da, 0))
- {
- return rico<1 - Dimension>(dn1, dm1, dn2, dm2, s1, s2);
- }
-
- promoted_type const b1 = get<0, Dimension>(s1) - a1 * get<0, 1 - Dimension>(s1);
- promoted_type const b2 = get<0, Dimension>(s2) - a2 * get<0, 1 - Dimension>(s2);
-
- promoted_type const v = (b2 - b1) / da;
-
- return_type result;
- result.count = 1;
- set<1 - Dimension>(result.intersections[0],
- boost::numeric_cast<coordinate_type>(v));
- set<Dimension>(result.intersections[0],
- boost::numeric_cast<coordinate_type>(a1 * v + b1));
- return result;
- }
-
- static inline return_type cross(S1 const& s1, S2 const& s2)
- {
- // Take one of first segment, and one of second segment
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0], get<0, 0>(s1));
- set<1>(result.intersections[0], get<0, 1>(s2));
- return result;
- }
-
-
- static inline return_type segments_intersect(side_info const& sides,
- coordinate_type const& dx1, coordinate_type const& dy1,
- coordinate_type const& dx2, coordinate_type const& dy2,
- S1 const& s1, S2 const& s2)
- {
- bool vertical1 = math::equals(dx1, 0);
- bool horizontal2 = math::equals(dy2, 0);
- if (vertical1 && horizontal2)
- {
- return cross(s1, s2);
- }
-
- bool vertical2 = math::equals(dx2, 0);
- bool horizontal1 = math::equals(dy1, 0);
- if (horizontal1 && vertical2)
- {
- return cross(s2, s1);
- }
- if (vertical1 || vertical2)
- {
- return rico<0>(dy1, dx1, dy2, dx2, s1, s2);
- }
- else
- {
- // Not crossing, take the most reasonable choice.
- // We want to divide by the largest one.
- //if (
-
- return rico<1>(dx1, dy1, dx2, dy2, s1, s2);
- }
- }
-
- static inline return_type collinear_touch(coordinate_type const& x,
- coordinate_type const& y, bool, char)
- {
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0], x);
- set<1>(result.intersections[0], y);
- return result;
- }
-
- template <typename S>
- static inline return_type collinear_inside(S const& s)
- {
- return_type result;
- result.count = 2;
- set<0>(result.intersections[0], get<0, 0>(s));
- set<1>(result.intersections[0], get<0, 1>(s));
- set<0>(result.intersections[1], get<1, 0>(s));
- set<1>(result.intersections[1], get<1, 1>(s));
- return result;
- }
-
- template <typename S>
- static inline return_type collinear_interior_boundary_intersect(S const& s, bool, bool)
- {
- return collinear_inside(s);
- }
-
- static inline return_type collinear_a_in_b(S1 const& s, bool)
- {
- return collinear_inside(s);
- }
- static inline return_type collinear_b_in_a(S2 const& s, bool)
- {
- return collinear_inside(s);
- }
-
- static inline return_type collinear_overlaps(
- coordinate_type const& x1, coordinate_type const& y1,
- coordinate_type const& x2, coordinate_type const& y2, bool)
- {
- return_type result;
- result.count = 2;
- set<0>(result.intersections[0], x1);
- set<1>(result.intersections[0], y1);
- set<0>(result.intersections[1], x2);
- set<1>(result.intersections[1], y2);
- return result;
- }
-
- static inline return_type segment_equal(S1 const& s, bool)
- {
- return_type result;
- result.count = 2;
- set<0>(result.intersections[0], get<0, 0>(s));
- set<1>(result.intersections[0], get<0, 1>(s));
- set<0>(result.intersections[1], get<1, 0>(s));
- set<1>(result.intersections[1], get<1, 1>(s));
- return result;
- }
-
- static inline return_type disjoint()
- {
- return return_type();
- }
- static inline return_type error(std::string const& msg)
- {
- return return_type();
- }
-
- static inline return_type collinear_disjoint()
- {
- return return_type();
- }
- static inline return_type parallel()
- {
- return return_type();
- }
- static inline return_type degenerate(S1 const& s, bool)
- {
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0], get<0, 0>(s));
- set<1>(result.intersections[0], get<0, 1>(s));
- return result;
- }
-};
-
-
-}} // namespace policies::relate
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
Modified: branches/quickbook-dev/boost/geometry/policies/relate/tupled.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/policies/relate/tupled.hpp (original)
+++ branches/quickbook-dev/boost/geometry/policies/relate/tupled.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -49,16 +49,18 @@
// Get the same type, but at least a double
typedef typename select_most_precise<coordinate_type, double>::type rtype;
+ template <typename R>
static inline return_type segments_intersect(side_info const& sides,
+ 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)
{
return boost::make_tuple
(
- Policy1::segments_intersect(sides,
+ Policy1::segments_intersect(sides, r,
dx1, dy1, dx2, dy2, s1, s2),
- Policy2::segments_intersect(sides,
+ Policy2::segments_intersect(sides, r,
dx1, dy1, dx2, dy2, s1, s2)
);
}
@@ -164,15 +166,6 @@
);
}
-
- static inline return_type parallel()
- {
- return boost::make_tuple
- (
- Policy1::parallel(),
- Policy2::parallel()
- );
- }
};
}} // namespace policies::relate
Modified: branches/quickbook-dev/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -31,13 +31,6 @@
#include <boost/geometry/views/reversible_view.hpp>
-// Temporary, comparing sorting, this can be removed in the end
-//#define BOOST_GEOMETRY_USE_FLEX_SORT
-//#define BOOST_GEOMETRY_USE_FLEX_SORT2
-#if defined(BOOST_GEOMETRY_USE_FLEX_SORT)
-# include <boost/algorithm/sorting/flex_sort.hpp>
-#endif
-
namespace boost { namespace geometry
{
@@ -103,7 +96,7 @@
}
// Then compare with earlier
- if (first && boost::size(range) > 0)
+ if (first)
{
// First time, assign left/right
left = *left_it;
@@ -178,62 +171,15 @@
}
};
-
template <typename Range>
static inline void sort(Range& range)
{
typedef typename boost::range_value<Range>::type point_type;
typedef geometry::less<point_type> comparator;
-#if defined(GGL_USE_FLEX_SORT)
-
- #if defined(GGL_USE_FLEX_SORT1)
- typedef boost::detail::default_predicate
- <
- boost::sort_filter_cutoff
- <
- 18,
- boost::detail::insert_sort_core,
- boost::sort_filter_ground
- <
- 30,
- boost::detail::heap_sort_core,
- boost::detail::quick_sort_core
- <
- boost::pivot_median_of_three,
- boost::default_partitionner
- >
- >
- >,
- comparator> my_sort;
- my_sort sort;
- #elif defined(GGL_USE_FLEX_SORT2)
-
- // 1, 5, 9, 18, 25: 0.75
- // 50: 0.81
-
- typedef boost::detail::default_predicate<boost::sort_filter_cutoff
- <
- 35,
- boost::detail::insert_sort_core,
- boost::detail::quick_sort_core<boost::pivot_middle, boost::default_partitionner>
- >, comparator
- > barend_sort;
-
- barend_sort sort;
- #else
- #error Define sub-flex-sort
- #endif
-
- sort(boost::begin(range), boost::end(range));
-
-#else
- std::sort
- (boost::begin(range), boost::end(range), comparator());
-#endif
+ std::sort(boost::begin(range), boost::end(range), comparator());
}
-
} // namespace detail
#endif // DOXYGEN_NO_DETAIL
@@ -279,8 +225,15 @@
{
// First pass.
// Get min/max (in most cases left / right) points
- // This makes use of the geometry::less/greater predicates with the optional
- // direction template parameter to indicate x direction
+ // This makes use of the geometry::less/greater predicates
+
+ // For the left boundary it is important that multiple points
+ // are sorted from bottom to top. Therefore the less predicate
+ // does not take the x-only template parameter (this fixes ticket #6019.
+ // For the right boundary it is not necessary (though also not harmful),
+ // because points are sorted from bottom to top in a later stage.
+ // For symmetry and to get often more balanced lower/upper halves
+ // we keep it.
typedef typename geometry::detail::range_type<InputGeometry>::type range_type;
@@ -293,8 +246,8 @@
<
range_type,
range_iterator,
- geometry::less<point_type, 0>,
- geometry::greater<point_type, 0>
+ geometry::less<point_type>,
+ geometry::greater<point_type>
> extremes;
geometry::detail::for_each_range(geometry, extremes);
Modified: branches/quickbook-dev/boost/geometry/strategies/cartesian/area_surveyor.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/cartesian/area_surveyor.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/cartesian/area_surveyor.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,9 +16,11 @@
#include <boost/mpl/if.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/arithmetic/determinant.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/util/select_most_precise.hpp>
namespace boost { namespace geometry
@@ -82,7 +84,8 @@
inline return_type area() const
{
return_type result = sum;
- result /= 2;
+ return_type const two = 2;
+ result /= two;
return result;
}
};
@@ -96,7 +99,7 @@
summation& state)
{
// SUM += x2 * y1 - x1 * y2;
- state.sum += get<0>(p2) * get<1>(p1) - get<0>(p1) * get<1>(p2);
+ state.sum += detail::determinant<return_type>(p2, p1);
}
static inline return_type result(summation const& state)
Modified: branches/quickbook-dev/boost/geometry/strategies/cartesian/cart_intersect.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/cartesian/cart_intersect.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/cartesian/cart_intersect.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,6 +16,7 @@
#include <boost/geometry/geometries/concepts/point_concept.hpp>
#include <boost/geometry/geometries/concepts/segment_concept.hpp>
+#include <boost/geometry/arithmetic/determinant.hpp>
#include <boost/geometry/algorithms/detail/assign_values.hpp>
#include <boost/geometry/util/math.hpp>
@@ -40,21 +41,17 @@
namespace detail
{
-template <typename Segment, size_t Dimension>
-struct segment_arrange
+template <std::size_t Dimension, typename Segment, typename T>
+static inline void segment_arrange(Segment const& s, T& s_1, T& s_2, bool& swapped)
{
- template <typename T>
- static inline void apply(Segment const& s, T& s_1, T& s_2, bool& swapped)
+ s_1 = get<0, Dimension>(s);
+ s_2 = get<1, Dimension>(s);
+ if (s_1 > s_2)
{
- s_1 = get<0, Dimension>(s);
- s_2 = get<1, Dimension>(s);
- if (s_1 > s_2)
- {
- std::swap(s_1, s_2);
- swapped = true;
- }
+ std::swap(s_1, s_2);
+ swapped = true;
}
-};
+}
template <std::size_t Index, typename Segment>
inline typename geometry::point_type<Segment>::type get_from_index(
@@ -120,34 +117,18 @@
coordinate_type const& dx_a, coordinate_type const& dy_a,
coordinate_type const& dx_b, coordinate_type const& dy_b)
{
- // 1) Handle "disjoint", probably common case.
- // per dimension, 2 cases: a_1----------a_2 b_1-------b_2 or B left of A
- coordinate_type ax_1, ax_2, bx_1, bx_2;
- bool ax_swapped = false, bx_swapped = false;
- detail::segment_arrange<segment_type1, 0>::apply(a, ax_1, ax_2, ax_swapped);
- detail::segment_arrange<segment_type2, 0>::apply(b, bx_1, bx_2, bx_swapped);
- if (ax_2 < bx_1 || ax_1 > bx_2)
- {
- return Policy::disjoint();
- }
-
- // 1b) In Y-dimension
- coordinate_type ay_1, ay_2, by_1, by_2;
- bool ay_swapped = false, by_swapped = false;
- detail::segment_arrange<segment_type1, 1>::apply(a, ay_1, ay_2, ay_swapped);
- detail::segment_arrange<segment_type2, 1>::apply(b, by_1, by_2, by_swapped);
- if (ay_2 < ay_1 || ay_1 > by_2)
- {
- return Policy::disjoint();
- }
-
typedef side::side_by_triangle<coordinate_type> side;
side_info sides;
- // 2) Calculate sides
- // Note: Do NOT yet calculate the determinant here, but use the SIDE strategy.
- // Determinant calculation is not robust; side (orient) can be made robust
- // (and is much robuster even without measures)
+ sides.set<0>
+ (
+ side::apply(detail::get_from_index<0>(b)
+ , detail::get_from_index<1>(b)
+ , detail::get_from_index<0>(a)),
+ side::apply(detail::get_from_index<0>(b)
+ , detail::get_from_index<1>(b)
+ , detail::get_from_index<1>(a))
+ );
sides.set<1>
(
side::apply(detail::get_from_index<0>(a)
@@ -158,25 +139,22 @@
, detail::get_from_index<1>(b))
);
- if (sides.same<1>())
- {
- // Both points are at same side of other segment, we can leave
- return Policy::disjoint();
- }
+ bool collinear = sides.collinear();
- // 2b) For other segment
- sides.set<0>
- (
- side::apply(detail::get_from_index<0>(b)
- , detail::get_from_index<1>(b)
- , detail::get_from_index<0>(a)),
- side::apply(detail::get_from_index<0>(b)
- , detail::get_from_index<1>(b)
- , detail::get_from_index<1>(a))
- );
+ if ((sides.zero<0>() && ! sides.zero<1>()) || (sides.zero<1>() && ! sides.zero<0>()))
+ {
+ // If one of the segments is collinear, the other must be as well.
+ // So handle it as collinear.
+ // (In float/double epsilon margins it can easily occur that one or two of them are -1/1)
+ // sides.debug();
+ sides.set<0>(0,0);
+ sides.set<1>(0,0);
+ collinear = true;
+ }
- if (sides.same<0>())
+ if (sides.same<0>() || sides.same<1>())
{
+ // Both points are at same side of other segment, we can leave
return Policy::disjoint();
}
@@ -191,76 +169,121 @@
return Policy::degenerate(b, false);
}
- bool collinear = sides.collinear();
-
- // Get the same type, but at least a double (also used for divisions)
typedef typename select_most_precise
<
coordinate_type, double
>::type promoted_type;
+ // r: ratio 0-1 where intersection divides A/B
+ // (only calculated for non-collinear segments)
+ promoted_type r;
+ if (! collinear)
+ {
+ // Calculate determinants - Cramers rule
+ coordinate_type const wx = get<0, 0>(a) - get<0, 0>(b);
+ coordinate_type const wy = get<0, 1>(a) - get<0, 1>(b);
+ coordinate_type const d = geometry::detail::determinant<coordinate_type>(dx_a, dy_a, dx_b, dy_b);
+ coordinate_type const da = geometry::detail::determinant<coordinate_type>(dx_b, dy_b, wx, wy);
+
+ coordinate_type const zero = coordinate_type();
+ if (math::equals(d, zero))
+ {
+ // This is still a collinear case (because of FP imprecision this can occur here)
+ // sides.debug();
+ sides.set<0>(0,0);
+ sides.set<1>(0,0);
+ collinear = true;
+ }
+ else
+ {
+ r = da / d;
+
+ // Ratio should lie between 0 and 1
+ // Also these three conditions might be of FP imprecision, the segments were actually (nearly) collinear
+ promoted_type const zero = 0;
+ promoted_type const one = 1;
+ promoted_type const epsilon = std::numeric_limits<double>::epsilon();
- promoted_type const d = (dy_b * dx_a) - (dx_b * dy_a);
- // Determinant d should be nonzero.
- // If it is zero, we have an robustness issue here,
- // (and besides that we cannot divide by it)
- if(math::equals(d, zero) && ! collinear)
- //if(! collinear && sides.as_collinear())
- {
-#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
- std::cout << "Determinant zero? Type : "
- << typeid(coordinate_type).name()
- << std::endl;
-
- std::cout << " dx_a : " << dx_a << std::endl;
- std::cout << " dy_a : " << dy_a << std::endl;
- std::cout << " dx_b : " << dx_b << std::endl;
- std::cout << " dy_b : " << dy_b << std::endl;
-
- std::cout << " side a <-> b.first : " << sides.get<0,0>() << std::endl;
- std::cout << " side a <-> b.second: " << sides.get<0,1>() << std::endl;
- std::cout << " side b <-> a.first : " << sides.get<1,0>() << std::endl;
- std::cout << " side b <-> a.second: " << sides.get<1,1>() << std::endl;
-#endif
-
- if (sides.as_collinear())
- {
- sides.set<0>(0,0);
- sides.set<1>(0,0);
- collinear = true;
- }
- else
- {
- return Policy::error("Determinant zero!");
- }
- }
+ if (r < zero || r > one)
+ {
+ if (sides.crossing() || sides.touching())
+ {
+ // ROBUSTNESS: the r value can in epsilon-cases be 1.14, while (with perfect arithmetic)
+ // it should be one. If segments are crossing (we can see that with the sides)
+ // and one is inside the other, there must be an intersection point.
+ // We correct for that.
+ // This is (only) in case #ggl_list_20110820_christophe in unit tests
+ // If segments are touching (two sides zero), of course they should intersect
+ // This is (only) in case #buffer_rt_i in the unit tests)
+ // TODO: find more cases
+ if (r > one)
+ {
+ // std::cout << "ROBUSTNESS: correction of r " << r << std::endl;
+ r = one;
+ }
+ else if (r < zero)
+ {
+ // std::cout << "ROBUSTNESS: correction of r " << r << std::endl;
+ r = zero;
+ }
+ }
+
+ if (r < zero)
+ {
+ if (r < -epsilon)
+ {
+ return Policy::disjoint();
+ }
+ r = zero;
+ }
+ else if (r > one)
+ {
+ if (r > one + epsilon)
+ {
+ return Policy::disjoint();
+ }
+ r = one;
+ }
+ }
+ }
+ }
if(collinear)
{
- // Segments are collinear. We'll find out how.
- if (math::equals(dx_b, zero))
+ if (math::abs(dx_a) + math::abs(dx_b) < math::abs(dy_a) + math::abs(dy_a))
{
- // Vertical -> Check y-direction
- return relate_collinear(a, b,
- ay_1, ay_2, by_1, by_2,
- ay_swapped, by_swapped);
+ // Y direction contains larger segments (maybe dx is zero)
+ return relate_collinear<1>(a, b);
}
else
{
- // Check x-direction
- return relate_collinear(a, b,
- ax_1, ax_2, bx_1, bx_2,
- ax_swapped, bx_swapped);
+ return relate_collinear<0>(a, b);
}
}
- return Policy::segments_intersect(sides,
+ return Policy::segments_intersect(sides, r,
dx_a, dy_a, dx_b, dy_b,
a, b);
}
private :
+ template <std::size_t Dimension>
+ static inline return_type relate_collinear(segment_type1 const& a,
+ segment_type2 const& b)
+ {
+ coordinate_type a_1, a_2, b_1, b_2;
+ bool a_swapped = false, b_swapped = false;
+ detail::segment_arrange<Dimension>(a, a_1, a_2, a_swapped);
+ detail::segment_arrange<Dimension>(b, b_1, b_2, b_swapped);
+ if (math::smaller(a_2, b_1) || math::larger(a_1, b_2))
+ //if (a_2 < b_1 || a_1 > b_2)
+ {
+ return Policy::disjoint();
+ }
+ return relate_collinear(a, b, a_1, a_2, b_1, b_2, a_swapped, b_swapped);
+ }
+
/// Relate segments known collinear
static inline return_type relate_collinear(segment_type1 const& a
, segment_type2 const& b
Modified: branches/quickbook-dev/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -19,6 +19,7 @@
#include <boost/numeric/conversion/cast.hpp>
#include <boost/type_traits.hpp>
+#include <boost/geometry/arithmetic/determinant.hpp>
#include <boost/geometry/core/coordinate_type.hpp>
#include <boost/geometry/core/point_type.hpp>
#include <boost/geometry/strategies/centroid.hpp>
@@ -177,7 +178,7 @@
calculation_type const y1 = boost::numeric_cast<calculation_type>(get<1>(p1));
calculation_type const x2 = boost::numeric_cast<calculation_type>(get<0>(p2));
calculation_type const y2 = boost::numeric_cast<calculation_type>(get<1>(p2));
- calculation_type const ai = x1 * y2 - x2 * y1;
+ calculation_type const ai = geometry::detail::determinant<calculation_type>(p1, p2);
state.count++;
state.sum_a2 += ai;
state.sum_x += ai * (x1 + x2);
@@ -187,7 +188,7 @@
static inline bool result(sums const& state, Point& centroid)
{
calculation_type const zero = calculation_type();
- if (state.count > 0 && state.sum_a2 != zero)
+ if (state.count > 0 && ! math::equals(state.sum_a2, zero))
{
calculation_type const v3 = 3;
calculation_type const a3 = v3 * state.sum_a2;
Modified: branches/quickbook-dev/boost/geometry/strategies/cartesian/distance_projected_point.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/cartesian/distance_projected_point.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/cartesian/distance_projected_point.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -75,23 +75,27 @@
class projected_point
{
public :
- typedef typename strategy::distance::services::return_type<Strategy>::type calculation_type;
-
-private :
-
// The three typedefs below are necessary to calculate distances
// from segments defined in integer coordinates.
// Integer coordinates can still result in FP distances.
// There is a division, which must be represented in FP.
// So promote.
- typedef typename promote_floating_point<calculation_type>::type fp_type;
+ typedef typename promote_floating_point
+ <
+ typename strategy::distance::services::return_type
+ <
+ Strategy
+ >::type
+ >::type calculation_type;
+
+private :
// A projected point of points in Integer coordinates must be able to be
// represented in FP.
typedef model::point
<
- fp_type,
+ calculation_type,
dimension<PointOfSegment>::value,
typename coordinate_system<PointOfSegment>::type
> fp_point_type;
@@ -139,19 +143,19 @@
boost::ignore_unused_variable_warning(strategy);
calculation_type const zero = calculation_type();
- fp_type const c1 = dot_product(w, v);
+ calculation_type const c1 = dot_product(w, v);
if (c1 <= zero)
{
return strategy.apply(p, p1);
}
- fp_type const c2 = dot_product(v, v);
+ calculation_type const c2 = dot_product(v, v);
if (c2 <= c1)
{
return strategy.apply(p, p2);
}
// See above, c1 > 0 AND c2 > c1 so: c2 != 0
- fp_type const b = c1 / c2;
+ calculation_type const b = c1 / c2;
fp_strategy_type fp_strategy
= strategy::distance::services::get_similar
Modified: branches/quickbook-dev/boost/geometry/strategies/cartesian/distance_pythagoras.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/cartesian/distance_pythagoras.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/cartesian/distance_pythagoras.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,8 +22,7 @@
#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
+#include <boost/geometry/util/calculation_type.hpp>
@@ -82,7 +81,8 @@
class pythagoras
{
public :
- typedef typename select_calculation_type
+
+ typedef typename util::calculation_type::geometric::binary
<
Point1,
Point2,
@@ -136,10 +136,14 @@
{
typedef comparable::pythagoras<Point1, Point2, CalculationType> comparable_type;
public :
- typedef typename promote_floating_point
- <
- typename services::return_type<comparable_type>::type
- >::type calculation_type;
+ typedef typename util::calculation_type::geometric::binary
+ <
+ Point1,
+ Point2,
+ CalculationType,
+ double,
+ double // promote integer to double
+ >::type calculation_type;
/*!
\brief applies the distance calculation using pythagoras
Modified: branches/quickbook-dev/boost/geometry/strategies/cartesian/side_by_triangle.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/cartesian/side_by_triangle.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/cartesian/side_by_triangle.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,10 +17,9 @@
#include <boost/mpl/if.hpp>
#include <boost/type_traits.hpp>
+#include <boost/geometry/arithmetic/determinant.hpp>
#include <boost/geometry/core/access.hpp>
-
#include <boost/geometry/util/select_coordinate_type.hpp>
-
#include <boost/geometry/strategies/side.hpp>
@@ -66,7 +65,6 @@
CalculationType
>::type coordinate_type;
-//std::cout << "side: " << typeid(coordinate_type).name() << std::endl;
coordinate_type const x = get<0>(p);
coordinate_type const y = get<1>(p);
@@ -87,7 +85,12 @@
promoted_type const dpx = x - sx1;
promoted_type const dpy = y - sy1;
- promoted_type const s = dx * dpy - dy * dpx;
+ promoted_type const s
+ = geometry::detail::determinant<promoted_type>
+ (
+ dx, dy,
+ dpx, dpy
+ );
promoted_type const zero = promoted_type();
return math::equals(s, zero) ? 0
Modified: branches/quickbook-dev/boost/geometry/strategies/side_info.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/side_info.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/side_info.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -67,21 +67,42 @@
&& sides[1].second == 0;
}
- // If one of the segments is collinear, the other must be as well.
- // So handle it as collinear.
- // (In floating point margins it can occur that one of them is 1!)
- inline bool as_collinear() const
+ inline bool crossing() const
{
- return sides[0].first * sides[0].second == 0
- || sides[1].first * sides[1].second == 0;
+ return sides[0].first * sides[0].second == -1
+ && sides[1].first * sides[1].second == -1;
}
+ inline bool touching() const
+ {
+ return (sides[0].first * sides[1].first == -1
+ && sides[0].second == 0 && sides[1].second == 0)
+ || (sides[1].first * sides[0].first == -1
+ && sides[1].second == 0 && sides[0].second == 0);
+ }
+
+ template <int Which>
+ inline bool zero() const
+ {
+ return sides[Which].first == 0 && sides[Which].second == 0;
+ }
+
+ inline void debug() const
+ {
+ std::cout << sides[0].first << " "
+ << sides[0].second << " "
+ << sides[1].first << " "
+ << sides[1].second
+ << std::endl;
+ }
+
+
inline void reverse()
{
std::swap(sides[0], sides[1]);
}
-private :
+//private :
std::pair<int, int> sides[2];
};
Modified: branches/quickbook-dev/boost/geometry/strategies/strategy_transform.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/strategies/strategy_transform.hpp (original)
+++ branches/quickbook-dev/boost/geometry/strategies/strategy_transform.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,7 +23,9 @@
#include <boost/geometry/algorithms/convert.hpp>
#include <boost/geometry/arithmetic/arithmetic.hpp>
#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/radian_access.hpp>
#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/strategies/transform.hpp>
#include <boost/geometry/util/math.hpp>
#include <boost/geometry/util/select_coordinate_type.hpp>
@@ -251,6 +253,23 @@
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
@@ -361,6 +380,16 @@
}
};
+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);
+ }
+};
+
#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
namespace services
@@ -454,6 +483,11 @@
{
typedef from_cartesian_3_to_spherical_polar_3<P1, P2> type;
};
+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;
+};
} // namespace services
Modified: branches/quickbook-dev/boost/geometry/util/math.hpp
==============================================================================
--- branches/quickbook-dev/boost/geometry/util/math.hpp (original)
+++ branches/quickbook-dev/boost/geometry/util/math.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -44,11 +44,43 @@
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 bool apply(Type const& a, Type const& b)
{
+ 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
- return std::abs(a - b) <= std::numeric_limits<Type>::epsilon() * std::abs(a);
+ return std::abs(a - b) <= std::numeric_limits<Type>::epsilon() * get_max(std::abs(a), std::abs(b), 1.0);
+ }
+};
+
+template <typename Type, bool IsFloatingPoint>
+struct smaller
+{
+ static inline bool apply(Type const& a, Type const& b)
+ {
+ return a < b;
+ }
+};
+
+template <typename Type>
+struct smaller<Type, true>
+{
+ static inline bool apply(Type const& a, Type const& b)
+ {
+ if (equals<Type, true>::apply(a, b))
+ {
+ return false;
+ }
+ return a < b;
}
};
@@ -116,6 +148,28 @@
>::apply(a, b);
}
+template <typename T1, typename T2>
+inline bool smaller(T1 const& a, T2 const& b)
+{
+ typedef typename select_most_precise<T1, T2>::type select_type;
+ return detail::smaller
+ <
+ select_type,
+ boost::is_floating_point<select_type>::type::value
+ >::apply(a, b);
+}
+
+template <typename T1, typename T2>
+inline bool larger(T1 const& a, T2 const& b)
+{
+ typedef typename select_most_precise<T1, T2>::type select_type;
+ return detail::smaller
+ <
+ select_type,
+ boost::is_floating_point<select_type>::type::value
+ >::apply(b, a);
+}
+
double const d2r = geometry::math::pi<double>() / 180.0;
Modified: branches/quickbook-dev/boost/graph/adjacency_list_io.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/adjacency_list_io.hpp (original)
+++ branches/quickbook-dev/boost/graph/adjacency_list_io.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -215,7 +215,7 @@
template<class Val>
PropertyPrinter& operator () ( std::ostream& out, const Val& v )
{
- typename property_map<Graph,Tag>::type ps = get(Tag(), *graph);
+ typename property_map<Graph,Tag>::const_type ps = get(Tag(), *graph);
out << ps[ v ] <<" ";
PropertyPrinter<Graph,Next> print(*graph);
print(out, v);
Modified: branches/quickbook-dev/boost/graph/astar_search.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/astar_search.hpp (original)
+++ branches/quickbook-dev/boost/graph/astar_search.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -158,6 +158,7 @@
template <class Edge, class Graph>
void tree_edge(Edge e, const Graph& g) {
+ using boost::get;
m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
m_combine, m_compare);
@@ -173,6 +174,7 @@
template <class Edge, class Graph>
void gray_target(Edge e, const Graph& g) {
+ using boost::get;
m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
m_combine, m_compare);
@@ -189,6 +191,7 @@
template <class Edge, class Graph>
void black_target(Edge e, const Graph& g) {
+ using boost::get;
m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
m_combine, m_compare);
Modified: branches/quickbook-dev/boost/graph/biconnected_components.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/biconnected_components.hpp (original)
+++ branches/quickbook-dev/boost/graph/biconnected_components.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,17 +28,23 @@
{
template<typename ComponentMap, typename DiscoverTimeMap,
typename LowPointMap, typename PredecessorMap,
- typename OutputIterator, typename Stack,
+ typename OutputIterator, typename Stack,
+ typename ArticulationVector, typename IndexMap,
typename DFSVisitor>
struct biconnected_components_visitor : public dfs_visitor<>
{
biconnected_components_visitor
- (ComponentMap comp, std::size_t& c, DiscoverTimeMap dtm,
+ (ComponentMap comp, std::size_t& c,
+ std::size_t& children_of_root, DiscoverTimeMap dtm,
std::size_t& dfs_time, LowPointMap lowpt, PredecessorMap pred,
- OutputIterator out, Stack& S, DFSVisitor vis)
- : comp(comp), c(c), children_of_root(0), dtm(dtm),
- dfs_time(dfs_time), lowpt(lowpt),
- pred(pred), out(out), S(S), vis(vis) { }
+ OutputIterator out, Stack& S,
+ ArticulationVector& is_articulation_point, IndexMap index_map,
+ DFSVisitor vis)
+ : comp(comp), c(c), children_of_root(children_of_root),
+ dtm(dtm), dfs_time(dfs_time), lowpt(lowpt),
+ pred(pred), out(out), S(S),
+ is_articulation_point(is_articulation_point),
+ index_map(index_map), vis(vis) { }
template <typename Vertex, typename Graph>
void initialize_vertex(const Vertex& u, Graph& g)
@@ -89,8 +95,7 @@
typename boost::graph_traits<Graph>::vertex_descriptor src = source(e, g);
typename boost::graph_traits<Graph>::vertex_descriptor tgt = target(e, g);
- if ( ( tgt != get(pred, src) || get(pred, src) == src ) &&
- get(dtm, tgt) < get(dtm, src) ) {
+ if ( tgt != get(pred, src) ) {
S.push(e);
put(lowpt, src,
min BOOST_PREVENT_MACRO_SUBSTITUTION(get(lowpt, src),
@@ -111,40 +116,41 @@
BOOST_USING_STD_MIN();
Vertex parent = get(pred, u);
if (parent == u) { // Root of tree is special
- if (children_of_root >= 2) {
- *out++ = u;
- }
- return;
- }
- put(lowpt, parent,
- min BOOST_PREVENT_MACRO_SUBSTITUTION(get(lowpt, parent),
+ is_articulation_point[get(index_map, u)] = (children_of_root > 1);
+ } else {
+ put(lowpt, parent,
+ min BOOST_PREVENT_MACRO_SUBSTITUTION(get(lowpt, parent),
get(lowpt, u)));
- if ( get(lowpt, u) >= get(dtm, parent) ) {
- if ( get(pred, parent) != parent ) {
- *out++ = parent;
- }
- while ( get(dtm, source(S.top(), g)) >= get(dtm, u) ) {
+ if ( get(lowpt, u) >= get(dtm, parent) ) {
+ is_articulation_point[get(index_map, parent)] = true;
+ while ( get(dtm, source(S.top(), g)) >= get(dtm, u) ) {
+ put(comp, S.top(), c);
+ S.pop();
+ }
+ assert (source(S.top(), g) == parent);
+ assert (target(S.top(), g) == u);
put(comp, S.top(), c);
S.pop();
+ ++c;
}
- assert (source(S.top(), g) == parent);
- assert (target(S.top(), g) == u);
- put(comp, S.top(), c);
- S.pop();
- ++c;
+ }
+ if ( is_articulation_point[get(index_map, u)] ) {
+ *out++ = u;
}
vis.finish_vertex(u, g);
}
ComponentMap comp;
std::size_t& c;
- std::size_t children_of_root;
+ std::size_t& children_of_root;
DiscoverTimeMap dtm;
std::size_t& dfs_time;
LowPointMap lowpt;
PredecessorMap pred;
OutputIterator out;
Stack& S;
+ ArticulationVector& is_articulation_point;
+ IndexMap index_map;
DFSVisitor vis;
};
@@ -168,14 +174,16 @@
vertex_t> ));
std::size_t num_components = 0;
+ std::size_t children_of_root;
std::size_t dfs_time = 0;
- std::stack<edge_t> S;
+ std::stack<edge_t> S;
+ std::vector<char> is_articulation_point(num_vertices(g));
- biconnected_components_visitor<ComponentMap, DiscoverTimeMap,
- LowPointMap, PredecessorMap, OutputIterator, std::stack<edge_t>,
- DFSVisitor>
- vis(comp, num_components, dtm, dfs_time, lowpt, pred, out,
- S, dfs_vis);
+ biconnected_components_visitor<ComponentMap, DiscoverTimeMap,
+ LowPointMap, PredecessorMap, OutputIterator, std::stack<edge_t>,
+ std::vector<char>, VertexIndexMap, DFSVisitor>
+ vis(comp, num_components, children_of_root, dtm, dfs_time,
+ lowpt, pred, out, S, is_articulation_point, index_map, dfs_vis);
depth_first_search(g, visitor(vis).vertex_index_map(index_map));
Modified: branches/quickbook-dev/boost/graph/compressed_sparse_row_graph.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/compressed_sparse_row_graph.hpp (original)
+++ branches/quickbook-dev/boost/graph/compressed_sparse_row_graph.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1134,7 +1134,6 @@
Vertex old_num_verts_plus_one = g.m_forward.m_rowstart.size();
EdgeIndex numedges = g.m_forward.m_rowstart.back();
g.m_forward.m_rowstart.resize(old_num_verts_plus_one + count, numedges);
- g.m_backward.m_rowstart.resize(old_num_verts_plus_one + count, numedges);
g.vertex_properties().resize(num_vertices(g));
return old_num_verts_plus_one - 1;
}
Modified: branches/quickbook-dev/boost/graph/detail/histogram_sort.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/detail/histogram_sort.hpp (original)
+++ branches/quickbook-dev/boost/graph/detail/histogram_sort.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -60,6 +60,7 @@
// Put the degree of each vertex v into m_rowstart[v + 1]
for (KeyIterator i = begin; i != end; ++i) {
if (key_filter(*i)) {
+ assert (key_transform(*i) < numkeys);
++starts[key_transform(*i) + 1];
}
}
@@ -99,6 +100,7 @@
for (KeyIterator i = key_begin; i != key_end; ++i, ++v1i) {
if (key_filter(*i)) {
vertices_size_type source = key_transform(*i);
+ assert (source < numkeys);
EdgeIndex insert_pos = current_insert_positions[source];
++current_insert_positions[source];
values1_out[insert_pos] = *v1i;
@@ -137,6 +139,7 @@
for (KeyIterator i = key_begin; i != key_end; ++i, ++v1i, ++v2i) {
if (key_filter(*i)) {
vertices_size_type source = key_transform(*i);
+ assert (source < numkeys);
EdgeIndex insert_pos = current_insert_positions[source];
++current_insert_positions[source];
values1_out[insert_pos] = *v1i;
@@ -163,6 +166,7 @@
std::vector<EdgeIndex> insert_positions(rowstart, rowstart + numkeys);
// 2. Swap the sources and targets into place
for (size_t i = 0; i < rowstart[numkeys]; ++i) {
+ assert (key_transform(key_begin[i]) < numkeys);
// While edge i is not in the right bucket:
while (!(i >= rowstart[key_transform(key_begin[i])] && i < insert_positions[key_transform(key_begin[i])])) {
// Add a slot in the right bucket
@@ -197,6 +201,7 @@
std::vector<EdgeIndex> insert_positions(rowstart, rowstart + numkeys);
// 2. Swap the sources and targets into place
for (size_t i = 0; i < rowstart[numkeys]; ++i) {
+ assert (key_transform(key_begin[i]) < numkeys);
// While edge i is not in the right bucket:
while (!(i >= rowstart[key_transform(key_begin[i])] && i < insert_positions[key_transform(key_begin[i])])) {
// Add a slot in the right bucket
Modified: branches/quickbook-dev/boost/graph/detail/read_graphviz_spirit.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/detail/read_graphviz_spirit.hpp (original)
+++ branches/quickbook-dev/boost/graph/detail/read_graphviz_spirit.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -604,7 +604,9 @@
scanner_t scan(begin, end, policies);
- return p.parse(scan);
+ bool ok = p.parse(scan);
+ m_graph.finish_building_graph();
+ return ok;
}
} // namespace boost
Modified: branches/quickbook-dev/boost/graph/edmonds_karp_max_flow.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/edmonds_karp_max_flow.hpp (original)
+++ branches/quickbook-dev/boost/graph/edmonds_karp_max_flow.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -52,21 +52,21 @@
// find minimum residual capacity along the augmenting path
FlowValue delta = (std::numeric_limits<FlowValue>::max)();
- e = p[sink];
+ e = get(p, sink);
do {
BOOST_USING_STD_MIN();
- delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(delta, residual_capacity[e]);
+ delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(delta, get(residual_capacity, e));
u = source(e, g);
- e = p[u];
+ e = get(p, u);
} while (u != src);
// push delta units of flow along the augmenting path
- e = p[sink];
+ e = get(p, sink);
do {
- residual_capacity[e] -= delta;
- residual_capacity[reverse_edge[e]] += delta;
+ put(residual_capacity, e, get(residual_capacity, e) - delta);
+ put(residual_capacity, get(reverse_edge, e), get(residual_capacity, get(reverse_edge, e)) + delta);
u = source(e, g);
- e = p[u];
+ e = get(p, u);
} while (u != src);
}
@@ -94,22 +94,22 @@
typename graph_traits<Graph>::out_edge_iterator ei, e_end;
for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
for (boost::tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei)
- res[*ei] = cap[*ei];
+ put(res, *ei, get(cap, *ei));
- color[sink] = Color::gray();
- while (color[sink] != Color::white()) {
+ put(color, sink, Color::gray());
+ while (get(color, sink) != Color::white()) {
boost::queue<vertex_t> Q;
breadth_first_search
(detail::residual_graph(g, res), src, Q,
make_bfs_visitor(record_edge_predecessors(pred, on_tree_edge())),
color);
- if (color[sink] != Color::white())
+ if (get(color, sink) != Color::white())
detail::augment(g, src, sink, pred, res, rev);
} // while
typename property_traits<CapacityEdgeMap>::value_type flow = 0;
for (boost::tie(ei, e_end) = out_edges(src, g); ei != e_end; ++ei)
- flow += (cap[*ei] - res[*ei]);
+ flow += (get(cap, *ei) - get(res, *ei));
return flow;
} // edmonds_karp_max_flow()
Modified: branches/quickbook-dev/boost/graph/graphml.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/graphml.hpp (original)
+++ branches/quickbook-dev/boost/graph/graphml.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -262,7 +262,7 @@
for (dynamic_properties::const_iterator i = dp.begin(); i != dp.end(); ++i)
{
std::string key_id = "key" + lexical_cast<std::string>(key_count++);
- if (i->second->key() == typeid(Graph))
+ if (i->second->key() == typeid(Graph*))
graph_key_ids[i->first] = key_id;
else if (i->second->key() == typeid(vertex_descriptor))
vertex_key_ids[i->first] = key_id;
@@ -273,7 +273,7 @@
std::string type_name = "string";
mpl::for_each<value_types>(get_type_name<value_types>(i->second->value(), type_names, type_name));
out << " <key id=\"" << encode_char_entities(key_id) << "\" for=\""
- << (i->second->key() == typeid(Graph) ? "graph" : (i->second->key() == typeid(vertex_descriptor) ? "node" : "edge")) << "\""
+ << (i->second->key() == typeid(Graph*) ? "graph" : (i->second->key() == typeid(vertex_descriptor) ? "node" : "edge")) << "\""
<< " attr.name=\"" << i->first << "\""
<< " attr.type=\"" << type_name << "\""
<< " />\n";
@@ -287,10 +287,12 @@
// Output graph data
for (dynamic_properties::const_iterator i = dp.begin(); i != dp.end(); ++i)
{
- if (i->second->key() == typeid(Graph))
+ if (i->second->key() == typeid(Graph*))
{
+ // The const_cast here is just to get typeid correct for property
+ // map key; the graph should not be mutated using it.
out << " <data key=\"" << graph_key_ids[i->first] << "\">"
- << encode_char_entities(i->second->get_string(g)) << "</data>\n";
+ << encode_char_entities(i->second->get_string(const_cast<Graph*>(&g))) << "</data>\n";
}
}
Modified: branches/quickbook-dev/boost/graph/graphviz.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/graphviz.hpp (original)
+++ branches/quickbook-dev/boost/graph/graphviz.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -25,10 +25,15 @@
#include <boost/property_map/dynamic_property_map.hpp>
#include <boost/graph/overloading.hpp>
#include <boost/graph/dll_import_export.hpp>
+#include <boost/graph/compressed_sparse_row_graph.hpp>
+#include <boost/graph/iteration_macros.hpp>
#include <boost/spirit/include/classic_multi_pass.hpp>
#include <boost/lexical_cast.hpp>
+#include <boost/static_assert.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/xpressive/xpressive_static.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/foreach.hpp>
namespace boost {
@@ -713,6 +718,9 @@
virtual void // RG: need new second parameter to support BGL subgraphs
set_graph_property(const id_t& key, const id_t& value) = 0;
+
+ virtual void
+ finish_building_graph() = 0;
};
template<typename MutableGraph>
@@ -781,6 +789,8 @@
put(key, dp_, &graph_, value);
}
+ void finish_building_graph() {}
+
protected:
MutableGraph& graph_;
@@ -790,6 +800,109 @@
std::map<edge_t, bgl_edge_t> bgl_edges;
};
+template<typename Directed,
+ typename VertexProperty,
+ typename EdgeProperty,
+ typename GraphProperty,
+ typename Vertex,
+ typename EdgeIndex>
+class mutate_graph_impl<compressed_sparse_row_graph<Directed, VertexProperty, EdgeProperty, GraphProperty, Vertex, EdgeIndex> >
+ : public mutate_graph
+{
+ typedef compressed_sparse_row_graph<Directed, VertexProperty, EdgeProperty, GraphProperty, Vertex, EdgeIndex> CSRGraph;
+ typedef typename graph_traits<CSRGraph>::vertices_size_type bgl_vertex_t;
+ typedef typename graph_traits<CSRGraph>::edges_size_type bgl_edge_t;
+ typedef typename graph_traits<CSRGraph>::edge_descriptor edge_descriptor;
+
+ public:
+ mutate_graph_impl(CSRGraph& graph, dynamic_properties& dp,
+ std::string node_id_prop)
+ : graph_(graph), dp_(dp), vertex_count(0), node_id_prop_(node_id_prop) { }
+
+ ~mutate_graph_impl() {}
+
+ void finish_building_graph() {
+ typedef compressed_sparse_row_graph<directedS, no_property, bgl_edge_t, GraphProperty, Vertex, EdgeIndex> TempCSRGraph;
+ TempCSRGraph temp(edges_are_unsorted_multi_pass,
+ edges_to_add.begin(), edges_to_add.end(),
+ counting_iterator<bgl_edge_t>(0),
+ vertex_count);
+ set_property(temp, graph_all, get_property(graph_, graph_all));
+ graph_.assign(temp); // Copies structure, not properties
+ std::vector<edge_descriptor> edge_permutation_from_sorting(num_edges(temp));
+ BGL_FORALL_EDGES_T(e, temp, TempCSRGraph) {
+ edge_permutation_from_sorting[temp[e]] = e;
+ }
+ typedef tuple<id_t, bgl_vertex_t, id_t> v_prop;
+ BOOST_FOREACH(const v_prop& t, vertex_props) {
+ put(get<0>(t), dp_, get<1>(t), get<2>(t));
+ }
+ typedef tuple<id_t, bgl_edge_t, id_t> e_prop;
+ BOOST_FOREACH(const e_prop& t, edge_props) {
+ put(get<0>(t), dp_, edge_permutation_from_sorting[get<1>(t)], get<2>(t));
+ }
+ }
+
+ bool is_directed() const
+ {
+ return
+ boost::is_convertible<
+ typename boost::graph_traits<CSRGraph>::directed_category,
+ boost::directed_tag>::value;
+ }
+
+ virtual void do_add_vertex(const node_t& node)
+ {
+ // Add the node to the graph.
+ bgl_vertex_t v = vertex_count++;
+
+ // Set up a mapping from name to BGL vertex.
+ bgl_nodes.insert(std::make_pair(node, v));
+
+ // node_id_prop_ allows the caller to see the real id names for nodes.
+ vertex_props.push_back(make_tuple(node_id_prop_, v, node));
+ }
+
+ void
+ do_add_edge(const edge_t& edge, const node_t& source, const node_t& target)
+ {
+ bgl_edge_t result = edges_to_add.size();
+ edges_to_add.push_back(std::make_pair(bgl_nodes[source], bgl_nodes[target]));
+ bgl_edges.insert(std::make_pair(edge, result));
+ }
+
+ void
+ set_node_property(const id_t& key, const node_t& node, const id_t& value)
+ {
+ vertex_props.push_back(make_tuple(key, bgl_nodes[node], value));
+ }
+
+ void
+ set_edge_property(const id_t& key, const edge_t& edge, const id_t& value)
+ {
+ edge_props.push_back(make_tuple(key, bgl_edges[edge], value));
+ }
+
+ void
+ set_graph_property(const id_t& key, const id_t& value)
+ {
+ /* RG: pointer to graph prevents copying */
+ put(key, dp_, &graph_, value);
+ }
+
+
+ protected:
+ CSRGraph& graph_;
+ dynamic_properties& dp_;
+ bgl_vertex_t vertex_count;
+ std::string node_id_prop_;
+ std::vector<tuple<id_t, bgl_vertex_t, id_t> > vertex_props;
+ std::vector<tuple<id_t, bgl_edge_t, id_t> > edge_props;
+ std::vector<std::pair<bgl_vertex_t, bgl_vertex_t> > edges_to_add;
+ std::map<node_t, bgl_vertex_t> bgl_nodes;
+ std::map<edge_t, bgl_edge_t> bgl_edges;
+};
+
} } } // end namespace boost::detail::graph
#ifdef BOOST_GRAPH_USE_SPIRIT_PARSER
Modified: branches/quickbook-dev/boost/graph/isomorphism.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/isomorphism.hpp (original)
+++ branches/quickbook-dev/boost/graph/isomorphism.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,6 +11,7 @@
#include <iterator>
#include <algorithm>
#include <boost/config.hpp>
+#include <boost/smart_ptr.hpp>
#include <boost/graph/depth_first_search.hpp>
#include <boost/utility.hpp>
#include <boost/detail/algorithm.hpp>
@@ -195,69 +196,123 @@
}
private:
+ struct match_continuation {
+ enum {pos_G2_vertex_loop, pos_fi_adj_loop, pos_dfs_num} position;
+ typedef typename graph_traits<Graph2>::vertex_iterator vertex_iterator;
+ std::pair<vertex_iterator, vertex_iterator> G2_verts;
+ typedef typename graph_traits<Graph2>::adjacency_iterator adjacency_iterator;
+ std::pair<adjacency_iterator, adjacency_iterator> fi_adj;
+ edge_iter iter;
+ int dfs_num_k;
+ };
+
bool match(edge_iter iter, int dfs_num_k)
{
+ std::vector<match_continuation> k;
+ typedef typename graph_traits<Graph2>::vertex_iterator vertex_iterator;
+ std::pair<vertex_iterator, vertex_iterator> G2_verts(vertices(G2));
+ typedef typename graph_traits<Graph2>::adjacency_iterator adjacency_iterator;
+ std::pair<adjacency_iterator, adjacency_iterator> fi_adj;
+ vertex1_t i, j;
+
+ recur:
if (iter != ordered_edges.end()) {
- vertex1_t i = source(*iter, G1), j = target(*iter, G2);
+ i = source(*iter, G1);
+ j = target(*iter, G2);
if (dfs_num[i] > dfs_num_k) {
- vertex1_t kp1 = dfs_vertices[dfs_num_k + 1];
- BGL_FORALL_VERTICES_T(u, G2, Graph2) {
- if (invariant1(kp1) == invariant2(u) && in_S[u] == false) {
- f[kp1] = u;
- in_S[u] = true;
- num_edges_on_k = 0;
-
- if (match(iter, dfs_num_k + 1))
-#if 0
- // dwa 2003/7/11 -- this *HAS* to be a bug!
- ;
-#endif
- return true;
+ G2_verts = vertices(G2);
+ while (G2_verts.first != G2_verts.second) {
+ {
+ vertex2_t u = *G2_verts.first;
+ vertex1_t kp1 = dfs_vertices[dfs_num_k + 1];
+ if (invariant1(kp1) == invariant2(u) && in_S[u] == false) {
+ {
+ f[kp1] = u;
+ in_S[u] = true;
+ num_edges_on_k = 0;
- in_S[u] = false;
+ match_continuation new_k;
+ new_k.position = match_continuation::pos_G2_vertex_loop;
+ new_k.G2_verts = G2_verts;
+ new_k.iter = iter;
+ new_k.dfs_num_k = dfs_num_k;
+ k.push_back(new_k);
+ ++dfs_num_k;
+ goto recur;
+ }
+ }
}
+G2_loop_k: ++G2_verts.first;
}
}
else if (dfs_num[j] > dfs_num_k) {
- vertex1_t k = dfs_vertices[dfs_num_k];
- num_edges_on_k -=
- count_if(adjacent_vertices(f[k], G2), make_indirect_pmap(in_S));
-
- for (int jj = 0; jj < dfs_num_k; ++jj) {
- vertex1_t j = dfs_vertices[jj];
- num_edges_on_k -= count(adjacent_vertices(f[j], G2), f[k]);
+ {
+ vertex1_t vk = dfs_vertices[dfs_num_k];
+ num_edges_on_k -=
+ count_if(adjacent_vertices(f[vk], G2), make_indirect_pmap(in_S));
+
+ for (int jj = 0; jj < dfs_num_k; ++jj) {
+ vertex1_t j = dfs_vertices[jj];
+ num_edges_on_k -= count(adjacent_vertices(f[j], G2), f[vk]);
+ }
}
if (num_edges_on_k != 0)
- return false;
- BGL_FORALL_ADJ_T(f[i], v, G2, Graph2)
- if (invariant2(v) == invariant1(j) && in_S[v] == false) {
- f[j] = v;
- in_S[v] = true;
- num_edges_on_k = 1;
- BOOST_USING_STD_MAX();
- int next_k = max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num_k, max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num[i], dfs_num[j]));
- if (match(boost::next(iter), next_k))
- return true;
- in_S[v] = false;
+ goto return_point_false;
+ fi_adj = adjacent_vertices(f[i], G2);
+ while (fi_adj.first != fi_adj.second) {
+ {
+ vertex2_t v = *fi_adj.first;
+ if (invariant2(v) == invariant1(j) && in_S[v] == false) {
+ f[j] = v;
+ in_S[v] = true;
+ num_edges_on_k = 1;
+ BOOST_USING_STD_MAX();
+ int next_k = max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num_k, max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num[i], dfs_num[j]));
+ match_continuation new_k;
+ new_k.position = match_continuation::pos_fi_adj_loop;
+ new_k.fi_adj = fi_adj;
+ new_k.iter = iter;
+ new_k.dfs_num_k = dfs_num_k;
+ ++iter;
+ dfs_num_k = next_k;
+ k.push_back(new_k);
+ goto recur;
+ }
}
-
-
+fi_adj_loop_k:++fi_adj.first;
+ }
}
else {
if (container_contains(adjacent_vertices(f[i], G2), f[j])) {
++num_edges_on_k;
- if (match(boost::next(iter), dfs_num_k))
- return true;
+ match_continuation new_k;
+ new_k.position = match_continuation::pos_dfs_num;
+ k.push_back(new_k);
+ ++iter;
+ goto recur;
}
}
} else
- return true;
- return false;
- }
+ goto return_point_true;
+ goto return_point_false;
+ {
+ return_point_true: return true;
+
+ return_point_false:
+ if (k.empty()) return false;
+ const match_continuation& this_k = k.back();
+ switch (this_k.position) {
+ case match_continuation::pos_G2_vertex_loop: {G2_verts = this_k.G2_verts; iter = this_k.iter; dfs_num_k = this_k.dfs_num_k; k.pop_back(); in_S[*G2_verts.first] = false; i = source(*iter, G1); j = target(*iter, G2); goto G2_loop_k;}
+ case match_continuation::pos_fi_adj_loop: {fi_adj = this_k.fi_adj; iter = this_k.iter; dfs_num_k = this_k.dfs_num_k; k.pop_back(); in_S[*fi_adj.first] = false; i = source(*iter, G1); j = target(*iter, G2); goto fi_adj_loop_k;}
+ case match_continuation::pos_dfs_num: {k.pop_back(); goto return_point_false;}
+ default: assert (!"Bad position"); abort();
+ }
+ }
+ }
};
Modified: branches/quickbook-dev/boost/graph/property_maps/null_property_map.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/property_maps/null_property_map.hpp (original)
+++ branches/quickbook-dev/boost/graph/property_maps/null_property_map.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -29,7 +29,7 @@
// The null_property_map<K,V> only has a put() function.
template <typename K, typename V>
- void put(null_property_map<K,V>& pm, const K& key, const V& value)
+ void put(null_property_map<K,V>& /*pm*/, const K& /*key*/, const V& /*value*/)
{ }
// A helper function for intantiating null property maps.
Modified: branches/quickbook-dev/boost/graph/subgraph.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/subgraph.hpp (original)
+++ branches/quickbook-dev/boost/graph/subgraph.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -131,15 +131,29 @@
// copy constructor
subgraph(const subgraph& x)
- : m_graph(x.m_graph), m_parent(x.m_parent), m_edge_counter(x.m_edge_counter)
+ : m_parent(x.m_parent), m_edge_counter(x.m_edge_counter)
, m_global_vertex(x.m_global_vertex), m_global_edge(x.m_global_edge)
{
- // Do a deep copy (recursive).
- for(typename ChildrenList::const_iterator i = x.m_children.begin();
- i != x.m_children.end(); ++i)
+ if(x.is_root())
{
- m_children.push_back(new subgraph<Graph>( **i ));
+ m_graph = x.m_graph;
}
+ // Do a deep copy (recursive).
+ // Only the root graph is copied, the subgraphs contain
+ // only references to the global vertices they own.
+ typename subgraph<Graph>::children_iterator i,i_end;
+ boost::tie(i,i_end) = x.children();
+ for(; i != i_end; ++i)
+ {
+ subgraph<Graph> child = this->create_subgraph();
+ child = *i;
+ vertex_iterator vi,vi_end;
+ boost::tie(vi,vi_end) = vertices(*i);
+ for (;vi!=vi_end;++vi)
+ {
+ add_vertex(*vi,child);
+ }
+ }
}
Modified: branches/quickbook-dev/boost/graph/vector_as_graph.hpp
==============================================================================
--- branches/quickbook-dev/boost/graph/vector_as_graph.hpp (original)
+++ branches/quickbook-dev/boost/graph/vector_as_graph.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -19,6 +19,7 @@
#include <vector>
#include <cstddef>
#include <boost/iterator.hpp>
+#include <boost/iterator/counting_iterator.hpp>
#include <boost/range/irange.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/property_map/property_map.hpp>
@@ -71,7 +72,7 @@
out_edge_iterator;
typedef void in_edge_iterator;
typedef void edge_iterator;
- typedef typename integer_range<V>::iterator vertex_iterator;
+ typedef counting_iterator<V> vertex_iterator;
typedef directed_tag directed_category;
typedef allow_parallel_edge_tag edge_parallel_category;
typedef vector_as_graph_traversal_tag traversal_category;
@@ -178,14 +179,11 @@
// source() and target() already provided for pairs in graph_traits.hpp
template <class EdgeList, class Alloc>
- std::pair<typename boost::integer_range<typename EdgeList::value_type>
- ::iterator,
- typename boost::integer_range<typename EdgeList::value_type>
- ::iterator >
+ std::pair<boost::counting_iterator<typename EdgeList::value_type>,
+ boost::counting_iterator<typename EdgeList::value_type> >
vertices(const std::vector<EdgeList, Alloc>& v)
{
- typedef typename boost::integer_range<typename EdgeList::value_type>
- ::iterator Iter;
+ typedef boost::counting_iterator<typename EdgeList::value_type> Iter;
return std::make_pair(Iter(0), Iter(v.size()));
}
Modified: branches/quickbook-dev/boost/heap/binomial_heap.hpp
==============================================================================
--- branches/quickbook-dev/boost/heap/binomial_heap.hpp (original)
+++ branches/quickbook-dev/boost/heap/binomial_heap.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -389,7 +389,7 @@
if (element->child_count()) {
size_type sz = (1 << element->child_count()) - 1;
- binomial_heap children(element->children, sz);
+ binomial_heap children(value_comp(), element->children, sz);
if (trees.empty())
swap(children);
else
@@ -827,8 +827,8 @@
}
// private constructor, just used in pop()
- explicit binomial_heap(node_list_type & child_list, size_type size):
- super_t(value_compare())
+ explicit binomial_heap(value_compare const & cmp, node_list_type & child_list, size_type size):
+ super_t(cmp)
{
size_holder::set_size(size);
if (size)
Modified: branches/quickbook-dev/boost/heap/d_ary_heap.hpp
==============================================================================
--- branches/quickbook-dev/boost/heap/d_ary_heap.hpp (original)
+++ branches/quickbook-dev/boost/heap/d_ary_heap.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -448,7 +448,7 @@
* - \c boost::heap::stable<>, defaults to \c stable<false>
* - \c boost::heap::stability_counter_type<>, defaults to \c stability_counter_type<boost::uintmax_t>
* - \c boost::heap::allocator<>, defaults to \c allocator<std::allocator<T> >
- * - \c boost::heap::mutable<>, defaults to \c mutable<false>
+ * - \c boost::heap::mutable_<>, defaults to \c mutable_<false>
*
*/
#ifdef BOOST_DOXYGEN_INVOKED
Modified: branches/quickbook-dev/boost/heap/heap_merge.hpp
==============================================================================
--- branches/quickbook-dev/boost/heap/heap_merge.hpp (original)
+++ branches/quickbook-dev/boost/heap/heap_merge.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -94,7 +94,7 @@
/** merge rhs into lhs
*
- * \b Effect: lhs contains all elements that have been part of rhs, lhs is empty.
+ * \b Effect: lhs contains all elements that have been part of rhs, rhs is empty.
*
* */
template <typename Heap1,
Modified: branches/quickbook-dev/boost/integer.hpp
==============================================================================
--- branches/quickbook-dev/boost/integer.hpp (original)
+++ branches/quickbook-dev/boost/integer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -114,7 +114,7 @@
typedef typename detail::int_least_helper
<
#ifdef BOOST_HAS_LONG_LONG
- (Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
+ (Bits <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
#else
1 +
#endif
@@ -144,7 +144,7 @@
<
5 +
#ifdef BOOST_HAS_LONG_LONG
- (Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
+ (Bits <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
#else
1 +
#endif
Modified: branches/quickbook-dev/boost/interprocess/sync/file_lock.hpp
==============================================================================
--- branches/quickbook-dev/boost/interprocess/sync/file_lock.hpp (original)
+++ branches/quickbook-dev/boost/interprocess/sync/file_lock.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -99,7 +99,7 @@
bool try_lock();
//!Effects: The calling thread tries to acquire exclusive ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive, or sharable
+ //! waiting if necessary until no other thread has exclusive, or sharable
//! ownership of the mutex or abs_time is reached.
//!Returns: If acquires exclusive ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
@@ -119,7 +119,7 @@
void lock_sharable();
//!Effects: The calling thread tries to acquire sharable ownership of the mutex
- //! without waiting. If no other thread has has exclusive ownership of the
+ //! without waiting. If no other thread has exclusive ownership of the
//! mutex this succeeds.
//!Returns: If it can acquire sharable ownership immediately returns true. If it
//! has to wait, returns false.
@@ -127,7 +127,7 @@
bool try_lock_sharable();
//!Effects: The calling thread tries to acquire sharable ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive ownership of
+ //! waiting if necessary until no other thread has exclusive ownership of
//! the mutex or abs_time is reached.
//!Returns: If acquires sharable ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
Modified: branches/quickbook-dev/boost/interprocess/sync/interprocess_condition.hpp
==============================================================================
--- branches/quickbook-dev/boost/interprocess/sync/interprocess_condition.hpp (original)
+++ branches/quickbook-dev/boost/interprocess/sync/interprocess_condition.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -33,7 +33,7 @@
//#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS)
// #include <boost/interprocess/sync/windows/condition.hpp>
// #define BOOST_INTERPROCESS_USE_WINDOWS
-#else
+#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
#include <boost/interprocess/sync/spin/condition.hpp>
#define BOOST_INTERPROCESS_USE_GENERIC_EMULATION
#endif
Modified: branches/quickbook-dev/boost/interprocess/sync/interprocess_mutex.hpp
==============================================================================
--- branches/quickbook-dev/boost/interprocess/sync/interprocess_mutex.hpp (original)
+++ branches/quickbook-dev/boost/interprocess/sync/interprocess_mutex.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -34,7 +34,7 @@
//#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS)
// #include <boost/interprocess/sync/windows/mutex.hpp>
// #define BOOST_INTERPROCESS_USE_WINDOWS
-#else
+#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
#include <boost/interprocess/sync/spin/mutex.hpp>
#define BOOST_INTERPROCESS_USE_GENERIC_EMULATION
Modified: branches/quickbook-dev/boost/interprocess/sync/interprocess_recursive_mutex.hpp
==============================================================================
--- branches/quickbook-dev/boost/interprocess/sync/interprocess_recursive_mutex.hpp (original)
+++ branches/quickbook-dev/boost/interprocess/sync/interprocess_recursive_mutex.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -46,7 +46,7 @@
//#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS)
// #include <boost/interprocess/sync/windows/recursive_mutex.hpp>
// #define BOOST_INTERPROCESS_USE_WINDOWS
-#else
+#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
#include <boost/interprocess/sync/spin/recursive_mutex.hpp>
#define BOOST_INTERPROCESS_USE_GENERIC_EMULATION
#endif
Modified: branches/quickbook-dev/boost/interprocess/sync/interprocess_semaphore.hpp
==============================================================================
--- branches/quickbook-dev/boost/interprocess/sync/interprocess_semaphore.hpp (original)
+++ branches/quickbook-dev/boost/interprocess/sync/interprocess_semaphore.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -32,7 +32,7 @@
//#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS)
// #include <boost/interprocess/sync/windows/semaphore.hpp>
// #define BOOST_INTERPROCESS_USE_WINDOWS
-#else
+#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
#include <boost/interprocess/sync/spin/semaphore.hpp>
#define BOOST_INTERPROCESS_USE_GENERIC_EMULATION
#endif
Modified: branches/quickbook-dev/boost/interprocess/sync/interprocess_upgradable_mutex.hpp
==============================================================================
--- branches/quickbook-dev/boost/interprocess/sync/interprocess_upgradable_mutex.hpp (original)
+++ branches/quickbook-dev/boost/interprocess/sync/interprocess_upgradable_mutex.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -66,7 +66,7 @@
bool try_lock();
//!Effects: The calling thread tries to acquire exclusive ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive, sharable or
+ //! waiting if necessary until no other thread has exclusive, sharable or
//! upgradable ownership of the mutex or abs_time is reached.
//!Returns: If acquires exclusive ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
@@ -80,13 +80,13 @@
//Sharable locking
//!Effects: The calling thread tries to obtain sharable ownership of the mutex,
- //! and if another thread has exclusive or upgradable ownership of the mutex,
+ //! and if another thread has exclusive ownership of the mutex,
//! waits until it can obtain the ownership.
//!Throws: interprocess_exception on error.
void lock_sharable();
//!Effects: The calling thread tries to acquire sharable ownership of the mutex
- //! without waiting. If no other thread has has exclusive or upgradable ownership
+ //! without waiting. If no other thread has exclusive ownership
//! of the mutex this succeeds.
//!Returns: If it can acquire sharable ownership immediately returns true. If it
//! has to wait, returns false.
@@ -94,7 +94,7 @@
bool try_lock_sharable();
//!Effects: The calling thread tries to acquire sharable ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive or upgradable
+ //! waiting if necessary until no other thread has exclusive
//! ownership of the mutex or abs_time is reached.
//!Returns: If acquires sharable ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
@@ -114,7 +114,7 @@
void lock_upgradable();
//!Effects: The calling thread tries to acquire upgradable ownership of the mutex
- //! without waiting. If no other thread has has exclusive or upgradable ownership
+ //! without waiting. If no other thread has exclusive or upgradable ownership
//! of the mutex this succeeds.
//!Returns: If it can acquire upgradable ownership immediately returns true.
//! If it has to wait, returns false.
@@ -122,7 +122,7 @@
bool try_lock_upgradable();
//!Effects: The calling thread tries to acquire upgradable ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive or upgradable
+ //! waiting if necessary until no other thread has exclusive or upgradable
//! ownership of the mutex or abs_time is reached.
//!Returns: If acquires upgradable ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
Modified: branches/quickbook-dev/boost/interprocess/sync/named_upgradable_mutex.hpp
==============================================================================
--- branches/quickbook-dev/boost/interprocess/sync/named_upgradable_mutex.hpp (original)
+++ branches/quickbook-dev/boost/interprocess/sync/named_upgradable_mutex.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -94,7 +94,7 @@
bool try_lock();
//!Effects: The calling thread tries to acquire exclusive ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive, sharable or
+ //! waiting if necessary until no other thread has exclusive, sharable or
//! upgradable ownership of the mutex or abs_time is reached.
//!Returns: If acquires exclusive ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
@@ -108,13 +108,13 @@
//Sharable locking
//!Effects: The calling thread tries to obtain sharable ownership of the mutex,
- //! and if another thread has exclusive or upgradable ownership of the mutex,
+ //! and if another thread has exclusive ownership of the mutex,
//! waits until it can obtain the ownership.
//!Throws: interprocess_exception on error.
void lock_sharable();
//!Effects: The calling thread tries to acquire sharable ownership of the mutex
- //! without waiting. If no other thread has has exclusive or upgradable ownership
+ //! without waiting. If no other thread has exclusive ownership
//! of the mutex this succeeds.
//!Returns: If it can acquire sharable ownership immediately returns true. If it
//! has to wait, returns false.
@@ -122,7 +122,7 @@
bool try_lock_sharable();
//!Effects: The calling thread tries to acquire sharable ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive or upgradable
+ //! waiting if necessary until no other thread has exclusive
//! ownership of the mutex or abs_time is reached.
//!Returns: If acquires sharable ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
@@ -142,7 +142,7 @@
void lock_upgradable();
//!Effects: The calling thread tries to acquire upgradable ownership of the mutex
- //! without waiting. If no other thread has has exclusive or upgradable ownership
+ //! without waiting. If no other thread has exclusive or upgradable ownership
//! of the mutex this succeeds.
//!Returns: If it can acquire upgradable ownership immediately returns true.
//! If it has to wait, returns false.
@@ -150,7 +150,7 @@
bool try_lock_upgradable();
//!Effects: The calling thread tries to acquire upgradable ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive or upgradable
+ //! waiting if necessary until no other thread has exclusive or upgradable
//! ownership of the mutex or abs_time is reached.
//!Returns: If acquires upgradable ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
Modified: branches/quickbook-dev/boost/interprocess/sync/shm/named_upgradable_mutex.hpp
==============================================================================
--- branches/quickbook-dev/boost/interprocess/sync/shm/named_upgradable_mutex.hpp (original)
+++ branches/quickbook-dev/boost/interprocess/sync/shm/named_upgradable_mutex.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -94,7 +94,7 @@
bool try_lock();
//!Effects: The calling thread tries to acquire exclusive ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive, sharable or
+ //! waiting if necessary until no other thread has exclusive, sharable or
//! upgradable ownership of the mutex or abs_time is reached.
//!Returns: If acquires exclusive ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
@@ -108,13 +108,13 @@
//Sharable locking
//!Effects: The calling thread tries to obtain sharable ownership of the mutex,
- //! and if another thread has exclusive or upgradable ownership of the mutex,
+ //! and if another thread has exclusive ownership of the mutex,
//! waits until it can obtain the ownership.
//!Throws: interprocess_exception on error.
void lock_sharable();
//!Effects: The calling thread tries to acquire sharable ownership of the mutex
- //! without waiting. If no other thread has has exclusive or upgradable ownership
+ //! without waiting. If no other thread has exclusive ownership
//! of the mutex this succeeds.
//!Returns: If it can acquire sharable ownership immediately returns true. If it
//! has to wait, returns false.
@@ -122,7 +122,7 @@
bool try_lock_sharable();
//!Effects: The calling thread tries to acquire sharable ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive or upgradable
+ //! waiting if necessary until no other thread has exclusive
//! ownership of the mutex or abs_time is reached.
//!Returns: If acquires sharable ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
@@ -142,7 +142,7 @@
void lock_upgradable();
//!Effects: The calling thread tries to acquire upgradable ownership of the mutex
- //! without waiting. If no other thread has has exclusive or upgradable ownership
+ //! without waiting. If no other thread has exclusive or upgradable ownership
//! of the mutex this succeeds.
//!Returns: If it can acquire upgradable ownership immediately returns true.
//! If it has to wait, returns false.
@@ -150,7 +150,7 @@
bool try_lock_upgradable();
//!Effects: The calling thread tries to acquire upgradable ownership of the mutex
- //! waiting if necessary until no other thread has has exclusive or upgradable
+ //! waiting if necessary until no other thread has exclusive or upgradable
//! ownership of the mutex or abs_time is reached.
//!Returns: If acquires upgradable ownership, returns true. Otherwise returns false.
//!Throws: interprocess_exception on error.
Modified: branches/quickbook-dev/boost/intrusive/derivation_value_traits.hpp
==============================================================================
--- branches/quickbook-dev/boost/intrusive/derivation_value_traits.hpp (original)
+++ branches/quickbook-dev/boost/intrusive/derivation_value_traits.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,6 +15,7 @@
#include <boost/intrusive/link_mode.hpp>
#include <boost/pointer_cast.hpp>
+#include <boost/pointer_to_other.hpp>
#include <iterator>
namespace boost {
Modified: branches/quickbook-dev/boost/iostreams/chain.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/chain.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/chain.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -84,7 +84,7 @@
//
// Concept name: Chain.
// Description: Represents a chain of stream buffers which provides access
-// to the first buffer in the chain and send notifications when the
+// to the first buffer in the chain and sends notifications when the
// streambufs are added to or removed from chain.
// Refines: Closable device with mode equal to typename Chain::mode.
// Models: chain, converting_chain.
Modified: branches/quickbook-dev/boost/iostreams/close.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/close.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/close.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -73,7 +73,7 @@
boost::iostreams::close(t, snk, BOOST_IOS::out);
}
-} // End namespaces detail.
+} // End namespace detail.
} } // End namespaces iostreams, boost.
Modified: branches/quickbook-dev/boost/iostreams/combine.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/combine.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/combine.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -37,7 +37,7 @@
//
// Template name: combined_device.
// Description: Model of Device defined in terms of a Source/Sink pair.
-// Template paramters:
+// Template parameters:
// Source - A model of Source, with the same char_type and traits_type
// as Sink.
// Sink - A model of Sink, with the same char_type and traits_type
@@ -77,7 +77,7 @@
//
// Template name: combined_filter.
// Description: Model of Device defined in terms of a Source/Sink pair.
-// Template paramters:
+// Template parameters:
// InputFilter - A model of InputFilter, with the same char_type as
// OutputFilter.
// OutputFilter - A model of OutputFilter, with the same char_type as
@@ -179,9 +179,9 @@
//
// Template name: combine.
// Description: Takes a Source/Sink pair or InputFilter/OutputFilter pair and
-// returns a Reource or Filter which performs input using the first member
+// returns a Source or Filter which performs input using the first member
// of the pair and output using the second member of the pair.
-// Template paramters:
+// Template parameters:
// In - A model of Source or InputFilter, with the same char_type as Out.
// Out - A model of Sink or OutputFilter, with the same char_type as In.
//
Modified: branches/quickbook-dev/boost/iostreams/compose.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/compose.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/compose.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -55,7 +55,7 @@
//
// Template name: composite_device.
// Description: Provides a Device view of a Filter, Device pair.
-// Template paramters:
+// Template parameters:
// Filter - A model of Filter.
// Device - An indirect model of Device.
//
@@ -115,7 +115,7 @@
//
// Template name: composite_device.
// Description: Provides a Device view of a Filter, Device pair.
-// Template paramters:
+// Template parameters:
// Filter - A model of Filter.
// Device - An indirect model of Device.
//
Modified: branches/quickbook-dev/boost/iostreams/detail/adapter/range_adapter.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/detail/adapter/range_adapter.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/detail/adapter/range_adapter.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -36,7 +36,7 @@
//
// Template name: range_adapter
// Description: Device based on an instance of boost::iterator_range.
-// Template paramters:
+// Template parameters:
// Mode - A mode tag.
// Range - An instance of iterator_range.
//
Modified: branches/quickbook-dev/boost/iostreams/detail/buffer.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/detail/buffer.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/detail/buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -30,7 +30,7 @@
//
// Template name: buffer
// Description: Character buffer.
-// Template paramters:
+// Template parameters:
// Ch - The character type.
// Alloc - The Allocator type.
//
@@ -69,7 +69,7 @@
// Template name: buffer
// Description: Character buffer with two pointers accessible via ptr() and
// eptr().
-// Template paramters:
+// Template parameters:
// Ch - A character type.
//
template< typename Ch,
Modified: branches/quickbook-dev/boost/iostreams/detail/restrict_impl.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/detail/restrict_impl.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/detail/restrict_impl.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -56,7 +56,7 @@
//
// Template name: restricted_indirect_device.
// Description: Provides an restricted view of an indirect Device.
-// Template paramters:
+// Template parameters:
// Device - An indirect model of Device that models either Source or
// SeekableDevice.
//
@@ -88,7 +88,7 @@
//
// Template name: restricted_direct_device.
// Description: Provides an restricted view of a Direct Device.
-// Template paramters:
+// Template parameters:
// Device - A model of Direct and Device.
//
template<typename Device>
@@ -118,7 +118,7 @@
//
// Template name: restricted_filter.
// Description: Provides an restricted view of a Filter.
-// Template paramters:
+// Template parameters:
// Filter - An indirect model of Filter.
//
template<typename Filter>
Modified: branches/quickbook-dev/boost/iostreams/detail/streambuf/chainbuf.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/detail/streambuf/chainbuf.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/detail/streambuf/chainbuf.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -31,7 +31,7 @@
// Template name: chainbuf.
// Description: Stream buffer which operates by delegating to the first
// linked_streambuf in a chain.
-// Template paramters:
+// Template parameters:
// Chain - The chain type.
//
template<typename Chain, typename Mode, typename Access>
Modified: branches/quickbook-dev/boost/iostreams/filter/aggregate.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/filter/aggregate.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/filter/aggregate.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -33,7 +33,7 @@
//
// Template name: aggregate_filter.
-// Template paramters:
+// Template parameters:
// Ch - The character type.
// Alloc - The allocator type.
// Description: Utility for defining DualUseFilters which filter an
Modified: branches/quickbook-dev/boost/iostreams/filter/counter.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/filter/counter.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/filter/counter.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -25,7 +25,7 @@
//
// Template name: basic_counter.
-// Template paramters:
+// Template parameters:
// Ch - The character type.
// Description: Filter which counts lines and characters.
//
Modified: branches/quickbook-dev/boost/iostreams/filter/line.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/filter/line.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/filter/line.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -31,7 +31,7 @@
//
// Template name: line_filter.
-// Template paramters:
+// Template parameters:
// Ch - The character type.
// Alloc - The allocator type.
// Description: Filter which processes data one line at a time.
Modified: branches/quickbook-dev/boost/iostreams/invert.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/invert.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/invert.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -36,7 +36,7 @@
//
// Template name: inverse.
-// Template paramters:
+// Template parameters:
// Filter - A model of InputFilter or OutputFilter.
// Description: Generates an InputFilter from an OutputFilter or
// vice versa.
@@ -151,7 +151,7 @@
//
// Template name: invert.
-// Template paramters:
+// Template parameters:
// Filter - A model of InputFilter or OutputFilter.
// Description: Returns an instance of an appropriate specialization of inverse.
//
Modified: branches/quickbook-dev/boost/iostreams/stream.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/stream.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/stream.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -31,7 +31,7 @@
typedef Tr traits_type;
typedef typename category_of<Device>::type mode;
typedef typename
- iostreams::select< // Dismbiguation required for Tru64.
+ iostreams::select< // Disambiguation required for Tru64.
mpl::and_<
is_convertible<mode, input>,
is_convertible<mode, output>
@@ -43,7 +43,7 @@
BOOST_IOSTREAMS_BASIC_OSTREAM(char_type, traits_type)
>::type stream_type;
typedef typename
- iostreams::select< // Dismbiguation required for Tru64.
+ iostreams::select< // Disambiguation required for Tru64.
mpl::and_<
is_convertible<mode, input>,
is_convertible<mode, output>
@@ -57,7 +57,7 @@
};
// By encapsulating initialization in a base, we can define the macro
-// BOOST_IOSTREAMS_DEFINE_FORWARDING_FUNCTIONS to generate constuctors
+// BOOST_IOSTREAMS_DEFINE_FORWARDING_FUNCTIONS to generate constructors
// without base member initializer lists.
template< typename Device,
typename Tr =
@@ -96,7 +96,7 @@
// Template name: stream.
// Description: A iostream which reads from and writes to an instance of a
// designated device type.
-// Template paramters:
+// Template parameters:
// Device - A device type.
// Alloc - The allocator type.
//
Modified: branches/quickbook-dev/boost/iostreams/tee.hpp
==============================================================================
--- branches/quickbook-dev/boost/iostreams/tee.hpp (original)
+++ branches/quickbook-dev/boost/iostreams/tee.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -31,7 +31,7 @@
//
// Template name: tee_filter.
-// Template paramters:
+// Template parameters:
// Device - A blocking Sink.
//
template<typename Device>
@@ -99,7 +99,7 @@
//
// Template name: tee_device.
-// Template paramters:
+// Template parameters:
// Device - A blocking Device.
// Sink - A blocking Sink.
//
Modified: branches/quickbook-dev/boost/lexical_cast.hpp
==============================================================================
--- branches/quickbook-dev/boost/lexical_cast.hpp (original)
+++ branches/quickbook-dev/boost/lexical_cast.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -72,7 +72,9 @@
#include <boost/static_assert.hpp>
#include <boost/detail/lcast_precision.hpp>
#include <boost/detail/workaround.hpp>
+#if !defined(__SUNPRO_CC)
#include <boost/container/container_fwd.hpp>
+#endif // !defined(__SUNPRO_CC)
#ifndef BOOST_NO_CWCHAR
# include <cwchar>
#endif
@@ -102,7 +104,7 @@
namespace boost
{
// exception used to indicate runtime lexical_cast failure
- class bad_lexical_cast :
+ class BOOST_SYMBOL_VISIBLE bad_lexical_cast :
// workaround MSVC bug with std::bad_cast when _HAS_EXCEPTIONS == 0
#if defined(BOOST_MSVC) && defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS
public std::exception
@@ -170,11 +172,13 @@
typedef CharT type;
};
+#if !defined(__SUNPRO_CC)
template<class CharT, class Traits, class Alloc>
struct stream_char< ::boost::container::basic_string<CharT,Traits,Alloc> >
{
typedef CharT type;
};
+#endif // !defined(__SUNPRO_CC)
#endif
#ifndef BOOST_LCAST_NO_WCHAR_T
@@ -289,6 +293,7 @@
typedef Traits type;
};
+#if !defined(__SUNPRO_CC)
template<class CharT, class Traits, class Alloc, class Source>
struct deduce_char_traits< CharT
, ::boost::container::basic_string<CharT,Traits,Alloc>
@@ -324,6 +329,25 @@
{
typedef Traits type;
};
+
+ template<class CharT, class Traits, class Alloc1, class Alloc2>
+ struct deduce_char_traits< CharT
+ , ::boost::container::basic_string<CharT,Traits,Alloc1>
+ , std::basic_string<CharT,Traits,Alloc2>
+ >
+ {
+ typedef Traits type;
+ };
+
+ template<class CharT, class Traits, class Alloc1, class Alloc2>
+ struct deduce_char_traits< CharT
+ , std::basic_string<CharT,Traits,Alloc1>
+ , ::boost::container::basic_string<CharT,Traits,Alloc2>
+ >
+ {
+ typedef Traits type;
+ };
+#endif // !defined(__SUNPRO_CC)
#endif
}
@@ -708,6 +732,15 @@
namespace detail
{
+ template <class CharT>
+ bool lc_iequal(const CharT* val, const CharT* lcase, const CharT* ucase, unsigned int len) {
+ for( unsigned int i=0; i < len; ++i ) {
+ if ( val[i] != lcase[i] && val[i] != ucase[i] ) return false;
+ }
+
+ return true;
+ }
+
/* Returns true and sets the correct value if found NaN or Inf. */
template <class CharT, class T>
inline bool parse_inf_nan_impl(const CharT* begin, const CharT* end, T& value
@@ -731,7 +764,7 @@
else if( *begin == plus ) ++begin;
if( end-begin < 3 ) return false;
- if( !memcmp(begin, lc_nan, 3*sizeof(CharT)) || !memcmp(begin, lc_NAN, 3*sizeof(CharT)) )
+ if( lc_iequal(begin, lc_nan, lc_NAN, 3) )
{
begin += 3;
if (end != begin) /* It is 'nan(...)' or some bad input*/
@@ -748,13 +781,13 @@
if (( /* 'INF' or 'inf' */
end-begin==3
&&
- (!memcmp(begin, lc_infinity, 3*sizeof(CharT)) || !memcmp(begin, lc_INFINITY, 3*sizeof(CharT)))
+ lc_iequal(begin, lc_infinity, lc_INFINITY, 3)
)
||
( /* 'INFINITY' or 'infinity' */
end-begin==inifinity_size
&&
- (!memcmp(begin, lc_infinity, inifinity_size)|| !memcmp(begin, lc_INFINITY, inifinity_size))
+ lc_iequal(begin, lc_infinity, lc_INFINITY, inifinity_size)
)
)
{
@@ -766,6 +799,41 @@
return false;
}
+ template <class CharT, class T>
+ bool put_inf_nan_impl(CharT* begin, CharT*& end, const T& value
+ , const CharT* lc_nan
+ , const CharT* lc_infinity)
+ {
+ using namespace std;
+ const CharT minus = lcast_char_constants<CharT>::minus;
+ if ( (boost::math::isnan)(value) )
+ {
+ if ( (boost::math::signbit)(value) )
+ {
+ *begin = minus;
+ ++ begin;
+ }
+
+ memcpy(begin, lc_nan, 3 * sizeof(CharT));
+ end = begin + 3;
+ return true;
+ } else if ( (boost::math::isinf)(value) )
+ {
+ if ( (boost::math::signbit)(value) )
+ {
+ *begin = minus;
+ ++ begin;
+ }
+
+ memcpy(begin, lc_infinity, 3 * sizeof(CharT));
+ end = begin + 3;
+ return true;
+ }
+
+ return false;
+ }
+
+
#ifndef BOOST_LCAST_NO_WCHAR_T
template <class T>
bool parse_inf_nan(const wchar_t* begin, const wchar_t* end, T& value)
@@ -775,6 +843,13 @@
, L"INFINITY", L"infinity"
, L'(', L')');
}
+
+ template <class T>
+ bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value)
+ {
+ return put_inf_nan_impl(begin, end, value, L"nan", L"infinity");
+ }
+
#endif
#ifndef BOOST_NO_CHAR16_T
template <class T>
@@ -785,6 +860,12 @@
, u"INFINITY", u"infinity"
, u'(', u')');
}
+
+ template <class T>
+ bool put_inf_nan(char16_t* begin, char16_t*& end, const T& value)
+ {
+ return put_inf_nan_impl(begin, end, value, u"nan", u"infinity");
+ }
#endif
#ifndef BOOST_NO_CHAR32_T
template <class T>
@@ -795,6 +876,12 @@
, U"INFINITY", U"infinity"
, U'(', U')');
}
+
+ template <class T>
+ bool put_inf_nan(char32_t* begin, char32_t*& end, const T& value)
+ {
+ return put_inf_nan_impl(begin, end, value, U"nan", U"infinity");
+ }
#endif
template <class CharT, class T>
@@ -805,73 +892,12 @@
, "INFINITY", "infinity"
, '(', ')');
}
-#ifndef BOOST_LCAST_NO_WCHAR_T
- template <class T>
- bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value)
- {
- using namespace std;
- if ( (boost::math::isnan)(value) )
- {
- if ( (boost::math::signbit)(value) )
- {
- memcpy(begin,L"-nan", sizeof(L"-nan"));
- end = begin + 4;
- } else
- {
- memcpy(begin,L"nan", sizeof(L"nan"));
- end = begin + 3;
- }
- return true;
- } else if ( (boost::math::isinf)(value) )
- {
- if ( (boost::math::signbit)(value) )
- {
- memcpy(begin,L"-inf", sizeof(L"-inf"));
- end = begin + 4;
- } else
- {
- memcpy(begin,L"inf", sizeof(L"inf"));
- end = begin + 3;
- }
- return true;
- }
- return false;
- }
-#endif
template <class CharT, class T>
bool put_inf_nan(CharT* begin, CharT*& end, const T& value)
{
- using namespace std;
- if ( (boost::math::isnan)(value) )
- {
- if ( (boost::math::signbit)(value) )
- {
- memcpy(begin,"-nan", sizeof("-nan"));
- end = begin + 4;
- } else
- {
- memcpy(begin,"nan", sizeof("nan"));
- end = begin + 3;
- }
- return true;
- } else if ( (boost::math::isinf)(value) )
- {
- if ( (boost::math::signbit)(value) )
- {
- memcpy(begin,"-inf", sizeof("-inf"));
- end = begin + 4;
- } else
- {
- memcpy(begin,"inf", sizeof("inf"));
- end = begin + 3;
- }
- return true;
- }
-
- return false;
+ return put_inf_nan_impl(begin, end, value, "nan", "infinity");
}
-
}
@@ -927,7 +953,7 @@
CharT const capital_e = lcast_char_constants<CharT>::capital_e;
CharT const lowercase_e = lcast_char_constants<CharT>::lowercase_e;
- value = 0.0;
+ value = static_cast<T>(0);
if (parse_inf_nan(begin, end, value)) return true;
@@ -1141,7 +1167,7 @@
namespace detail
{
- struct do_not_construct_stringbuffer_t{};
+ struct do_not_construct_out_stream_t{};
}
namespace detail // optimized stream wrapper
@@ -1153,25 +1179,27 @@
>
class lexical_stream_limited_src
{
- typedef stl_buf_unlocker<std::basic_streambuf<CharT, Traits>, CharT > local_streambuffer_t;
#if defined(BOOST_NO_STRINGSTREAM)
- typedef stl_buf_unlocker<std::strstream, CharT > local_stringbuffer_t;
+ typedef std::ostrstream out_stream_t;
+ typedef stl_buf_unlocker<std::strstreambuf, char> unlocked_but_t;
#elif defined(BOOST_NO_STD_LOCALE)
- typedef stl_buf_unlocker<std::stringstream, CharT > local_stringbuffer_t;
+ typedef std::ostringstream out_stream_t;
+ typedef stl_buf_unlocker<std::stringbuf, char> unlocked_but_t;
#else
- typedef stl_buf_unlocker<std::basic_stringbuf<CharT, Traits>, CharT > local_stringbuffer_t;
+ typedef std::basic_ostringstream<CharT, Traits> out_stream_t;
+ typedef stl_buf_unlocker<std::basic_stringbuf<CharT, Traits>, CharT> unlocked_but_t;
#endif
typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c<
RequiresStringbuffer,
- local_stringbuffer_t,
- do_not_construct_stringbuffer_t
- >::type deduced_stringbuffer_t;
+ out_stream_t,
+ do_not_construct_out_stream_t
+ >::type deduced_out_stream_t;
// A string representation of Source is written to [start, finish).
CharT* start;
CharT* finish;
- deduced_stringbuffer_t stringbuffer;
+ deduced_out_stream_t out_stream;
public:
lexical_stream_limited_src(CharT* sta, CharT* fin)
@@ -1232,10 +1260,16 @@
template<typename InputStreamable>
bool shl_input_streamable(InputStreamable& input)
{
- std::basic_ostream<CharT> stream(&stringbuffer);
- bool const result = !(stream << input).fail();
- start = stringbuffer.pbase();
- finish = stringbuffer.pptr();
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE)
+ // If you have compilation error at this point, than your STL library
+ // unsupports such conversions. Try updating it.
+ BOOST_STATIC_ASSERT((boost::is_same<char, CharT>::value));
+#endif
+ bool const result = !(out_stream << input).fail();
+ const unlocked_but_t* const p
+ = static_cast<unlocked_but_t*>(out_stream.rdbuf()) ;
+ start = p->pbase();
+ finish = p->pptr();
return result;
}
@@ -1346,6 +1380,7 @@
return true;
}
+#if !defined(__SUNPRO_CC)
template<class Alloc>
bool operator<<(::boost::container::basic_string<CharT,Traits,Alloc> const& str)
{
@@ -1353,7 +1388,7 @@
finish = start + str.length();
return true;
}
-
+#endif // !defined(__SUNPRO_CC)
bool operator<<(bool value)
{
CharT const czero = lcast_char_constants<CharT>::zero;
@@ -1499,9 +1534,22 @@
if(is_pointer<InputStreamable>::value)
return false;
- local_streambuffer_t bb;
- bb.setg(start, start, finish);
- std::basic_istream<CharT> stream(&bb);
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE)
+ // If you have compilation error at this point, than your STL library
+ // unsupports such conversions. Try updating it.
+ BOOST_STATIC_ASSERT((boost::is_same<char, CharT>::value));
+#endif
+
+#if defined(BOOST_NO_STRINGSTREAM)
+ std::istrstream stream(start, finish - start);
+#elif defined(BOOST_NO_STD_LOCALE)
+ std::istringstream stream;
+#else
+ std::basic_istringstream<CharT, Traits> stream;
+#endif
+ static_cast<unlocked_but_t*>(stream.rdbuf())
+ ->setg(start, start, finish);
+
stream.unsetf(std::ios::skipws);
lcast_set_precision(stream, static_cast<InputStreamable*>(0));
#if (defined _MSC_VER)
@@ -1570,9 +1618,10 @@
#else
template<class Alloc>
bool operator>>(std::basic_string<CharT,Traits,Alloc>& str) { str.assign(start, finish); return true; }
-
+#if !defined(__SUNPRO_CC)
template<class Alloc>
bool operator>>(::boost::container::basic_string<CharT,Traits,Alloc>& str) { str.assign(start, finish); return true; }
+#endif // !defined(__SUNPRO_CC)
#endif
/*
* case "-0" || "0" || "+0" : output = false; return true;
@@ -1708,13 +1757,13 @@
{
BOOST_STATIC_CONSTANT(bool, value = true );
};
-
+#if !defined(__SUNPRO_CC)
template<typename CharT, typename Traits, typename Alloc>
struct is_stdstring< ::boost::container::basic_string<CharT, Traits, Alloc> >
{
BOOST_STATIC_CONSTANT(bool, value = true );
};
-
+#endif // !defined(__SUNPRO_CC)
template<typename T>
struct is_char_or_wchar
{
@@ -1814,7 +1863,7 @@
{
BOOST_STATIC_CONSTANT(bool, value = true );
};
-
+#if !defined(__SUNPRO_CC)
template<typename CharT, typename Traits, typename Alloc>
struct is_char_array_to_stdstring< ::boost::container::basic_string<CharT, Traits, Alloc>, CharT* >
{
@@ -1826,6 +1875,7 @@
{
BOOST_STATIC_CONSTANT(bool, value = true );
};
+#endif // !defined(__SUNPRO_CC)
#if (defined _MSC_VER)
# pragma warning( push )
@@ -1908,52 +1958,52 @@
}
};
- class precision_loss_error : public boost::numeric::bad_numeric_cast
- {
- public:
- virtual const char * what() const throw()
- { return "bad numeric conversion: precision loss error"; }
- };
-
- template<class S >
- struct throw_on_precision_loss
+ template<class Source, class Target >
+ struct detect_precision_loss
{
- typedef boost::numeric::Trunc<S> Rounder;
- typedef S source_type ;
+ typedef boost::numeric::Trunc<Source> Rounder;
+ typedef Source source_type ;
- typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+ typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+ is_arithmetic<Source>, Source, Source const&
+ >::type argument_type ;
static source_type nearbyint ( argument_type s )
{
- source_type orig_div_round = s / Rounder::nearbyint(s);
+ const source_type orig_div_round = s / Rounder::nearbyint(s);
+ const source_type eps = std::numeric_limits<source_type>::epsilon();
+
+ if ((orig_div_round > 1 ? orig_div_round - 1 : 1 - orig_div_round) > eps)
+ BOOST_LCAST_THROW_BAD_CAST(Source, Target);
- if ( (orig_div_round > 1 ? orig_div_round - 1 : 1 - orig_div_round) > std::numeric_limits<source_type>::epsilon() )
- BOOST_THROW_EXCEPTION( precision_loss_error() );
return s ;
}
typedef typename Rounder::round_style round_style;
} ;
+ template<class Source, class Target >
+ struct nothrow_overflow_handler
+ {
+ void operator() ( boost::numeric::range_check_result r )
+ {
+ if (r != boost::numeric::cInRange)
+ BOOST_LCAST_THROW_BAD_CAST(Source, Target);
+ }
+ } ;
+
template<typename Target, typename Source>
struct lexical_cast_dynamic_num_not_ignoring_minus
{
static inline Target lexical_cast_impl(const Source &arg)
{
- try{
- typedef boost::numeric::converter<
- Target,
- Source,
- boost::numeric::conversion_traits<Target,Source>,
- boost::numeric::def_overflow_handler,
- throw_on_precision_loss<Source>
- > Converter ;
-
- return Converter::convert(arg);
- } catch( ::boost::numeric::bad_numeric_cast const& ) {
- BOOST_LCAST_THROW_BAD_CAST(Source, Target);
- }
- BOOST_UNREACHABLE_RETURN(static_cast<Target>(0));
+ return boost::numeric::converter<
+ Target,
+ Source,
+ boost::numeric::conversion_traits<Target,Source>,
+ nothrow_overflow_handler<Source, Target>,
+ detect_precision_loss<Source, Target>
+ >::convert(arg);
}
};
@@ -1962,25 +2012,17 @@
{
static inline Target lexical_cast_impl(const Source &arg)
{
- try{
- typedef boost::numeric::converter<
- Target,
- Source,
- boost::numeric::conversion_traits<Target,Source>,
- boost::numeric::def_overflow_handler,
- throw_on_precision_loss<Source>
- > Converter ;
-
- bool has_minus = ( arg < 0);
- if ( has_minus ) {
- return static_cast<Target>(-Converter::convert(-arg));
- } else {
- return Converter::convert(arg);
- }
- } catch( ::boost::numeric::bad_numeric_cast const& ) {
- BOOST_LCAST_THROW_BAD_CAST(Source, Target);
- }
- BOOST_UNREACHABLE_RETURN(static_cast<Target>(0));
+ typedef boost::numeric::converter<
+ Target,
+ Source,
+ boost::numeric::conversion_traits<Target,Source>,
+ nothrow_overflow_handler<Source, Target>,
+ detect_precision_loss<Source, Target>
+ > converter_t;
+
+ return (
+ arg < 0 ? -converter_t::convert(-arg) : converter_t::convert(arg)
+ );
}
};
Modified: branches/quickbook-dev/boost/math/constants/constants.hpp
==============================================================================
--- branches/quickbook-dev/boost/math/constants/constants.hpp (original)
+++ branches/quickbook-dev/boost/math/constants/constants.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,5 +1,5 @@
-// Copyright John Maddock 2005-2006.
-// Copyright Paul A. Bristow 2006-2010.
+// Copyright John Maddock 2005-2006, 2011.
+// Copyright Paul A. Bristow 2006-2011.
// Use, modification and distribution are 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)
@@ -8,6 +8,8 @@
#define BOOST_MATH_CONSTANTS_CONSTANTS_INCLUDED
#include <boost/math/tools/config.hpp>
+#include <boost/math/policies/policy.hpp>
+#include <boost/math/tools/precision.hpp>
#ifdef BOOST_MSVC
#pragma warning(push)
#pragma warning(disable: 4127 4701)
@@ -16,6 +18,10 @@
#ifdef BOOST_MSVC
#pragma warning(pop)
#endif
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/is_convertible.hpp>
namespace boost{ namespace math
{
@@ -35,43 +41,251 @@
// (This is necessary because you can't use a numeric constant
// since even a long double might not have enough digits).
+ enum construction_method
+ {
+ construct_from_float = 1,
+ construct_from_double = 2,
+ construct_from_long_double = 3,
+ construct_from_string = 4
+ };
- #define BOOST_DEFINE_MATH_CONSTANT(name, x, y, exp)\
- template <class T> inline T name(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T))\
+ //
+ // Max number of binary digits in the string representations
+ // of our constants:
+ //
+ BOOST_STATIC_CONSTANT(int, max_string_digits = (101 * 1000L) / 301L);
+
+ template <class Real, class Policy>
+ struct construction_traits
+ {
+ private:
+ typedef typename policies::precision<Real, Policy>::type t1;
+ typedef typename policies::precision<float, Policy>::type t2;
+ typedef typename policies::precision<double, Policy>::type t3;
+ typedef typename policies::precision<long double, Policy>::type t4;
+ public:
+ typedef typename mpl::if_<
+ mpl::and_<boost::is_convertible<float, Real>, mpl::bool_< t1::value <= t2::value>, mpl::bool_<0 != t1::value> >,
+ mpl::int_<construct_from_float>,
+ typename mpl::if_<
+ mpl::and_<boost::is_convertible<double, Real>, mpl::bool_< t1::value <= t3::value>, mpl::bool_<0 != t1::value> >,
+ mpl::int_<construct_from_double>,
+ typename mpl::if_<
+ mpl::and_<boost::is_convertible<long double, Real>, mpl::bool_< t1::value <= t4::value>, mpl::bool_<0 != t1::value> >,
+ mpl::int_<construct_from_long_double>,
+ typename mpl::if_<
+ mpl::and_<mpl::bool_< t1::value <= max_string_digits>, mpl::bool_<0 != t1::value> >,
+ mpl::int_<construct_from_string>,
+ mpl::int_<t1::value>
+ >::type
+ >::type
+ >::type
+ >::type type;
+ };
+
+#ifdef BOOST_HAS_THREADS
+#define BOOST_MATH_CONSTANT_THREAD_HELPER(name, prefix) \
+ boost::once_flag f = BOOST_ONCE_INIT;\
+ boost::call_once(f, &BOOST_JOIN(BOOST_JOIN(string_, get_), name)<T>);
+#else
+#define BOOST_MATH_CONSTANT_THREAD_HELPER(name, prefix)
+#endif
+
+ namespace detail{
+
+ template <class Real>
+ Real convert_from_string(const char* p, const mpl::false_&)
+ {
+ return boost::lexical_cast<Real>(p);
+ }
+ template <class Real>
+ const char* convert_from_string(const char* p, const mpl::true_&)
+ {
+ return p;
+ }
+
+ template <class T, T (*F)(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(T))>
+ struct constant_initializer
+ {
+ static void do_nothing()
+ {
+ init.do_nothing();
+ }
+ private:
+ struct initializer
+ {
+ initializer()
+ {
+ F(
+ #ifdef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+ 0
+ #endif
+ );
+ }
+ void do_nothing()const{}
+ };
+ static const initializer init;
+ };
+
+ template <class T, T (*F)(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(T))>
+ typename constant_initializer<T, F>::initializer const constant_initializer<T, F>::init;
+
+ template <class T, int N, T (*F)(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_<N>) BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(T))>
+ struct constant_initializer2
+ {
+ static void do_nothing()
+ {
+ init.do_nothing();
+ }
+ private:
+ struct initializer
+ {
+ initializer()
+ {
+ F(
+ #ifdef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+ mpl::int_<N>() , 0
+ #endif
+ );
+ }
+ void do_nothing()const{}
+ };
+ static const initializer init;
+ };
+
+ template <class T, int N, T (*F)(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_<N>) BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(T))>
+ typename constant_initializer2<T, N, F>::initializer const constant_initializer2<T, N, F>::init;
+
+ }
+
+ #define BOOST_DEFINE_MATH_CONSTANT(name, x, y)\
+ namespace detail{\
+ template <class T> struct BOOST_JOIN(constant_, name){\
+ private:\
+ /* The default implementations come next: */ \
+ static inline T get_from_string()\
{\
- static const T result = ::boost::lexical_cast<T>(BOOST_STRINGIZE(BOOST_JOIN(BOOST_JOIN(x, y), BOOST_JOIN(e, exp))));\
+ static const T result = convert_from_string<T>(y, boost::is_convertible<const char*, T>());\
return result;\
}\
- template <> inline float name<float>(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(float))\
- { return BOOST_JOIN(BOOST_JOIN(x, BOOST_JOIN(e, exp)), F); }\
- template <> inline double name<double>(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(double))\
- { return BOOST_JOIN(x, BOOST_JOIN(e, exp)); }\
- template <> inline long double name<long double>(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(long double))\
- { return BOOST_JOIN(BOOST_JOIN(x, BOOST_JOIN(e, exp)), L); }
-
- BOOST_DEFINE_MATH_CONSTANT(pi, 3.141592653589793238462643383279502884197169399375105820974944, 59230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196, 0)
- BOOST_DEFINE_MATH_CONSTANT(two_pi, 6.2831853071795864769252867665590057683943388015061, 0, 0)
- BOOST_DEFINE_MATH_CONSTANT(root_pi, 1.7724538509055160272981674833411451827975, 0, 0)
- BOOST_DEFINE_MATH_CONSTANT(root_half_pi, 1.253314137315500251207882642405522626503, 0, 0)
- BOOST_DEFINE_MATH_CONSTANT(root_two_pi, 2.506628274631000502415765284811045253007, 0, 0)
- BOOST_DEFINE_MATH_CONSTANT(root_ln_four, 1.1774100225154746910115693264596996377473856893858205385225257565000, 2658854698492680841813836877081, 0)
- BOOST_DEFINE_MATH_CONSTANT(e, 2.7182818284590452353602874713526624977572470936999595749669676, 27724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011, 0)
- BOOST_DEFINE_MATH_CONSTANT(half, 0.5, 0, 0)
- BOOST_DEFINE_MATH_CONSTANT(euler, 0.577215664901532860606512090082402431042159335939923598805, 76723488486, 0)
- BOOST_DEFINE_MATH_CONSTANT(root_two, 1.414213562373095048801688724209698078569671875376948073, 17667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206, 0)
- BOOST_DEFINE_MATH_CONSTANT(half_root_two, 0.70710678118654752440084436210484903928483593756084, 0, 0)
- BOOST_DEFINE_MATH_CONSTANT(ln_two, 0.693147180559945309417232121458176568075500134360255254, 120680009493393621969694715605863326996418687, 0)
- BOOST_DEFINE_MATH_CONSTANT(ln_ln_two, -0.36651292058166432701243915823266946945426344783710526305367771367056, 16153193527385494558228566989083583025230453648347655663425171940646634, 0)
- BOOST_DEFINE_MATH_CONSTANT(third, 0.3333333333333333333333333333333333333333333333333333333333333333333333, 3333333333333333333333333333333333333333333333333333333333333333333333333, 0)
- BOOST_DEFINE_MATH_CONSTANT(twothirds, 0.66666666666666666666666666666666666666666666666666666666666666666666, 66666666666666666666666666666666666666666666666666666666666666666666667, 0) //deprecated, use two_thirds.
- BOOST_DEFINE_MATH_CONSTANT(two_thirds, 0.66666666666666666666666666666666666666666666666666666666666666666666, 66666666666666666666666666666666666666666666666666666666666666666666667, 0)
- BOOST_DEFINE_MATH_CONSTANT(pi_minus_three, 0.141592653589793238462643383279502884197169399375105820974944, 59230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196, 0)
- BOOST_DEFINE_MATH_CONSTANT(four_minus_pi, 0.85840734641020676153735661672049711580283060062489417902505540769218359, 0, 0)
- BOOST_DEFINE_MATH_CONSTANT(pow23_four_minus_pi, 0.79531676737159754434839533505680658072763917332771320544530223438582161, 0, 0)
- BOOST_DEFINE_MATH_CONSTANT(exp_minus_half, 0.6065306597126334236037995349911804534419181354871869556828921587350565194137, 484239986476115079894560, 0)
- } // namespace constants
+ /* This one is for very high precision that is none the less known at compile time: */ \
+ template <int N> static T compute(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_<N>));\
+ /* public getters come next */\
+ public:\
+ static inline T get(const mpl::int_<construct_from_string>&)\
+ {\
+ constant_initializer<T, & BOOST_JOIN(constant_, name)<T>::get_from_string >::do_nothing();\
+ return get_from_string();\
+ }\
+ static inline BOOST_CONSTEXPR T get(const mpl::int_<construct_from_float>)\
+ { return BOOST_JOIN(x, F); }\
+ static inline BOOST_CONSTEXPR T get(const mpl::int_<construct_from_double>&)\
+ { return x; }\
+ static inline BOOST_CONSTEXPR T get(const mpl::int_<construct_from_long_double>&)\
+ { return BOOST_JOIN(x, L); }\
+ template <int N> static inline T get(const mpl::int_<N>& n)\
+ {\
+ constant_initializer2<T, N, & BOOST_JOIN(constant_, name)<T>::template compute<N> >::do_nothing();\
+ return compute<N>(); \
+ }\
+ /* This one is for true arbitary precision, which may well vary at runtime: */ \
+ static inline T get(const mpl::int_<0>&)\
+ { return tools::digits<T>() > max_string_digits ? compute<0>() : get(mpl::int_<construct_from_string>()); }\
+ }; /* end of struct */\
+ } /* namespace detail */ \
+ \
+ \
+ /* The actual forwarding function: */ \
+ template <class T, class Policy> inline BOOST_CONSTEXPR T name(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(T) BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(Policy))\
+ { return detail:: BOOST_JOIN(constant_, name)<T>::get(typename construction_traits<T, Policy>::type()); }\
+ template <class T> inline BOOST_CONSTEXPR T name(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(T))\
+ { return name<T, boost::math::policies::policy<> >(); }\
+ \
+ \
+ /* Now the namespace specific versions: */ \
+ } namespace float_constants{ static const float name = BOOST_JOIN(x, F); }\
+ namespace double_constants{ static const double name = x; } \
+ namespace long_double_constants{ static const long double name = BOOST_JOIN(x, L); }\
+ namespace constants{
+
+ BOOST_DEFINE_MATH_CONSTANT(half, 5.000000000000000000000000000000000000e-01, "5.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01")
+ BOOST_DEFINE_MATH_CONSTANT(third, 3.333333333333333333333333333333333333e-01, "3.33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333e-01")
+ BOOST_DEFINE_MATH_CONSTANT(twothirds, 6.666666666666666666666666666666666666e-01, "6.66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667e-01")
+ BOOST_DEFINE_MATH_CONSTANT(two_thirds, 6.666666666666666666666666666666666666e-01, "6.66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667e-01")
+ BOOST_DEFINE_MATH_CONSTANT(three_quarters, 7.500000000000000000000000000000000000e-01, "7.50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01")
+ BOOST_DEFINE_MATH_CONSTANT(root_two, 1.414213562373095048801688724209698078e+00, "1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623e+00")
+ BOOST_DEFINE_MATH_CONSTANT(root_three, 1.732050807568877293527446341505872366e+00, "1.73205080756887729352744634150587236694280525381038062805580697945193301690880003708114618675724857567562614142e+00")
+ BOOST_DEFINE_MATH_CONSTANT(half_root_two, 7.071067811865475244008443621048490392e-01, "7.07106781186547524400844362104849039284835937688474036588339868995366239231053519425193767163820786367506923115e-01")
+ BOOST_DEFINE_MATH_CONSTANT(ln_two, 6.931471805599453094172321214581765680e-01, "6.93147180559945309417232121458176568075500134360255254120680009493393621969694715605863326996418687542001481021e-01")
+ BOOST_DEFINE_MATH_CONSTANT(ln_ln_two, -3.665129205816643270124391582326694694e-01, "-3.66512920581664327012439158232669469454263447837105263053677713670561615319352738549455822856698908358302523045e-01")
+ BOOST_DEFINE_MATH_CONSTANT(root_ln_four, 1.177410022515474691011569326459699637e+00, "1.17741002251547469101156932645969963774738568938582053852252575650002658854698492680841813836877081106747157858e+00")
+ BOOST_DEFINE_MATH_CONSTANT(one_div_root_two, 7.071067811865475244008443621048490392e-01, "7.07106781186547524400844362104849039284835937688474036588339868995366239231053519425193767163820786367506923115e-01")
+ BOOST_DEFINE_MATH_CONSTANT(pi, 3.141592653589793238462643383279502884e+00, "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651e+00")
+ BOOST_DEFINE_MATH_CONSTANT(half_pi, 1.570796326794896619231321691639751442e+00, "1.57079632679489661923132169163975144209858469968755291048747229615390820314310449931401741267105853399107404326e+00")
+ BOOST_DEFINE_MATH_CONSTANT(third_pi, 1.047197551196597746154214461093167628e+00, "1.04719755119659774615421446109316762806572313312503527365831486410260546876206966620934494178070568932738269550e+00")
+ BOOST_DEFINE_MATH_CONSTANT(sixth_pi, 5.235987755982988730771072305465838140e-01, "5.23598775598298873077107230546583814032861566562517636829157432051302734381034833104672470890352844663691347752e-01")
+ BOOST_DEFINE_MATH_CONSTANT(two_pi, 6.283185307179586476925286766559005768e+00, "6.28318530717958647692528676655900576839433879875021164194988918461563281257241799725606965068423413596429617303e+00")
+ BOOST_DEFINE_MATH_CONSTANT(two_thirds_pi, 2.094395102393195492308428922186335256e+00, "2.09439510239319549230842892218633525613144626625007054731662972820521093752413933241868988356141137865476539101e+00")
+ BOOST_DEFINE_MATH_CONSTANT(three_quarters_pi, 2.356194490192344928846982537459627163e+00, "2.35619449019234492884698253745962716314787704953132936573120844423086230471465674897102611900658780098661106488e+00")
+ BOOST_DEFINE_MATH_CONSTANT(four_thirds_pi, 4.188790204786390984616857844372670512e+00, "4.18879020478639098461685784437267051226289253250014109463325945641042187504827866483737976712282275730953078202e+00")
+ BOOST_DEFINE_MATH_CONSTANT(one_div_two_pi, 1.591549430918953357688837633725143620e-01, "1.59154943091895335768883763372514362034459645740456448747667344058896797634226535090113802766253085956072842727e-01")
+ BOOST_DEFINE_MATH_CONSTANT(one_div_root_two_pi, 3.989422804014326779399460599343818684e-01, "3.98942280401432677939946059934381868475858631164934657665925829670657925899301838501252333907306936430302558863e-01")
+ BOOST_DEFINE_MATH_CONSTANT(root_pi, 1.772453850905516027298167483341145182e+00, "1.77245385090551602729816748334114518279754945612238712821380778985291128459103218137495065673854466541622682362e+00")
+ BOOST_DEFINE_MATH_CONSTANT(root_half_pi, 1.253314137315500251207882642405522626e+00, "1.25331413731550025120788264240552262650349337030496915831496178817114682730392098747329791918902863305800498633e+00")
+ BOOST_DEFINE_MATH_CONSTANT(root_two_pi, 2.506628274631000502415765284811045253e+00, "2.50662827463100050241576528481104525300698674060993831662992357634229365460784197494659583837805726611600997267e+00")
+ BOOST_DEFINE_MATH_CONSTANT(one_div_root_pi, 5.641895835477562869480794515607725858e-01, "5.64189583547756286948079451560772585844050629328998856844085721710642468441493414486743660202107363443028347906e-01")
+ BOOST_DEFINE_MATH_CONSTANT(root_one_div_pi, 5.641895835477562869480794515607725858e-01, "5.64189583547756286948079451560772585844050629328998856844085721710642468441493414486743660202107363443028347906e-01")
+ BOOST_DEFINE_MATH_CONSTANT(pi_minus_three, 1.415926535897932384626433832795028841e-01, "1.41592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513e-01")
+ BOOST_DEFINE_MATH_CONSTANT(four_minus_pi, 8.584073464102067615373566167204971158e-01, "8.58407346410206761537356616720497115802830600624894179025055407692183593713791001371965174657882932017851913487e-01")
+ BOOST_DEFINE_MATH_CONSTANT(pow23_four_minus_pi, 7.953167673715975443483953350568065807e-01, "7.95316767371597544348395335056806580727639173327713205445302234388856268267518187590758006888600828436839800178e-01")
+ BOOST_DEFINE_MATH_CONSTANT(pi_pow_e, 2.245915771836104547342715220454373502e+01, "2.24591577183610454734271522045437350275893151339966922492030025540669260403991179123185197527271430315314500731e+01")
+ BOOST_DEFINE_MATH_CONSTANT(pi_sqr, 9.869604401089358618834490999876151135e+00, "9.86960440108935861883449099987615113531369940724079062641334937622004482241920524300177340371855223182402591377e+00")
+ BOOST_DEFINE_MATH_CONSTANT(pi_sqr_div_six, 1.644934066848226436472415166646025189e+00, "1.64493406684822643647241516664602518921894990120679843773555822937000747040320087383362890061975870530400431896e+00")
+ BOOST_DEFINE_MATH_CONSTANT(pi_cubed, 3.100627668029982017547631506710139520e+01, "3.10062766802998201754763150671013952022252885658851076941445381038063949174657060375667010326028861930301219616e+01")
+ BOOST_DEFINE_MATH_CONSTANT(cbrt_pi, 1.464591887561523263020142527263790391e+00, "1.46459188756152326302014252726379039173859685562793717435725593713839364979828626614568206782035382089750397002e+00")
+ BOOST_DEFINE_MATH_CONSTANT(one_div_cbrt_pi, 6.827840632552956814670208331581645981e-01, "6.82784063255295681467020833158164598108367515632448804042681583118899226433403918237673501922595519865685577274e-01")
+ BOOST_DEFINE_MATH_CONSTANT(e, 2.718281828459045235360287471352662497e+00, "2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193e+00")
+ BOOST_DEFINE_MATH_CONSTANT(exp_minus_half, 6.065306597126334236037995349911804534e-01, "6.06530659712633423603799534991180453441918135487186955682892158735056519413748423998647611507989456026423789794e-01")
+ BOOST_DEFINE_MATH_CONSTANT(e_pow_pi, 2.314069263277926900572908636794854738e+01, "2.31406926327792690057290863679485473802661062426002119934450464095243423506904527835169719970675492196759527048e+01")
+ BOOST_DEFINE_MATH_CONSTANT(root_e, 1.648721270700128146848650787814163571e+00, "1.64872127070012814684865078781416357165377610071014801157507931164066102119421560863277652005636664300286663776e+00")
+ BOOST_DEFINE_MATH_CONSTANT(log10_e, 4.342944819032518276511289189166050822e-01, "4.34294481903251827651128918916605082294397005803666566114453783165864649208870774729224949338431748318706106745e-01")
+ BOOST_DEFINE_MATH_CONSTANT(one_div_log10_e, 2.302585092994045684017991454684364207e+00, "2.30258509299404568401799145468436420760110148862877297603332790096757260967735248023599720508959829834196778404e+00")
+ BOOST_DEFINE_MATH_CONSTANT(degree, 1.745329251994329576923690768488612713e-02, "1.74532925199432957692369076848861271344287188854172545609719144017100911460344944368224156963450948221230449251e-02")
+ BOOST_DEFINE_MATH_CONSTANT(radian, 5.729577951308232087679815481410517033e+01, "5.72957795130823208767981548141051703324054724665643215491602438612028471483215526324409689958511109441862233816e+01")
+ BOOST_DEFINE_MATH_CONSTANT(sin_one, 8.414709848078965066525023216302989996e-01, "8.41470984807896506652502321630298999622563060798371065672751709991910404391239668948639743543052695854349037908e-01")
+ BOOST_DEFINE_MATH_CONSTANT(cos_one, 5.403023058681397174009366074429766037e-01, "5.40302305868139717400936607442976603732310420617922227670097255381100394774471764517951856087183089343571731160e-01")
+ BOOST_DEFINE_MATH_CONSTANT(sinh_one, 1.175201193643801456882381850595600815e+00, "1.17520119364380145688238185059560081515571798133409587022956541301330756730432389560711745208962339184041953333e+00")
+ BOOST_DEFINE_MATH_CONSTANT(cosh_one, 1.543080634815243778477905620757061682e+00, "1.54308063481524377847790562075706168260152911236586370473740221471076906304922369896426472643554303558704685860e+00")
+ BOOST_DEFINE_MATH_CONSTANT(phi, 1.618033988749894848204586834365638117e+00, "1.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408808e+00")
+ BOOST_DEFINE_MATH_CONSTANT(ln_phi, 4.812118250596034474977589134243684231e-01, "4.81211825059603447497758913424368423135184334385660519661018168840163867608221774412009429122723474997231839958e-01")
+ BOOST_DEFINE_MATH_CONSTANT(one_div_ln_phi, 2.078086921235027537601322606117795767e+00, "2.07808692123502753760132260611779576774219226778328348027813992191974386928553540901445615414453604821933918634e+00")
+ BOOST_DEFINE_MATH_CONSTANT(euler, 5.772156649015328606065120900824024310e-01, "5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447250e-01")
+ BOOST_DEFINE_MATH_CONSTANT(one_div_euler, 1.732454714600633473583025315860829681e+00, "1.73245471460063347358302531586082968115577655226680502204843613287065531408655243008832840219409928068072365714e+00")
+ BOOST_DEFINE_MATH_CONSTANT(euler_sqr, 3.331779238077186743183761363552442266e-01, "3.33177923807718674318376136355244226659417140249629743150833338002265793695756669661263268631715977303039565603e-01")
+ BOOST_DEFINE_MATH_CONSTANT(zeta_two, 1.644934066848226436472415166646025189e+00, "1.64493406684822643647241516664602518921894990120679843773555822937000747040320087383362890061975870530400431896e+00")
+ BOOST_DEFINE_MATH_CONSTANT(zeta_three, 1.202056903159594285399738161511449990e+00, "1.20205690315959428539973816151144999076498629234049888179227155534183820578631309018645587360933525814619915780e+00")
+ BOOST_DEFINE_MATH_CONSTANT(catalan, 9.159655941772190150546035149323841107e-01, "9.15965594177219015054603514932384110774149374281672134266498119621763019776254769479356512926115106248574422619e-01")
+ BOOST_DEFINE_MATH_CONSTANT(glaisher, 1.282427129100622636875342568869791727e+00, "1.28242712910062263687534256886979172776768892732500119206374002174040630885882646112973649195820237439420646120e+00")
+ BOOST_DEFINE_MATH_CONSTANT(khinchin, 2.685452001065306445309714835481795693e+00, "2.68545200106530644530971483548179569382038229399446295305115234555721885953715200280114117493184769799515346591e+00")
+ BOOST_DEFINE_MATH_CONSTANT(extreme_value_skewness, 1.139547099404648657492793019389846112e+00, "1.13954709940464865749279301938984611208759979583655182472165571008524800770607068570718754688693851501894272049e+00")
+ BOOST_DEFINE_MATH_CONSTANT(rayleigh_skewness, 6.311106578189371381918993515442277798e-01, "6.31110657818937138191899351544227779844042203134719497658094585692926819617473725459905027032537306794400047264e-01")
+ BOOST_DEFINE_MATH_CONSTANT(rayleigh_kurtosis, 3.245089300687638062848660410619754415e+00, "3.24508930068763806284866041061975441541706673178920936177133764493367904540874159051490619368679348977426462633e+00")
+ BOOST_DEFINE_MATH_CONSTANT(rayleigh_kurtosis_excess, 2.450893006876380628486604106197544154e-01, "2.45089300687638062848660410619754415417066731789209361771337644933679045408741590514906193686793489774264626328e-01")
+
+ BOOST_DEFINE_MATH_CONSTANT(two_div_pi, 6.366197723675813430755350534900574481e-01, "6.36619772367581343075535053490057448137838582961825794990669376235587190536906140360455211065012343824291370907e-01")
+ BOOST_DEFINE_MATH_CONSTANT(root_two_div_pi, 7.978845608028653558798921198687637369e-01, "7.97884560802865355879892119868763736951717262329869315331851659341315851798603677002504667814613872860605117725e-01")
+
+
+} // namespace constants
} // namespace math
} // namespace boost
+//
+// We deliberately include this *after* all the declarations above,
+// that way the calculation routines can call on other constants above:
+//
+#include <boost/math/constants/calculate_constants.hpp>
+
#endif // BOOST_MATH_CONSTANTS_CONSTANTS_INCLUDED
+
Modified: branches/quickbook-dev/boost/math/distributions/triangular.hpp
==============================================================================
--- branches/quickbook-dev/boost/math/distributions/triangular.hpp (original)
+++ branches/quickbook-dev/boost/math/distributions/triangular.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -470,7 +470,7 @@
RealType mode = dist.mode();
RealType upper = dist.upper();
RealType result = 0; // of checks.
- if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))
+ if(false == boost::math::detail::check_triangular(function,lower, mode, upper, &result, Policy()))
{
return result;
}
Modified: branches/quickbook-dev/boost/math/special_functions/detail/lanczos_sse2.hpp
==============================================================================
--- branches/quickbook-dev/boost/math/special_functions/detail/lanczos_sse2.hpp (original)
+++ branches/quickbook-dev/boost/math/special_functions/detail/lanczos_sse2.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,7 +13,7 @@
#include <emmintrin.h>
#if defined(__GNUC__) || defined(__PGI)
-#define ALIGN16 __attribute__((aligned(16)))
+#define ALIGN16 __attribute__((__aligned__(16)))
#else
#define ALIGN16 __declspec(align(16))
#endif
@@ -194,8 +194,11 @@
} // namespace math
} // namespace boost
+#undef ALIGN16
+
#endif // BOOST_MATH_SPECIAL_FUNCTIONS_LANCZOS
+
Modified: branches/quickbook-dev/boost/math/special_functions/nonfinite_num_facets.hpp
==============================================================================
--- branches/quickbook-dev/boost/math/special_functions/nonfinite_num_facets.hpp (original)
+++ branches/quickbook-dev/boost/math/special_functions/nonfinite_num_facets.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,8 +1,9 @@
#ifndef BOOST_MATH_NONFINITE_NUM_FACETS_HPP
#define BOOST_MATH_NONFINITE_NUM_FACETS_HPP
-// Copyright (c) 2006 Johan Rade
-// Copyright 2011 Paul A. Bristow (comments)
+// Copyright 2006 Johan Rade
+// Copyright 2012 K R Walker
+// Copyright 2011, 2012 Paul A. Bristow
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt
@@ -28,10 +29,9 @@
#include <boost/math/special_functions/sign.hpp>
#ifdef _MSC_VER
-# pragma warning(push)
-# pragma warning(disable : 4127) // conditional expression is constant.
-# pragma warning(disable : 4706) // assignment within conditional expression.
-# pragma warning(disable : 4224) // formal parameter 'version' was previously defined as a type.
+# pragma warning(push)
+# pragma warning(disable : 4127) // conditional expression is constant.
+# pragma warning(disable : 4706) // assignment within conditional expression.
#endif
namespace boost {
@@ -65,16 +65,14 @@
protected:
virtual OutputIterator do_put(
- OutputIterator it, std::ios_base& iosb,
- CharType fill, double val) const
+ OutputIterator it, std::ios_base& iosb, CharType fill, double val) const
{
put_and_reset_width(it, iosb, fill, val);
return it;
}
virtual OutputIterator do_put(
- OutputIterator it, std::ios_base& iosb,
- CharType fill, long double val) const
+ OutputIterator it, std::ios_base& iosb, CharType fill, long double val) const
{
put_and_reset_width(it, iosb, fill, val);
return it;
@@ -93,86 +91,136 @@
OutputIterator& it, std::ios_base& iosb,
CharType fill, ValType val) const
{
- switch((boost::math::fpclassify)(val)) {
+ static const CharType prefix_plus[2] = { '+', '\0' };
+ static const CharType prefix_minus[2] = { '-', '\0' };
+ static const CharType body_inf[4] = { 'i', 'n', 'f', '\0' };
+ static const CharType body_nan[4] = { 'n', 'a', 'n', '\0' };
+ static const CharType* null_string = 0;
+
+ switch((boost::math::fpclassify)(val))
+ {
case FP_INFINITE:
if(flags_ & trap_infinity)
+ {
throw std::ios_base::failure("Infinity");
+ }
else if((boost::math::signbit)(val))
- put_num_and_fill(it, iosb, "-", "inf", fill);
+ { // negative infinity.
+ put_num_and_fill(it, iosb, prefix_minus, body_inf, fill, val);
+ }
else if(iosb.flags() & std::ios_base::showpos)
- put_num_and_fill(it, iosb, "+", "inf", fill);
+ { // Explicit "+inf" wanted.
+ put_num_and_fill(it, iosb, prefix_plus, body_inf, fill, val);
+ }
else
- put_num_and_fill(it, iosb, "", "inf", fill);
+ { // just "inf" wanted.
+ put_num_and_fill(it, iosb, null_string, body_inf, fill, val);
+ }
break;
case FP_NAN:
if(flags_ & trap_nan)
+ {
throw std::ios_base::failure("NaN");
+ }
else if((boost::math::signbit)(val))
- put_num_and_fill(it, iosb, "-", "nan", fill);
+ { // negative so "-nan".
+ put_num_and_fill(it, iosb, prefix_minus, body_nan, fill, val);
+ }
else if(iosb.flags() & std::ios_base::showpos)
- put_num_and_fill(it, iosb, "+", "nan", fill);
+ { // explicit "+nan" wanted.
+ put_num_and_fill(it, iosb, prefix_plus, body_nan, fill, val);
+ }
else
- put_num_and_fill(it, iosb, "", "nan", fill);
+ { // Just "nan".
+ put_num_and_fill(it, iosb, null_string, body_nan, fill, val);
+ }
break;
case FP_ZERO:
- if(flags_ & signed_zero) {
- if((boost::math::signbit)(val))
- put_num_and_fill(it, iosb, "-", "0", fill);
- else if(iosb.flags() & std::ios_base::showpos)
- put_num_and_fill(it, iosb, "+", "0", fill);
- else
- put_num_and_fill(it, iosb, "", "0", fill);
+ if((flags_ & signed_zero) && ((boost::math::signbit)(val)))
+ { // Flag set to distinguish between positive and negative zero.
+ // But string "0" should have stuff after decimal point if setprecision and/or exp format.
+
+ std::basic_ostringstream<CharType> zeros; // Needs to be CharType version.
+
+ // Copy flags, fill, width and precision.
+ zeros.flags(iosb.flags());
+ zeros.unsetf(std::ios::showpos); // Ignore showpos because must be negative.
+ zeros.precision(iosb.precision());
+ //zeros.width is set by put_num_and_fill
+ zeros.fill(static_cast<char>(fill));
+ zeros << ValType(0);
+ put_num_and_fill(it, iosb, prefix_minus, zeros.str().c_str(), fill, val);
}
else
- put_num_and_fill(it, iosb, "", "0", fill);
+ { // Output the platform default for positive and negative zero.
+ put_num_and_fill(it, iosb, null_string, null_string, fill, val);
+ }
break;
- default:
- it = std::num_put<CharType, OutputIterator>::do_put(
- it, iosb, fill, val);
+ default: // Normal non-zero finite value.
+ it = std::num_put<CharType, OutputIterator>::do_put(it, iosb, fill, val);
break;
}
}
+ template<class ValType>
void put_num_and_fill(
- OutputIterator& it, std::ios_base& iosb, const char* prefix,
- const char* body, CharType fill) const
+ OutputIterator& it, std::ios_base& iosb, const CharType* prefix,
+ const CharType* body, CharType fill, ValType val) const
{
- int width = (int)std::strlen(prefix) + (int)std::strlen(body);
- std::ios_base::fmtflags adjust
- = iosb.flags() & std::ios_base::adjustfield;
+ int prefix_length = prefix ? (int)std::char_traits<CharType>::length(prefix) : 0;
+ int body_length = body ? (int)std::char_traits<CharType>::length(body) : 0;
+ int width = prefix_length + body_length;
+ std::ios_base::fmtflags adjust = iosb.flags() & std::ios_base::adjustfield;
const std::ctype<CharType>& ct
= std::use_facet<std::ctype<CharType> >(iosb.getloc());
- if(adjust != std::ios_base::internal && adjust != std::ios_base::left)
- put_fill(it, iosb, fill, width);
-
- while(*prefix)
- *it = ct.widen(*(prefix++));
-
- if(adjust == std::ios_base::internal)
- put_fill(it, iosb, fill, width);
+ if(body || prefix)
+ { // adjust == std::ios_base::right, so leading fill needed.
+ if(adjust != std::ios_base::internal && adjust != std::ios_base::left)
+ put_fill(it, iosb, fill, width);
+ }
+
+ if(prefix)
+ { // Adjust width for prefix.
+ while(*prefix)
+ *it = *(prefix++);
+ iosb.width( iosb.width() - prefix_length );
+ width -= prefix_length;
+ }
+
+ if(body)
+ { //
+ if(adjust == std::ios_base::internal)
+ { // Put fill between sign and digits.
+ put_fill(it, iosb, fill, width);
+ }
+ if(iosb.flags() & std::ios_base::uppercase)
+ {
+ while(*body)
+ *it = ct.toupper(*(body++));
+ }
+ else
+ {
+ while(*body)
+ *it = *(body++);
+ }
- if(iosb.flags() & std::ios_base::uppercase) {
- while(*body)
- *it = ct.toupper(ct.widen(*(body++)));
+ if(adjust == std::ios_base::left)
+ put_fill(it, iosb, fill, width);
}
- else {
- while(*body)
- *it = ct.widen(*(body++));
+ else
+ {
+ it = std::num_put<CharType, OutputIterator>::do_put(it, iosb, fill, val);
}
-
- if(adjust == std::ios_base::left)
- put_fill(it, iosb, fill, width);
}
void put_fill(
- OutputIterator& it, std::ios_base& iosb,
- CharType fill, int width) const
- {
+ OutputIterator& it, std::ios_base& iosb, CharType fill, int width) const
+ { // Insert fill chars.
for(std::streamsize i = iosb.width() - static_cast<std::streamsize>(width); i > 0; --i)
*it = fill;
}
@@ -540,4 +588,5 @@
# pragma warning(pop)
#endif
-#endif
+#endif // BOOST_MATH_NONFINITE_NUM_FACETS_HPP
+
Modified: branches/quickbook-dev/boost/math/special_functions/round.hpp
==============================================================================
--- branches/quickbook-dev/boost/math/special_functions/round.hpp (original)
+++ branches/quickbook-dev/boost/math/special_functions/round.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -76,7 +76,7 @@
BOOST_MATH_STD_USING
T r = boost::math::round(v, pol);
if((r > (std::numeric_limits<boost::long_long_type>::max)()) || (r < (std::numeric_limits<boost::long_long_type>::min)()))
- return static_cast<boost::long_long_type>(policies::raise_rounding_error("boost::math::llround<%1%>(%1%)", 0, v, 0LL, pol));
+ return static_cast<boost::long_long_type>(policies::raise_rounding_error("boost::math::llround<%1%>(%1%)", 0, v, static_cast<boost::long_long_type>(0), pol));
return static_cast<boost::long_long_type>(r);
}
template <class T>
Modified: branches/quickbook-dev/boost/math/special_functions/trunc.hpp
==============================================================================
--- branches/quickbook-dev/boost/math/special_functions/trunc.hpp (original)
+++ branches/quickbook-dev/boost/math/special_functions/trunc.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -76,7 +76,7 @@
BOOST_MATH_STD_USING
T r = boost::math::trunc(v, pol);
if((r > (std::numeric_limits<boost::long_long_type>::max)()) || (r < (std::numeric_limits<boost::long_long_type>::min)()))
- return static_cast<boost::long_long_type>(policies::raise_rounding_error("boost::math::lltrunc<%1%>(%1%)", 0, v, 0LL, pol));
+ return static_cast<boost::long_long_type>(policies::raise_rounding_error("boost::math::lltrunc<%1%>(%1%)", 0, v, static_cast<boost::long_long_type>(0), pol));
return static_cast<boost::long_long_type>(r);
}
template <class T>
Modified: branches/quickbook-dev/boost/math/tools/config.hpp
==============================================================================
--- branches/quickbook-dev/boost/math/tools/config.hpp (original)
+++ branches/quickbook-dev/boost/math/tools/config.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,6 +16,7 @@
#include <algorithm> // for min and max
#include <boost/config/no_tr1/cmath.hpp>
#include <climits>
+#include <cfloat>
#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
# include <math.h>
#endif
@@ -24,7 +25,8 @@
#include <boost/math/special_functions/detail/round_fwd.hpp>
#if (defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__NetBSD__) \
- || (defined(__hppa) && !defined(__OpenBSD__)) || defined(__NO_LONG_DOUBLE_MATH)) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
+ || (defined(__hppa) && !defined(__OpenBSD__)) || (defined(__NO_LONG_DOUBLE_MATH) && (DBL_MANT_DIG != LDBL_MANT_DIG))) \
+ && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
# define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
#endif
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
Modified: branches/quickbook-dev/boost/msm/back/favor_compile_time.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/back/favor_compile_time.hpp (original)
+++ branches/quickbook-dev/boost/msm/back/favor_compile_time.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -108,7 +108,7 @@
std::deque<cell> one_state;
};
template <class TransitionState>
- static HandledEnum call_submachine(Fsm& fsm, int region, int state, Event const& evt)
+ static HandledEnum call_submachine(Fsm& fsm, int , int , Event const& evt)
{
return (fsm.template get_state<TransitionState&>()).process_any_event( ::boost::any(evt));
}
Modified: branches/quickbook-dev/boost/msm/back/state_machine.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/back/state_machine.hpp (original)
+++ branches/quickbook-dev/boost/msm/back/state_machine.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -52,6 +52,7 @@
#include <boost/msm/active_state_switching_policies.hpp>
#include <boost/msm/row_tags.hpp>
+#include <boost/msm/msm_grammar.hpp>
#include <boost/msm/back/fold_to_list.hpp>
#include <boost/msm/back/metafunctions.hpp>
#include <boost/msm/back/history_policies.hpp>
@@ -73,6 +74,7 @@
BOOST_MPL_HAS_XXX_TRAIT_DEF(fsm_check)
BOOST_MPL_HAS_XXX_TRAIT_DEF(compile_policy)
BOOST_MPL_HAS_XXX_TRAIT_DEF(queue_container_policy)
+BOOST_MPL_HAS_XXX_TRAIT_DEF(using_declared_table)
#ifndef BOOST_MSM_CONSTRUCTOR_ARG_SIZE
#define BOOST_MSM_CONSTRUCTOR_ARG_SIZE 5 // default max number of arguments for constructors
@@ -120,7 +122,16 @@
>
> state_machine_signature;
-
+// just here to disable use of proto when not needed
+template <class T, class F,class Enable=void>
+struct make_euml_terminal;
+template <class T,class F>
+struct make_euml_terminal<T,F,typename ::boost::disable_if<has_using_declared_table<F> >::type>
+{};
+template <class T,class F>
+struct make_euml_terminal<T,F,typename ::boost::enable_if<has_using_declared_table<F> >::type>
+ : public proto::extends<typename proto::terminal< boost::msm::state_tag>::type, T, boost::msm::state_domain>
+{};
// library-containing class for state machines. Pass the actual FSM class as
// the Concrete parameter.
@@ -136,6 +147,11 @@
public ::boost::parameter::binding<
typename state_machine_signature::bind<A0,A1,A2,A3,A4>::type, ::boost::msm::back::tag::front_end
>::type
+ , public make_euml_terminal<state_machine<A0,A1,A2,A3,A4>,
+ typename ::boost::parameter::binding<
+ typename state_machine_signature::bind<A0,A1,A2,A3,A4>::type, ::boost::msm::back::tag::front_end
+ >::type
+ >
{
public:
// Create ArgumentPack
@@ -2405,7 +2421,7 @@
{
typedef typename build_orthogonal_regions<
library_sm,
- typename Derived::initial_state
+ initial_states
>::type all_regions;
enum {region_index= find_region_index<all_regions,StateType>::value };
};
@@ -2477,6 +2493,8 @@
// entry on the FSM
(static_cast<Derived*>(self))->on_entry(evt,fsm);
int state_id = get_state_id<stt,typename EventType::active_state::wrapped_entry>::value;
+ BOOST_STATIC_ASSERT(find_region_id<typename EventType::active_state::wrapped_entry>::region_index >= 0);
+ BOOST_STATIC_ASSERT(find_region_id<typename EventType::active_state::wrapped_entry>::region_index < nr_regions::value);
// given region starts with the entry pseudo state as active state
self->m_states[find_region_id<typename EventType::active_state::wrapped_entry>::region_index] = state_id;
self->internal_start(evt.m_event);
Modified: branches/quickbook-dev/boost/msm/common.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/common.hpp (original)
+++ branches/quickbook-dev/boost/msm/common.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,8 +11,6 @@
#ifndef BOOST_MSM_COMMON_H
#define BOOST_MSM_COMMON_H
-
-
namespace boost { namespace msm
{
// wrapper for mpl::for_each as showed in the C++ Template Metaprogramming ch. 9
Modified: branches/quickbook-dev/boost/msm/front/euml/common.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/front/euml/common.hpp (original)
+++ branches/quickbook-dev/boost/msm/front/euml/common.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -183,51 +183,12 @@
typedef typename T::event_name type;
};
-// grammar forbidding address of for terminals
-struct terminal_grammar : proto::not_<proto::address_of<proto::_> >
-{};
-
-// Forward-declare an expression wrapper
-template<typename Expr>
-struct euml_terminal;
-
-struct sm_domain
- : proto::domain< proto::generator<euml_terminal>, terminal_grammar, boost::msm::msm_domain >
-{};
-
-struct state_grammar :
- proto::and_<
- proto::not_<proto::address_of<proto::_> >,
- proto::not_<proto::shift_right<proto::_,proto::_> >,
- proto::not_<proto::shift_left<proto::_,proto::_> >,
- proto::not_<proto::bitwise_and<proto::_,proto::_> >
- >
-{};
-struct state_domain
- : proto::domain< proto::generator<euml_terminal>, state_grammar,sm_domain >
-{};
-
-template<typename Expr>
-struct euml_terminal
- : proto::extends<Expr, euml_terminal<Expr>, sm_domain>
-{
- typedef
- proto::extends<Expr, euml_terminal<Expr>, sm_domain>
- base_type;
- // Needs a constructor
- euml_terminal(Expr const &e = Expr())
- : base_type(e)
- {}
- // Unhide Proto's overloaded assignment operator
- using base_type::operator=;
-};
-
template <class EVT>
-struct euml_event: proto::extends<typename proto::terminal<event_tag>::type, EVT, sm_domain>
+struct euml_event: proto::extends<typename proto::terminal<event_tag>::type, EVT, boost::msm::sm_domain>
{
typedef event_tag euml_tag_type;
typedef EVT event_name;
- using proto::extends<typename proto::terminal<event_tag>::type, EVT, sm_domain>::operator=;
+ using proto::extends<typename proto::terminal<event_tag>::type, EVT, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -239,10 +200,10 @@
};
};
template <class STATE>
-struct euml_state_intern: proto::extends<typename proto::terminal< boost::msm::state_tag>::type, STATE, state_domain>
+struct euml_state_intern: proto::extends<typename proto::terminal< boost::msm::state_tag>::type, STATE, boost::msm::state_domain>
{
typedef state_tag euml_tag_type;
- using proto::extends<typename proto::terminal<state_tag>::type, STATE, state_domain>::operator=;
+ using proto::extends<typename proto::terminal<state_tag>::type, STATE, boost::msm::state_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -254,22 +215,22 @@
};
};
template <class STATE>
-struct euml_state: proto::extends<typename proto::terminal< boost::msm::state_tag>::type, STATE, state_domain>
+struct euml_state: proto::extends<typename proto::terminal< boost::msm::state_tag>::type, STATE, boost::msm::state_domain>
{
typedef state_tag euml_tag_type;
typedef int not_intern_euml_state;
- using proto::extends<typename proto::terminal<state_tag>::type, STATE, state_domain>::operator=;
+ using proto::extends<typename proto::terminal<state_tag>::type, STATE, boost::msm::state_domain>::operator=;
struct In
{
typedef STATE type;
};
};
template <class ACTION>
-struct euml_action: proto::extends<typename proto::terminal<action_tag>::type, ACTION, sm_domain>
+struct euml_action: proto::extends<typename proto::terminal<action_tag>::type, ACTION, boost::msm::sm_domain>
{
typedef action_tag euml_tag_type;
typedef ACTION action_name;
- using proto::extends<typename proto::terminal<action_tag>::type, ACTION, sm_domain>::operator=;
+ using proto::extends<typename proto::terminal<action_tag>::type, ACTION, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -281,10 +242,10 @@
};
};
template <class FLAG>
-struct euml_flag: proto::extends<typename proto::terminal<flag_tag>::type, FLAG, sm_domain>
+struct euml_flag: proto::extends<typename proto::terminal<flag_tag>::type, FLAG, boost::msm::sm_domain>
{
typedef flag_tag euml_tag_type;
- using proto::extends<typename proto::terminal<flag_tag>::type, FLAG, sm_domain>::operator=;
+ using proto::extends<typename proto::terminal<flag_tag>::type, FLAG, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -297,10 +258,10 @@
};
template <class CONFIG>
-struct euml_config: proto::extends<typename proto::terminal<config_tag>::type, CONFIG, sm_domain>
+struct euml_config: proto::extends<typename proto::terminal<config_tag>::type, CONFIG, boost::msm::sm_domain>
{
typedef config_tag euml_tag_type;
- using proto::extends<typename proto::terminal<config_tag>::type, CONFIG, sm_domain>::operator=;
+ using proto::extends<typename proto::terminal<config_tag>::type, CONFIG, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -441,7 +402,7 @@
return src;
}
};
-struct GetSource_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetSource_Helper, sm_domain>
+struct GetSource_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetSource_Helper, boost::msm::sm_domain>
{
GetSource_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -491,7 +452,7 @@
return tgt;
}
};
-struct GetTarget_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetTarget_Helper, sm_domain>
+struct GetTarget_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetTarget_Helper, boost::msm::sm_domain>
{
GetTarget_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -543,7 +504,7 @@
return state;
}
};
-struct GetState_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetState_Helper, sm_domain>
+struct GetState_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetState_Helper, boost::msm::sm_domain>
{
GetState_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -618,7 +579,7 @@
return evt;
}
};
-struct GetEvent_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetEvent_Helper, sm_domain>
+struct GetEvent_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetEvent_Helper, boost::msm::sm_domain>
{
GetEvent_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -693,7 +654,7 @@
return fsm;
}
};
-struct GetFsm_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetFsm_Helper, sm_domain>
+struct GetFsm_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetFsm_Helper, boost::msm::sm_domain>
{
GetFsm_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -764,10 +725,10 @@
}
};
-struct SubState_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, SubState_Helper, sm_domain>
+struct SubState_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, SubState_Helper, boost::msm::sm_domain>
{
SubState_Helper(){}
- using proto::extends< proto::terminal<fsm_artefact_tag>::type, SubState_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<fsm_artefact_tag>::type, SubState_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -827,7 +788,7 @@
}
};
-struct GetAttribute_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetAttribute_Helper, sm_domain>
+struct GetAttribute_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetAttribute_Helper, boost::msm::sm_domain>
{
GetAttribute_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1391,10 +1352,10 @@
};
struct process_tag {};
-struct Process_Helper: proto::extends< proto::terminal<process_tag>::type, Process_Helper, sm_domain>
+struct Process_Helper: proto::extends< proto::terminal<process_tag>::type, Process_Helper, boost::msm::sm_domain>
{
Process_Helper(){}
- using proto::extends< proto::terminal<process_tag>::type, Process_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<process_tag>::type, Process_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -1562,10 +1523,10 @@
}
};
struct reprocess_tag {};
-struct Reprocess_Helper: proto::extends< proto::terminal<reprocess_tag>::type, Reprocess_Helper, sm_domain>
+struct Reprocess_Helper: proto::extends< proto::terminal<reprocess_tag>::type, Reprocess_Helper, boost::msm::sm_domain>
{
Reprocess_Helper(){}
- using proto::extends< proto::terminal<reprocess_tag>::type, Reprocess_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<reprocess_tag>::type, Reprocess_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -1700,10 +1661,10 @@
};
struct process2_tag {};
-struct Process2_Helper : proto::extends< proto::terminal<process2_tag>::type, Process2_Helper, sm_domain>
+struct Process2_Helper : proto::extends< proto::terminal<process2_tag>::type, Process2_Helper, boost::msm::sm_domain>
{
Process2_Helper(){}
- using proto::extends< proto::terminal<process2_tag>::type, Process2_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<process2_tag>::type, Process2_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -1781,7 +1742,7 @@
}
};
-struct Get_Flag_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, Get_Flag_Helper, sm_domain>
+struct Get_Flag_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, Get_Flag_Helper, boost::msm::sm_domain>
{
Get_Flag_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1806,10 +1767,10 @@
fsm.defer_event(evt);
}
};
-struct Defer_Helper : proto::extends< proto::terminal<fsm_artefact_tag>::type, Defer_Helper, sm_domain>
+struct Defer_Helper : proto::extends< proto::terminal<fsm_artefact_tag>::type, Defer_Helper, boost::msm::sm_domain>
{
Defer_Helper(){}
- using proto::extends< proto::terminal<fsm_artefact_tag>::type, Defer_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<fsm_artefact_tag>::type, Defer_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -1823,10 +1784,10 @@
Defer_Helper const defer_ = Defer_Helper();
struct explicit_tag {};
-struct Explicit_Helper : proto::extends< proto::terminal<explicit_tag>::type, Explicit_Helper, sm_domain>
+struct Explicit_Helper : proto::extends< proto::terminal<explicit_tag>::type, Explicit_Helper, boost::msm::sm_domain>
{
Explicit_Helper(){}
- using proto::extends< proto::terminal<explicit_tag>::type, Explicit_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<explicit_tag>::type, Explicit_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -1840,10 +1801,10 @@
Explicit_Helper const explicit_ = Explicit_Helper();
struct entry_pt_tag {};
-struct Entry_Pt_Helper : proto::extends< proto::terminal<entry_pt_tag>::type, Entry_Pt_Helper, sm_domain>
+struct Entry_Pt_Helper : proto::extends< proto::terminal<entry_pt_tag>::type, Entry_Pt_Helper, boost::msm::sm_domain>
{
Entry_Pt_Helper(){}
- using proto::extends< proto::terminal<entry_pt_tag>::type, Entry_Pt_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<entry_pt_tag>::type, Entry_Pt_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -1857,10 +1818,10 @@
Entry_Pt_Helper const entry_pt_ = Entry_Pt_Helper();
struct exit_pt_tag {};
-struct Exit_Pt_Helper : proto::extends< proto::terminal<exit_pt_tag>::type, Exit_Pt_Helper, sm_domain>
+struct Exit_Pt_Helper : proto::extends< proto::terminal<exit_pt_tag>::type, Exit_Pt_Helper, boost::msm::sm_domain>
{
Exit_Pt_Helper(){}
- using proto::extends< proto::terminal<exit_pt_tag>::type, Exit_Pt_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<exit_pt_tag>::type, Exit_Pt_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -2039,7 +2000,7 @@
,Param4()(evt,fsm,state),Param5()(evt,fsm,state),Param6()(evt,fsm,state));} }; \
struct function_name ## tag{}; \
struct functor ## Helper : proto::extends< proto::terminal< function_name ## tag >::type, \
- functor ## Helper , sm_domain> { functor ## Helper(){} \
+ functor ## Helper , boost::msm::sm_domain> { functor ## Helper(){} \
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5,class Arg6> \
struct In {typedef functor <Arg1,Arg2,Arg3,Arg4,Arg5,Arg6> type;}; }; \
functor ## Helper const function_name = functor ## Helper ();
@@ -2183,14 +2144,14 @@
,Param4()(evt,fsm,src,tgt),Param5()(evt,fsm,src,tgt),Param6()(evt,fsm,src,tgt));} \
template <class Event,class FSM,class STATE> \
typename ::boost::enable_if<typename ::boost::mpl::has_key< \
- typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
+ typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
typename state_action_result<Event,FSM,STATE>::type >::type \
operator()(Event const& evt,FSM& fsm,STATE& state )const { \
return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
,Param4()(evt,fsm,state),Param5()(evt,fsm,state),Param6()(evt,fsm,state));} }; \
struct function_name ## tag{}; \
struct functor ## Helper : proto::extends< proto::terminal< function_name ## tag >::type, \
- functor ## Helper , sm_domain> { functor ## Helper(){} \
+ functor ## Helper , boost::msm::sm_domain> { functor ## Helper(){} \
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5,class Arg6> \
struct In {typedef functor <Arg1,Arg2,Arg3,Arg4,Arg5,Arg6> type;}; }; \
functor ## Helper const function_name = functor ## Helper ();
@@ -2320,7 +2281,7 @@
,Param4()(evt,fsm,state),Param5()(evt,fsm,state));} }; \
struct function_name ## tag{}; \
struct functor ## Helper : proto::extends< proto::terminal< function_name ## tag >::type, \
- functor ## Helper , sm_domain> { functor ## Helper(){} \
+ functor ## Helper , boost::msm::sm_domain> { functor ## Helper(){} \
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5> \
struct In {typedef functor <Arg1,Arg2,Arg3,Arg4,Arg5> type;}; }; \
functor ## Helper const function_name = functor ## Helper ();
@@ -2446,7 +2407,7 @@
,Param4()(evt,fsm,state),Param5()(evt,fsm,state));} }; \
struct function_name ## tag{}; \
struct functor ## Helper : proto::extends< proto::terminal< function_name ## tag >::type, \
- functor ## Helper , sm_domain> { functor ## Helper(){} \
+ functor ## Helper , boost::msm::sm_domain> { functor ## Helper(){} \
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5> \
struct In {typedef functor <Arg1,Arg2,Arg3,Arg4,Arg5> type;}; }; \
functor ## Helper const function_name = functor ## Helper ();
@@ -2630,6 +2591,7 @@
typedef BOOST_TYPEOF(build_sm<instance_name ## tag> expr) instance_name;
#define BOOST_MSM_EUML_DECLARE_TRANSITION_TABLE(expr,instance_name) \
+ typedef int using_declared_table; \
typedef BOOST_TYPEOF(BOOST_MSM_EUML_BUILD_STT_HELPER BOOST_MSM_EUML_BUILD_STT_HELPER2(expr)) instance_name;
#define BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE(expr) \
Modified: branches/quickbook-dev/boost/msm/front/euml/container.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/front/euml/container.hpp (original)
+++ branches/quickbook-dev/boost/msm/front/euml/container.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -65,7 +65,7 @@
};
struct front_tag {};
-struct Front_Helper: proto::extends< proto::terminal<front_tag>::type, Front_Helper, sm_domain>
+struct Front_Helper: proto::extends< proto::terminal<front_tag>::type, Front_Helper, boost::msm::sm_domain>
{
Front_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -120,7 +120,7 @@
};
struct back_tag {};
-struct Back_Helper: proto::extends< proto::terminal<back_tag>::type, Back_Helper, sm_domain>
+struct Back_Helper: proto::extends< proto::terminal<back_tag>::type, Back_Helper, boost::msm::sm_domain>
{
Back_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -175,7 +175,7 @@
};
struct begin_tag {};
-struct Begin_Helper: proto::extends< proto::terminal<begin_tag>::type, Begin_Helper, sm_domain>
+struct Begin_Helper: proto::extends< proto::terminal<begin_tag>::type, Begin_Helper, boost::msm::sm_domain>
{
Begin_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -229,7 +229,7 @@
}
};
struct end_tag {};
-struct End_Helper: proto::extends< proto::terminal<end_tag>::type, End_Helper, sm_domain>
+struct End_Helper: proto::extends< proto::terminal<end_tag>::type, End_Helper, boost::msm::sm_domain>
{
End_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -284,7 +284,7 @@
};
struct rbegin_tag {};
-struct RBegin_Helper: proto::extends< proto::terminal<rbegin_tag>::type, RBegin_Helper, sm_domain>
+struct RBegin_Helper: proto::extends< proto::terminal<rbegin_tag>::type, RBegin_Helper, boost::msm::sm_domain>
{
RBegin_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -338,7 +338,7 @@
}
};
struct rend_tag {};
-struct REnd_Helper: proto::extends< proto::terminal<rend_tag>::type, REnd_Helper, sm_domain>
+struct REnd_Helper: proto::extends< proto::terminal<rend_tag>::type, REnd_Helper, boost::msm::sm_domain>
{
REnd_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -380,7 +380,7 @@
}
};
struct push_back_tag {};
-struct Push_Back_Helper: proto::extends< proto::terminal<push_back_tag>::type, Push_Back_Helper, sm_domain>
+struct Push_Back_Helper: proto::extends< proto::terminal<push_back_tag>::type, Push_Back_Helper, boost::msm::sm_domain>
{
Push_Back_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -422,7 +422,7 @@
}
};
struct pop_back_tag {};
-struct Pop_Back_Helper: proto::extends< proto::terminal<pop_back_tag>::type, Pop_Back_Helper, sm_domain>
+struct Pop_Back_Helper: proto::extends< proto::terminal<pop_back_tag>::type, Pop_Back_Helper, boost::msm::sm_domain>
{
Pop_Back_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -464,7 +464,7 @@
}
};
struct push_front_tag {};
-struct Push_Front_Helper: proto::extends< proto::terminal<push_front_tag>::type, Push_Front_Helper, sm_domain>
+struct Push_Front_Helper: proto::extends< proto::terminal<push_front_tag>::type, Push_Front_Helper, boost::msm::sm_domain>
{
Push_Front_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -506,7 +506,7 @@
}
};
struct pop_front_tag {};
-struct Pop_Front_Helper: proto::extends< proto::terminal<pop_front_tag>::type, Pop_Front_Helper, sm_domain>
+struct Pop_Front_Helper: proto::extends< proto::terminal<pop_front_tag>::type, Pop_Front_Helper, boost::msm::sm_domain>
{
Pop_Front_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -548,7 +548,7 @@
}
};
struct clear_tag {};
-struct Clear_Helper: proto::extends< proto::terminal<clear_tag>::type, Clear_Helper, sm_domain>
+struct Clear_Helper: proto::extends< proto::terminal<clear_tag>::type, Clear_Helper, boost::msm::sm_domain>
{
Clear_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -590,7 +590,7 @@
}
};
struct list_reverse_tag {};
-struct ListReverse_Helper: proto::extends< proto::terminal<list_reverse_tag>::type, ListReverse_Helper, sm_domain>
+struct ListReverse_Helper: proto::extends< proto::terminal<list_reverse_tag>::type, ListReverse_Helper, boost::msm::sm_domain>
{
ListReverse_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -660,7 +660,7 @@
}
};
struct list_unique_tag {};
-struct ListUnique_Helper: proto::extends< proto::terminal<list_unique_tag>::type, ListUnique_Helper, sm_domain>
+struct ListUnique_Helper: proto::extends< proto::terminal<list_unique_tag>::type, ListUnique_Helper, boost::msm::sm_domain>
{
ListUnique_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -730,7 +730,7 @@
}
};
struct list_sort_tag {};
-struct ListSort_Helper: proto::extends< proto::terminal<list_sort_tag>::type, ListSort_Helper, sm_domain>
+struct ListSort_Helper: proto::extends< proto::terminal<list_sort_tag>::type, ListSort_Helper, boost::msm::sm_domain>
{
ListSort_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -784,7 +784,7 @@
}
};
struct capacity_tag {};
-struct Capacity_Helper: proto::extends< proto::terminal<capacity_tag>::type, Capacity_Helper, sm_domain>
+struct Capacity_Helper: proto::extends< proto::terminal<capacity_tag>::type, Capacity_Helper, boost::msm::sm_domain>
{
Capacity_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -838,7 +838,7 @@
}
};
struct size_tag {};
-struct Size_Helper: proto::extends< proto::terminal<size_tag>::type, Size_Helper, sm_domain>
+struct Size_Helper: proto::extends< proto::terminal<size_tag>::type, Size_Helper, boost::msm::sm_domain>
{
Size_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -892,7 +892,7 @@
}
};
struct max_size_tag {};
-struct Max_Size_Helper: proto::extends< proto::terminal<max_size_tag>::type, Max_Size_Helper, sm_domain>
+struct Max_Size_Helper: proto::extends< proto::terminal<max_size_tag>::type, Max_Size_Helper, boost::msm::sm_domain>
{
Max_Size_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -934,7 +934,7 @@
}
};
struct reserve_tag {};
-struct Reserve_Helper: proto::extends< proto::terminal<reserve_tag>::type, Reserve_Helper, sm_domain>
+struct Reserve_Helper: proto::extends< proto::terminal<reserve_tag>::type, Reserve_Helper, boost::msm::sm_domain>
{
Reserve_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1003,7 +1003,7 @@
}
};
struct resize_tag {};
-struct Resize_Helper: proto::extends< proto::terminal<resize_tag>::type, Resize_Helper, sm_domain>
+struct Resize_Helper: proto::extends< proto::terminal<resize_tag>::type, Resize_Helper, boost::msm::sm_domain>
{
Resize_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1186,7 +1186,7 @@
}
};
struct insert_tag {};
-struct Insert_Helper: proto::extends< proto::terminal<insert_tag>::type, Insert_Helper, sm_domain>
+struct Insert_Helper: proto::extends< proto::terminal<insert_tag>::type, Insert_Helper, boost::msm::sm_domain>
{
Insert_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1228,7 +1228,7 @@
}
};
struct swap_tag {};
-struct Swap_Helper: proto::extends< proto::terminal<swap_tag>::type, Swap_Helper, sm_domain>
+struct Swap_Helper: proto::extends< proto::terminal<swap_tag>::type, Swap_Helper, boost::msm::sm_domain>
{
Swap_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1314,7 +1314,7 @@
}
};
struct erase_tag {};
-struct Erase_Helper: proto::extends< proto::terminal<erase_tag>::type, Erase_Helper, sm_domain>
+struct Erase_Helper: proto::extends< proto::terminal<erase_tag>::type, Erase_Helper, boost::msm::sm_domain>
{
Erase_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1356,7 +1356,7 @@
}
};
struct empty_tag {};
-struct Empty_Helper: proto::extends< proto::terminal<empty_tag>::type, Empty_Helper, sm_domain>
+struct Empty_Helper: proto::extends< proto::terminal<empty_tag>::type, Empty_Helper, boost::msm::sm_domain>
{
Empty_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1398,7 +1398,7 @@
}
};
struct list_remove_tag {};
-struct ListRemove_Helper: proto::extends< proto::terminal<list_remove_tag>::type, ListRemove_Helper, sm_domain>
+struct ListRemove_Helper: proto::extends< proto::terminal<list_remove_tag>::type, ListRemove_Helper, boost::msm::sm_domain>
{
ListRemove_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1440,7 +1440,7 @@
}
};
struct list_remove_if_tag {};
-struct ListRemove_If_Helper: proto::extends< proto::terminal<list_remove_if_tag>::type, ListRemove_If_Helper, sm_domain>
+struct ListRemove_If_Helper: proto::extends< proto::terminal<list_remove_if_tag>::type, ListRemove_If_Helper, boost::msm::sm_domain>
{
ListRemove_If_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1510,7 +1510,7 @@
}
};
struct list_merge_tag {};
-struct ListMerge_Helper: proto::extends< proto::terminal<list_merge_tag>::type, ListMerge_Helper, sm_domain>
+struct ListMerge_Helper: proto::extends< proto::terminal<list_merge_tag>::type, ListMerge_Helper, boost::msm::sm_domain>
{
ListMerge_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1623,7 +1623,7 @@
}
};
struct splice_tag {};
-struct Splice_Helper: proto::extends< proto::terminal<splice_tag>::type, Splice_Helper, sm_domain>
+struct Splice_Helper: proto::extends< proto::terminal<splice_tag>::type, Splice_Helper, boost::msm::sm_domain>
{
Splice_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1741,7 +1741,7 @@
};
struct string_find_tag {};
-struct StringFind_Helper: proto::extends< proto::terminal<string_find_tag>::type, StringFind_Helper, sm_domain>
+struct StringFind_Helper: proto::extends< proto::terminal<string_find_tag>::type, StringFind_Helper, boost::msm::sm_domain>
{
StringFind_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1881,7 +1881,7 @@
};
struct string_rfind_tag {};
-struct StringRFind_Helper: proto::extends< proto::terminal<string_rfind_tag>::type, StringRFind_Helper, sm_domain>
+struct StringRFind_Helper: proto::extends< proto::terminal<string_rfind_tag>::type, StringRFind_Helper, boost::msm::sm_domain>
{
StringRFind_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -1994,7 +1994,7 @@
struct string_find_first_of_tag {};
struct StringFindFirstOf_Helper:
- proto::extends< proto::terminal<string_find_first_of_tag>::type, StringFindFirstOf_Helper, sm_domain>
+ proto::extends< proto::terminal<string_find_first_of_tag>::type, StringFindFirstOf_Helper, boost::msm::sm_domain>
{
StringFindFirstOf_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2135,7 +2135,7 @@
struct string_find_first_not_of_tag {};
struct StringFindFirstNotOf_Helper:
- proto::extends< proto::terminal<string_find_first_not_of_tag>::type, StringFindFirstNotOf_Helper, sm_domain>
+ proto::extends< proto::terminal<string_find_first_not_of_tag>::type, StringFindFirstNotOf_Helper, boost::msm::sm_domain>
{
StringFindFirstNotOf_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2276,7 +2276,7 @@
struct string_find_last_of_tag {};
struct StringFindLastOf_Helper:
- proto::extends< proto::terminal<string_find_last_of_tag>::type, StringFindLastOf_Helper, sm_domain>
+ proto::extends< proto::terminal<string_find_last_of_tag>::type, StringFindLastOf_Helper, boost::msm::sm_domain>
{
StringFindLastOf_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2417,7 +2417,7 @@
struct string_find_last_not_of_tag {};
struct StringFindLastNotOf_Helper:
- proto::extends< proto::terminal<string_find_last_of_tag>::type, StringFindLastNotOf_Helper, sm_domain>
+ proto::extends< proto::terminal<string_find_last_of_tag>::type, StringFindLastNotOf_Helper, boost::msm::sm_domain>
{
StringFindLastNotOf_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2594,7 +2594,7 @@
};
struct associative_erase_tag {};
-struct Associative_Erase_Helper: proto::extends< proto::terminal<associative_erase_tag>::type, Associative_Erase_Helper, sm_domain>
+struct Associative_Erase_Helper: proto::extends< proto::terminal<associative_erase_tag>::type, Associative_Erase_Helper, boost::msm::sm_domain>
{
Associative_Erase_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2650,7 +2650,7 @@
};
struct associative_find_tag {};
-struct Associative_Find_Helper: proto::extends< proto::terminal<associative_find_tag>::type, Associative_Find_Helper, sm_domain>
+struct Associative_Find_Helper: proto::extends< proto::terminal<associative_find_tag>::type, Associative_Find_Helper, boost::msm::sm_domain>
{
Associative_Find_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2704,7 +2704,7 @@
}
};
struct associative_count_tag {};
-struct AssociativeCount_Helper: proto::extends< proto::terminal<associative_count_tag>::type, AssociativeCount_Helper, sm_domain>
+struct AssociativeCount_Helper: proto::extends< proto::terminal<associative_count_tag>::type, AssociativeCount_Helper, boost::msm::sm_domain>
{
AssociativeCount_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2760,7 +2760,7 @@
struct associative_lower_bound_tag {};
struct Associative_Lower_Bound_Helper: proto::extends< proto::terminal<associative_lower_bound_tag>::type,
- Associative_Lower_Bound_Helper, sm_domain>
+ Associative_Lower_Bound_Helper, boost::msm::sm_domain>
{
Associative_Lower_Bound_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2816,7 +2816,7 @@
struct associative_upper_bound_tag {};
struct Associative_Upper_Bound_Helper: proto::extends< proto::terminal<associative_upper_bound_tag>::type,
- Associative_Upper_Bound_Helper, sm_domain>
+ Associative_Upper_Bound_Helper, boost::msm::sm_domain>
{
Associative_Upper_Bound_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2871,7 +2871,7 @@
};
struct first_tag {};
-struct First_Helper: proto::extends< proto::terminal<first_tag>::type, First_Helper, sm_domain>
+struct First_Helper: proto::extends< proto::terminal<first_tag>::type, First_Helper, boost::msm::sm_domain>
{
First_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2926,7 +2926,7 @@
};
struct second_tag {};
-struct Second_Helper: proto::extends< proto::terminal<second_tag>::type, Second_Helper, sm_domain>
+struct Second_Helper: proto::extends< proto::terminal<second_tag>::type, Second_Helper, boost::msm::sm_domain>
{
Second_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -2990,7 +2990,7 @@
struct associative_equal_range_tag {};
struct Associative_Equal_Range_Helper: proto::extends< proto::terminal<associative_equal_range_tag>::type,
- Associative_Equal_Range_Helper, sm_domain>
+ Associative_Equal_Range_Helper, boost::msm::sm_domain>
{
Associative_Equal_Range_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3102,7 +3102,7 @@
}
};
struct substr_tag {};
-struct Substr_Helper: proto::extends< proto::terminal<substr_tag>::type, Substr_Helper, sm_domain>
+struct Substr_Helper: proto::extends< proto::terminal<substr_tag>::type, Substr_Helper, boost::msm::sm_domain>
{
Substr_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3264,7 +3264,7 @@
};
struct string_compare_tag {};
-struct StringCompare_Helper: proto::extends< proto::terminal<string_compare_tag>::type, StringCompare_Helper, sm_domain>
+struct StringCompare_Helper: proto::extends< proto::terminal<string_compare_tag>::type, StringCompare_Helper, boost::msm::sm_domain>
{
StringCompare_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3388,7 +3388,7 @@
};
struct append_tag {};
-struct Append_Helper: proto::extends< proto::terminal<append_tag>::type, Append_Helper, sm_domain>
+struct Append_Helper: proto::extends< proto::terminal<append_tag>::type, Append_Helper, boost::msm::sm_domain>
{
Append_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3513,7 +3513,7 @@
};
struct string_insert_tag {};
-struct StringInsert_Helper: proto::extends< proto::terminal<string_insert_tag>::type, StringInsert_Helper, sm_domain>
+struct StringInsert_Helper: proto::extends< proto::terminal<string_insert_tag>::type, StringInsert_Helper, boost::msm::sm_domain>
{
StringInsert_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3620,7 +3620,7 @@
};
struct string_erase_tag {};
-struct StringErase_Helper: proto::extends< proto::terminal<string_erase_tag>::type, StringErase_Helper, sm_domain>
+struct StringErase_Helper: proto::extends< proto::terminal<string_erase_tag>::type, StringErase_Helper, boost::msm::sm_domain>
{
StringErase_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3744,7 +3744,7 @@
}
};
struct assign_tag {};
-struct StringAssign_Helper: proto::extends< proto::terminal<assign_tag>::type, StringAssign_Helper, sm_domain>
+struct StringAssign_Helper: proto::extends< proto::terminal<assign_tag>::type, StringAssign_Helper, boost::msm::sm_domain>
{
StringAssign_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3835,7 +3835,7 @@
};
struct string_replace_tag {};
-struct StringReplace_Helper: proto::extends< proto::terminal<string_replace_tag>::type, StringReplace_Helper, sm_domain>
+struct StringReplace_Helper: proto::extends< proto::terminal<string_replace_tag>::type, StringReplace_Helper, boost::msm::sm_domain>
{
StringReplace_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3891,7 +3891,7 @@
}
};
struct c_str_tag {};
-struct CStr_Helper: proto::extends< proto::terminal<c_str_tag>::type, CStr_Helper, sm_domain>
+struct CStr_Helper: proto::extends< proto::terminal<c_str_tag>::type, CStr_Helper, boost::msm::sm_domain>
{
CStr_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -3947,7 +3947,7 @@
}
};
struct string_data_tag {};
-struct StringData_Helper: proto::extends< proto::terminal<string_data_tag>::type, StringData_Helper, sm_domain>
+struct StringData_Helper: proto::extends< proto::terminal<string_data_tag>::type, StringData_Helper, boost::msm::sm_domain>
{
StringData_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -4048,7 +4048,7 @@
};
struct string_copy_tag {};
-struct StringCopy_Helper: proto::extends< proto::terminal<string_copy_tag>::type, StringCopy_Helper, sm_domain>
+struct StringCopy_Helper: proto::extends< proto::terminal<string_copy_tag>::type, StringCopy_Helper, boost::msm::sm_domain>
{
StringCopy_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
Modified: branches/quickbook-dev/boost/msm/front/euml/operator.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/front/euml/operator.hpp (original)
+++ branches/quickbook-dev/boost/msm/front/euml/operator.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -157,10 +157,10 @@
struct if_tag
{
};
-struct If : proto::extends<proto::terminal<if_tag>::type, If, sm_domain>
+struct If : proto::extends<proto::terminal<if_tag>::type, If, boost::msm::sm_domain>
{
If(){}
- using proto::extends< proto::terminal<if_tag>::type, If, sm_domain>::operator=;
+ using proto::extends< proto::terminal<if_tag>::type, If, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -256,10 +256,10 @@
struct if_then_tag
{
};
-struct If_Then : proto::extends< proto::terminal<if_then_tag>::type, If_Then, sm_domain>
+struct If_Then : proto::extends< proto::terminal<if_then_tag>::type, If_Then, boost::msm::sm_domain>
{
If_Then(){}
- using proto::extends< proto::terminal<if_then_tag>::type, If_Then, sm_domain>::operator=;
+ using proto::extends< proto::terminal<if_then_tag>::type, If_Then, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -312,10 +312,10 @@
struct while_do_tag
{
};
-struct While_Do_Helper : proto::extends< proto::terminal<while_do_tag>::type, While_Do_Helper, sm_domain>
+struct While_Do_Helper : proto::extends< proto::terminal<while_do_tag>::type, While_Do_Helper, boost::msm::sm_domain>
{
While_Do_Helper(){}
- using proto::extends< proto::terminal<while_do_tag>::type, While_Do_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<while_do_tag>::type, While_Do_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -368,10 +368,10 @@
struct do_while_tag
{
};
-struct Do_While_Helper : proto::extends< proto::terminal<do_while_tag>::type, Do_While_Helper, sm_domain>
+struct Do_While_Helper : proto::extends< proto::terminal<do_while_tag>::type, Do_While_Helper, boost::msm::sm_domain>
{
Do_While_Helper(){}
- using proto::extends< proto::terminal<do_while_tag>::type, Do_While_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<do_while_tag>::type, Do_While_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
@@ -426,10 +426,10 @@
struct for_loop_tag
{
};
-struct For_Loop_Helper : proto::extends< proto::terminal<for_loop_tag>::type, For_Loop_Helper, sm_domain>
+struct For_Loop_Helper : proto::extends< proto::terminal<for_loop_tag>::type, For_Loop_Helper, boost::msm::sm_domain>
{
For_Loop_Helper(){}
- using proto::extends< proto::terminal<for_loop_tag>::type, For_Loop_Helper, sm_domain>::operator=;
+ using proto::extends< proto::terminal<for_loop_tag>::type, For_Loop_Helper, boost::msm::sm_domain>::operator=;
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
#ifdef BOOST_MSVC
,class Arg6
Modified: branches/quickbook-dev/boost/msm/front/euml/state_grammar.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/front/euml/state_grammar.hpp (original)
+++ branches/quickbook-dev/boost/msm/front/euml/state_grammar.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -562,13 +562,13 @@
{};
// attributes building
-#define BOOST_MSM_EUML_DECLARE_ATTRIBUTE(attr_type,attr_name) \
-struct attr_name ## _ \
- : proto::extends< proto::terminal<msm::front::action_tag>::type, attr_name ## _, sm_domain> \
- {typedef attr_name ## _ action_name; \
- typedef ::boost::fusion::pair<attr_name ## _,attr_type> attribute_type; \
- attr_name ## _ (){} \
- }; \
+#define BOOST_MSM_EUML_DECLARE_ATTRIBUTE(attr_type,attr_name) \
+struct attr_name ## _ \
+ : proto::extends< proto::terminal< ::boost::msm::front::action_tag>::type, attr_name ## _, boost::msm::sm_domain> \
+ {typedef attr_name ## _ action_name; \
+ typedef ::boost::fusion::pair<attr_name ## _,attr_type> attribute_type; \
+ attr_name ## _ (){} \
+ }; \
attr_name ## _ const attr_name = attr_name ## _();
struct make_attributes_tag
@@ -597,7 +597,7 @@
BOOST_PROTO_BASIC_EXTENDS(
proto::terminal<make_attributes_tag>::type
, attribute
- , sm_domain
+ , boost::msm::sm_domain
)
typedef ::boost::fusion::pair<int,int> attribute_type;
};
@@ -668,7 +668,7 @@
BOOST_PROTO_BASIC_EXTENDS(
proto::terminal<make_configure_tag>::type
, configure
- , sm_domain
+ , boost::msm::sm_domain
)
};
@@ -700,7 +700,7 @@
BOOST_PROTO_BASIC_EXTENDS(
proto::terminal<state_tag>::type
, define_init
- , sm_domain
+ , boost::msm::sm_domain
)
};
Modified: branches/quickbook-dev/boost/msm/front/euml/transformation.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/front/euml/transformation.hpp (original)
+++ branches/quickbook-dev/boost/msm/front/euml/transformation.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -107,7 +107,7 @@
};
struct back_inserter_tag {};
-struct BackInserter_Helper: proto::extends< proto::terminal<back_inserter_tag>::type, BackInserter_Helper, sm_domain>
+struct BackInserter_Helper: proto::extends< proto::terminal<back_inserter_tag>::type, BackInserter_Helper, boost::msm::sm_domain>
{
BackInserter_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -162,7 +162,7 @@
};
struct front_inserter_tag {};
-struct FrontInserter_Helper: proto::extends< proto::terminal<front_inserter_tag>::type, FrontInserter_Helper, sm_domain>
+struct FrontInserter_Helper: proto::extends< proto::terminal<front_inserter_tag>::type, FrontInserter_Helper, boost::msm::sm_domain>
{
FrontInserter_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -217,7 +217,7 @@
};
struct inserter_tag {};
-struct Inserter_Helper: proto::extends< proto::terminal<inserter_tag>::type, Inserter_Helper, sm_domain>
+struct Inserter_Helper: proto::extends< proto::terminal<inserter_tag>::type, Inserter_Helper, boost::msm::sm_domain>
{
Inserter_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
@@ -315,7 +315,7 @@
}
};
struct transform_tag {};
-struct Transform_Helper: proto::extends< proto::terminal<transform_tag>::type, Transform_Helper, sm_domain>
+struct Transform_Helper: proto::extends< proto::terminal<transform_tag>::type, Transform_Helper, boost::msm::sm_domain>
{
Transform_Helper(){}
template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
Modified: branches/quickbook-dev/boost/msm/front/state_machine_def.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/front/state_machine_def.hpp (original)
+++ branches/quickbook-dev/boost/msm/front/state_machine_def.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -197,7 +197,7 @@
protected:
// Default no-transition handler. Can be replaced in the Derived SM class.
template <class FSM,class Event>
- void no_transition(Event const& ,FSM&, int state)
+ void no_transition(Event const& ,FSM&, int )
{
BOOST_ASSERT(false);
}
Modified: branches/quickbook-dev/boost/msm/msm_grammar.hpp
==============================================================================
--- branches/quickbook-dev/boost/msm/msm_grammar.hpp (original)
+++ branches/quickbook-dev/boost/msm/msm_grammar.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,6 +11,7 @@
#ifndef BOOST_MSM_GRAMMAR_H
#define BOOST_MSM_GRAMMAR_H
+#include <boost/proto/core.hpp>
#include <boost/msm/common.hpp>
@@ -41,6 +42,45 @@
{}
};
+// grammar forbidding address of for terminals
+struct terminal_grammar : proto::not_<proto::address_of<proto::_> >
+{};
+
+// Forward-declare an expression wrapper
+template<typename Expr>
+struct euml_terminal;
+
+struct sm_domain
+ : proto::domain< proto::generator<euml_terminal>, terminal_grammar, boost::msm::msm_domain >
+{};
+
+struct state_grammar :
+ proto::and_<
+ proto::not_<proto::address_of<proto::_> >,
+ proto::not_<proto::shift_right<proto::_,proto::_> >,
+ proto::not_<proto::shift_left<proto::_,proto::_> >,
+ proto::not_<proto::bitwise_and<proto::_,proto::_> >
+ >
+{};
+struct state_domain
+ : proto::domain< proto::generator<euml_terminal>, boost::msm::state_grammar,boost::msm::sm_domain >
+{};
+
+template<typename Expr>
+struct euml_terminal
+ : proto::extends<Expr, euml_terminal<Expr>, boost::msm::sm_domain>
+{
+ typedef
+ proto::extends<Expr, euml_terminal<Expr>, boost::msm::sm_domain>
+ base_type;
+ // Needs a constructor
+ euml_terminal(Expr const &e = Expr())
+ : base_type(e)
+ {}
+ // Unhide Proto's overloaded assignment operator
+ using base_type::operator=;
+};
+
} } // boost::msm
#endif //BOOST_MSM_GRAMMAR_H
Modified: branches/quickbook-dev/boost/numeric/conversion/converter_policies.hpp
==============================================================================
--- branches/quickbook-dev/boost/numeric/conversion/converter_policies.hpp (original)
+++ branches/quickbook-dev/boost/numeric/conversion/converter_policies.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,6 +13,7 @@
#include <typeinfo> // for std::bad_cast
#include <boost/config/no_tr1/cmath.hpp> // for std::floor and std::ceil
+#include <boost/throw_exception.hpp>
#include <functional>
@@ -158,10 +159,17 @@
{
void operator() ( range_check_result r ) // throw(negative_overflow,positive_overflow)
{
+#ifndef BOOST_NO_EXCEPTIONS
if ( r == cNegOverflow )
throw negative_overflow() ;
else if ( r == cPosOverflow )
throw positive_overflow() ;
+#else
+ if ( r == cNegOverflow )
+ ::boost::throw_exception(negative_overflow()) ;
+ else if ( r == cPosOverflow )
+ ::boost::throw_exception(positive_overflow()) ;
+#endif
}
} ;
Modified: branches/quickbook-dev/boost/numeric/conversion/detail/numeric_cast_traits.hpp
==============================================================================
--- branches/quickbook-dev/boost/numeric/conversion/detail/numeric_cast_traits.hpp (original)
+++ branches/quickbook-dev/boost/numeric/conversion/detail/numeric_cast_traits.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,26 +1,32 @@
//
-//! Copyright (c) 2011
+//! Copyright (c) 2011-2012
//! Brandon Kohn
//
// Distributed under 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)
//
+
#if !defined(BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES)
- #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits.hpp>
+
+ #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp>
+
+ #if !defined(BOOST_NO_LONG_LONG)
+ #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp>
+ #endif
+
#else
#if !BOOST_PP_IS_ITERATING
- #include <boost/preprocessor/iteration/iterate.hpp>
#include <boost/preprocessor/seq/elem.hpp>
#include <boost/preprocessor/seq/size.hpp>
-
+ #include <boost/preprocessor/iteration/iterate.hpp>
+
#if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
- #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits.hpp")
+ #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits_common.hpp")
#endif
-
//
-//! Copyright (c) 2011
+//! Copyright (c) 2011-2012
//! Brandon Kohn
//
// Distributed under the Boost Software License, Version 1.0. (See
@@ -30,41 +36,29 @@
#if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
-
- //! Generate the specializations for the built-in types.
- #if !defined( BOOST_NO_INT64_T )
- #define BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES() \
- (char) \
- (boost::int8_t) \
- (boost::uint8_t) \
- (boost::int16_t) \
- (boost::uint16_t) \
- (boost::int32_t) \
- (boost::uint32_t) \
- (boost::int64_t) \
- (boost::uint64_t) \
- (float) \
- (double) \
- (long double) \
- /***/
- #else
- #define BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES() \
- (char) \
- (boost::int8_t) \
- (boost::uint8_t) \
- (boost::int16_t) \
- (boost::uint16_t) \
- (boost::int32_t) \
- (boost::uint32_t) \
- (float) \
- (double) \
- (long double) \
- /***/
- #endif
+
+ //! These are the assumed common built in fundamental types (not typedefs/macros.)
+ #define BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() \
+ (char) \
+ (signed char) \
+ (unsigned char) \
+ (short) \
+ (unsigned short) \
+ (int) \
+ (unsigned int) \
+ (long) \
+ (unsigned long) \
+ (float) \
+ (double) \
+ (long double) \
+ /***/
+
+ #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()
+ #define BOOST_NUMERIC_CONVERSION_SEQ_B() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()
namespace boost { namespace numeric {
- #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
+ #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
#include BOOST_PP_ITERATE()
}}//namespace boost::numeric;
@@ -72,14 +66,53 @@
#if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
+
+ #if ( defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) ) || !defined(BOOST_NO_LONG_LONG)
+
+ #undef BOOST_NUMERIC_CONVERSION_SEQ_A
+ #undef BOOST_NUMERIC_CONVERSION_SEQ_B
+
+ #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+ #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits_long_long.hpp")
+ #endif
+
+//
+//! Copyright (c) 2011-2012
+//! Brandon Kohn
+//
+// Distributed under 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)
+//
+ #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+ #pragma wave option(preserve: 1)
+ #endif
- #undef BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES
+namespace boost { namespace numeric {
+ #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()(boost::long_long_type)(boost::ulong_long_type)
+ #define BOOST_NUMERIC_CONVERSION_SEQ_B() (boost::long_long_type)(boost::ulong_long_type)
+
+ #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
+ #include BOOST_PP_ITERATE()
+
+}}//namespace boost::numeric;
+
+ #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+ #pragma wave option(output: null)
+ #endif
+
+ #endif
+
+ #undef BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES
+ #undef BOOST_NUMERIC_CONVERSION_SEQ_A
+ #undef BOOST_NUMERIC_CONVERSION_SEQ_B
+
#elif BOOST_PP_ITERATION_DEPTH() == 1
- #define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
- #include BOOST_PP_ITERATE()
-
+ #define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_B())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
+ #include BOOST_PP_ITERATE()
+
#elif BOOST_PP_ITERATION_DEPTH() == 2
//! Generate default traits for the specified source and target.
@@ -89,13 +122,13 @@
template <>
struct numeric_cast_traits
<
- BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_A, BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())
- , BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())
+ BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_A, BOOST_NUMERIC_CONVERSION_SEQ_A())
+ , BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B())
>
{
typedef def_overflow_handler overflow_policy;
typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())> rounding_policy;
+ typedef Trunc<BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B())> rounding_policy;
};
#undef BOOST_NUMERIC_CONVERSION_A
Deleted: branches/quickbook-dev/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits.hpp
==============================================================================
--- branches/quickbook-dev/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,1751 +0,0 @@
-//
-//! Copyright (c) 2011
-//! Brandon Kohn
-//
-// Distributed under 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)
-//
-
-namespace boost { namespace numeric {
-
- template <>
- struct numeric_cast_traits
- <
- char
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- char
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int8_t
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint8_t
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int16_t
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint16_t
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int32_t
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint32_t
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::int64_t
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- boost::uint64_t
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- float
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- float
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- double
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- double
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , char
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<char> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , boost::int8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , boost::uint8_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint8_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , boost::int16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , boost::uint16_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint16_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , boost::int32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , boost::uint32_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint32_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , boost::int64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::int64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , boost::uint64_t
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<boost::uint64_t> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , float
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<float> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<double> rounding_policy;
- };
-
- template <>
- struct numeric_cast_traits
- <
- long double
- , long double
- >
- {
- typedef def_overflow_handler overflow_policy;
- typedef UseInternalRangeChecker range_checking_policy;
- typedef Trunc<long double> rounding_policy;
- };
-
-}}
Modified: branches/quickbook-dev/boost/numeric/interval/detail/msvc_rounding_control.hpp
==============================================================================
--- branches/quickbook-dev/boost/numeric/interval/detail/msvc_rounding_control.hpp (original)
+++ branches/quickbook-dev/boost/numeric/interval/detail/msvc_rounding_control.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -25,7 +25,7 @@
namespace interval_lib {
namespace detail {
-#if BOOST_MSVC < 1400 || defined(WIN64)
+#if BOOST_MSVC < 1400 || defined(_WIN64)
extern "C" { double rint(double); }
#else
inline double rint(double x)
Modified: branches/quickbook-dev/boost/random/discrete_distribution.hpp
==============================================================================
--- branches/quickbook-dev/boost/random/discrete_distribution.hpp (original)
+++ branches/quickbook-dev/boost/random/discrete_distribution.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -25,7 +25,7 @@
#include <boost/random/detail/operators.hpp>
#include <boost/random/detail/vector_io.hpp>
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
#include <initializer_list>
#endif
@@ -69,7 +69,7 @@
{
normalize();
}
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
/**
* If wl.size() == 0, equivalent to the default constructor.
* Otherwise, the values of the @c initializer_list represent
@@ -190,7 +190,7 @@
{
init(first, last);
}
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
/**
* Constructs a @c discrete_distribution from a @c std::initializer_list.
* If the @c initializer_list is empty, equivalent to the default
Modified: branches/quickbook-dev/boost/random/piecewise_constant_distribution.hpp
==============================================================================
--- branches/quickbook-dev/boost/random/piecewise_constant_distribution.hpp (original)
+++ branches/quickbook-dev/boost/random/piecewise_constant_distribution.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,7 +22,7 @@
#include <boost/random/detail/operators.hpp>
#include <boost/random/detail/vector_io.hpp>
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
#include <initializer_list>
#endif
@@ -84,7 +84,7 @@
}
}
}
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
/**
* Constructs a @c param_type object from an
* initializer_list containing the interval boundaries
@@ -271,7 +271,7 @@
_bins.param(bins_param);
}
}
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
/**
* Constructs a piecewise_constant_distribution from an
* initializer_list containing the interval boundaries
Modified: branches/quickbook-dev/boost/random/piecewise_linear_distribution.hpp
==============================================================================
--- branches/quickbook-dev/boost/random/piecewise_linear_distribution.hpp (original)
+++ branches/quickbook-dev/boost/random/piecewise_linear_distribution.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,7 +24,7 @@
#include <boost/random/detail/operators.hpp>
#include <boost/random/detail/vector_io.hpp>
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
#include <initializer_list>
#endif
@@ -89,7 +89,7 @@
}
}
}
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
/**
* Constructs a @c param_type object from an initializer_list
* containing the interval boundaries and a unary function
@@ -278,7 +278,7 @@
init();
}
}
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
/**
* Constructs a piecewise_linear_distribution from an
* initializer_list containing the interval boundaries
Modified: branches/quickbook-dev/boost/random/seed_seq.hpp
==============================================================================
--- branches/quickbook-dev/boost/random/seed_seq.hpp (original)
+++ branches/quickbook-dev/boost/random/seed_seq.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,7 +23,7 @@
#include <algorithm>
#include <iterator>
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
#include <initializer_list>
#endif
@@ -42,7 +42,7 @@
/** Initializes a seed_seq to hold an empty sequence. */
seed_seq() {}
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
/** Initializes the sequence from an initializer_list. */
template<class T>
seed_seq(const std::initializer_list<T>& il) : v(il.begin(), il.end()) {}
Modified: branches/quickbook-dev/boost/regex/pending/object_cache.hpp
==============================================================================
--- branches/quickbook-dev/boost/regex/pending/object_cache.hpp (original)
+++ branches/quickbook-dev/boost/regex/pending/object_cache.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -151,7 +151,7 @@
--s;
}
else
- --pos;
+ ++pos;
}
BOOST_ASSERT(s_data.index[k]->first.get() == result.get());
BOOST_ASSERT(&(s_data.index.find(k)->first) == s_data.cont.back().second);
Modified: branches/quickbook-dev/boost/scope_exit.hpp
==============================================================================
--- branches/quickbook-dev/boost/scope_exit.hpp (original)
+++ branches/quickbook-dev/boost/scope_exit.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,122 +1,111 @@
-// Copyright Alexander Nasonov 2006-2009, 2011
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#ifndef FILE_boost_scope_exit_hpp_INCLUDED
#define FILE_boost_scope_exit_hpp_INCLUDED
-#include <boost/config.hpp>
-
-#if !defined(BOOST_NO_LAMBDAS) \
- && !defined(BOOST_NO_AUTO_DECLARATIONS) \
- && !defined(BOOST_SCOPE_EXIT_FORCE_CXX98)
-#define BOOST_SCOPE_EXIT_AUX_CXX0X
-#endif
-
-#if defined(BOOST_SCOPE_EXIT_AUX_CXX0X)
-
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/seq/enum.hpp>
-
-namespace boost { namespace scope_exit { namespace aux {
-
-template<class F>
-struct guard
-{
- F fn_;
- guard(F f) : fn_(f) {}
- ~guard() { fn_(); }
-};
-
-struct guard_maker
-{
- template<class F>
- guard<F> operator%(F f) const
- {
- return guard<F>(f);
- }
-};
-
-} } }
-
-#define BOOST_SCOPE_EXIT_AUX_IMPL(id, seq) \
- auto BOOST_PP_CAT(boost_se_fn_, id) = \
- ::boost::scope_exit::aux::guard_maker() % \
- [BOOST_PP_SEQ_ENUM(seq)]() mutable -> void
-
-#if defined(BOOST_MSVC)
-#define BOOST_SCOPE_EXIT(seq) BOOST_SCOPE_EXIT_AUX_IMPL(__COUNTER__, seq)
-#else
-#define BOOST_SCOPE_EXIT(seq) BOOST_SCOPE_EXIT_AUX_IMPL(__LINE__, seq)
-#endif
-
-#define BOOST_SCOPE_EXIT_TPL(seq) BOOST_SCOPE_EXIT(seq)
-
-#define BOOST_SCOPE_EXIT_END ;
-
-#else
+#ifndef DOXYGEN
+#include <boost/local_function/detail/preprocessor/line_counter.hpp>
+#include <boost/local_function/detail/preprocessor/void_list.hpp>
+#include <boost/local_function/detail/preprocessor/keyword/thisunderscore.hpp>
+#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/function.hpp>
+#include <boost/typeof/typeof.hpp>
#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/punctuation/paren_if.hpp>
#include <boost/preprocessor/seq/cat.hpp>
-#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/preprocessor/tuple/eat.hpp>
+#include <boost/preprocessor/list/append.hpp>
+#include <boost/preprocessor/list/fold_left.hpp>
+#include <boost/preprocessor/list/enum.hpp>
+#include <boost/preprocessor/list/adt.hpp>
+#include <boost/preprocessor/list/for_each_i.hpp>
+
+// PRIVATE/PROTECTED //
+
+// NOTE: AUX prefix and aux namespace mark private symbols that shall be used
+// only within this library; DETAIL prefix and detail namespace mark "protected"
+// symbols that can be used by other Boost libraries but not outside Boost.
+// BOOST_SCOPE_EXIT_AUX_GCC also used in regression tests.
#if defined(__GNUC__) && !defined(BOOST_INTEL)
-# define BOOST_SCOPE_EXIT_AUX_GCC (__GNUC__ * 100 + __GNUC_MINOR__)
+# define BOOST_SCOPE_EXIT_AUX_GCC (__GNUC__ * 100 + __GNUC_MINOR__)
#else
-# define BOOST_SCOPE_EXIT_AUX_GCC 0
+# define BOOST_SCOPE_EXIT_AUX_GCC 0
#endif
#if BOOST_WORKAROUND(BOOST_SCOPE_EXIT_AUX_GCC, BOOST_TESTED_AT(413))
-#define BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND
+# define BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND_01 1
+#else
+# define BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND_01 0
+#endif
+
+// MSVC 7.1=1300, 8.0=1400, 9.0=1500, 10.0=1600 (this workaround was tested at
+// MSVC 8.0 but it might work also for all MVSC >= 7.1).
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) && \
+ !defined(BOOST_TYPEOF_EMULATION) /* doesn't work in typeof-emu mode */
+# define BOOST_SCOPE_EXIT_AUX_TYPEOF_THIS_WORKAROUND_01 1
+#else
+# define BOOST_SCOPE_EXIT_AUX_TYPEOF_THIS_WORKAROUND_01 0
+#endif
+
+#if !defined(BOOST_NO_LAMBDAS) && !defined(BOOST_SCOPE_EXIT_CONFIG_NO_CPP11)
+# define BOOST_SCOPE_EXIT_AUX_LAMBDAS_01 1
+#else
+# define BOOST_SCOPE_EXIT_AUX_LAMBDAS_01 0
#endif
// Steven Watanabe's trick with a modification suggested by Kim Barrett
-namespace boost { namespace scope_exit { namespace aux {
+namespace boost { namespace scope_exit { namespace detail {
- // Type of a local boost_scope_exit_args variable.
- // First use in a local scope will declare the boost_scope_exit_args
- // variable, subsequent uses will be resolved as two comparisons
- // (cmp1 with 0 and cmp2 with boost_scope_exit_args).
- template<int Dummy = 0>
- struct declared
- {
- void* value;
- static int const cmp2 = 0;
- friend void operator>(int, declared const&) {}
- };
+// Type of a local BOOST_SCOPE_EXIT_AUX_ARGS variable.
+// First use in a local scope will declare the BOOST_SCOPE_EXIT_AUX_ARGS
+// variable, subsequent uses will be resolved as two comparisons
+// (cmp1 with 0 and cmp2 with BOOST_SCOPE_EXIT_AUX_ARGS).
+template<int Dummy = 0>
+struct declared
+{
+ void* value;
+ static int const cmp2 = 0;
+ friend void operator>(int, declared const&) {}
+};
- struct undeclared { declared<> dummy[2]; };
+struct undeclared { declared<> dummy[2]; };
- template<int> struct resolve;
+template<int> struct resolve;
- template<>
- struct resolve<sizeof(declared<>)>
- {
- static const int cmp1 = 0;
- };
+template<>
+struct resolve<sizeof(declared<>)>
+{
+ static const int cmp1 = 0;
+};
- template<>
- struct resolve<sizeof(undeclared)>
+template<>
+struct resolve<sizeof(undeclared)>
+{
+ template<int>
+ struct cmp1
{
- template<int>
- struct cmp1
- {
- static int const cmp2 = 0;
- };
+ static int const cmp2 = 0;
};
-} } }
-
-extern boost::scope_exit::aux::undeclared boost_scope_exit_args; // undefined
-
-
-namespace boost { namespace scope_exit { namespace aux {
+};
typedef void (*ref_tag)(int&);
typedef void (*val_tag)(int );
@@ -127,7 +116,7 @@
struct member<T,ref_tag>
{
T& value;
-#ifndef BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND
+#if !BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND_01
member(T& ref) : value(ref) {}
#endif
};
@@ -136,7 +125,7 @@
struct member<T,val_tag>
{
T value;
-#ifndef BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND
+#if !BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND_01
member(T& val) : value(val) {}
#endif
};
@@ -155,163 +144,719 @@
} } }
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::scope_exit::aux::wrapper, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::scope_exit::detail::wrapper, 1)
+
+#define BOOST_SCOPE_EXIT_AUX_ARGS boost_scope_exit_aux_args
+extern boost::scope_exit::detail::undeclared BOOST_SCOPE_EXIT_AUX_ARGS;
+
+#define BOOST_SCOPE_EXIT_AUX_GUARD(id) BOOST_PP_CAT(boost_se_guard_, id)
+#define BOOST_SCOPE_EXIT_AUX_GUARD_T(id) BOOST_PP_CAT(boost_se_guard_t_, id)
+#define BOOST_SCOPE_EXIT_AUX_PARAMS(id) BOOST_PP_CAT(boost_se_params_, id)
+#define BOOST_SCOPE_EXIT_AUX_THIS_T(id) BOOST_PP_CAT(boost_se_this_t_, id)
-#define BOOST_SCOPE_EXIT_AUX_GUARD(id) BOOST_PP_CAT(boost_se_guard_, id)
-#define BOOST_SCOPE_EXIT_AUX_GUARD_T(id) BOOST_PP_CAT(boost_se_guard_t_, id)
-#define BOOST_SCOPE_EXIT_AUX_PARAMS(id) BOOST_PP_CAT(boost_se_params_, id)
-#define BOOST_SCOPE_EXIT_AUX_PARAMS_T(id) BOOST_PP_CAT(boost_se_params_t_, id)
+#define BOOST_SCOPE_EXIT_DETAIL_PARAMS_T(id) \
+ BOOST_PP_CAT(boost_se_params_t_, id)
-#define BOOST_SCOPE_EXIT_AUX_TAG(id, i) \
+#define BOOST_SCOPE_EXIT_DETAIL_TAG(id, i) \
BOOST_PP_SEQ_CAT( (boost_se_tag_)(i)(_)(id) )
-#define BOOST_SCOPE_EXIT_AUX_PARAM(id, i, var) \
+#define BOOST_SCOPE_EXIT_DETAIL_PARAM_THIS(id) \
+ BOOST_PP_SEQ_CAT( (boost_se_param_this_)(id) )
+
+#define BOOST_SCOPE_EXIT_DETAIL_PARAM(id, i, var) \
BOOST_PP_SEQ_CAT( (boost_se_param_)(i)(_)(id) )
-#define BOOST_SCOPE_EXIT_AUX_PARAM_T(id, i, var) \
+#define BOOST_SCOPE_EXIT_DETAIL_PARAM_T(id, i, var) \
BOOST_PP_SEQ_CAT( (boost_se_param_t_)(i)(_)(id) )
-#define BOOST_SCOPE_EXIT_AUX_CAPTURE_T(id, i, var) \
+#define BOOST_SCOPE_EXIT_DETAIL_CAPTURE_T(id, i, var) \
BOOST_PP_SEQ_CAT( (boost_se_capture_t_)(i)(_)(id) )
#define BOOST_SCOPE_EXIT_AUX_WRAPPED(id, i) \
BOOST_PP_SEQ_CAT( (boost_se_wrapped_t_)(i)(_)(id) )
#define BOOST_SCOPE_EXIT_AUX_DEREF(id, i, var) \
- boost::scope_exit::aux::deref(var, (BOOST_SCOPE_EXIT_AUX_TAG(id,i))0)
+ ::boost::scope_exit::detail::deref(var, \
+ static_cast<BOOST_SCOPE_EXIT_DETAIL_TAG(id, i)>(0))
#define BOOST_SCOPE_EXIT_AUX_MEMBER(r, id, i, var) \
- boost::scope_exit::aux::member< \
- BOOST_SCOPE_EXIT_AUX_PARAM_T(id,i,var), \
- BOOST_SCOPE_EXIT_AUX_TAG(id,i) \
- > BOOST_SCOPE_EXIT_AUX_PARAM(id,i,var);
-
-// idty is (id,typename) or (id,BOOST_PP_EMPTY())
-#define BOOST_SCOPE_EXIT_AUX_ARG_DECL(r, idty, i, var) \
- BOOST_PP_COMMA_IF(i) BOOST_PP_TUPLE_ELEM(2,1,idty) \
- BOOST_SCOPE_EXIT_AUX_PARAMS_T(BOOST_PP_TUPLE_ELEM(2,0,idty)):: \
- BOOST_SCOPE_EXIT_AUX_PARAM_T(BOOST_PP_TUPLE_ELEM(2,0,idty), i, var) var
+ ::boost::scope_exit::detail::member< \
+ BOOST_SCOPE_EXIT_DETAIL_PARAM_T(id, i, var), \
+ BOOST_SCOPE_EXIT_DETAIL_TAG(id, i) \
+ > BOOST_SCOPE_EXIT_DETAIL_PARAM(id, i, var);
+
+#define BOOST_SCOPE_EXIT_AUX_ARG_DECL(r, id_ty, i, var) \
+ BOOST_PP_COMMA_IF(i) \
+ BOOST_PP_TUPLE_ELEM(2, 1, id_ty) \
+ BOOST_SCOPE_EXIT_DETAIL_PARAMS_T(BOOST_PP_TUPLE_ELEM(2, 0, id_ty)):: \
+ BOOST_SCOPE_EXIT_DETAIL_PARAM_T(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), \
+ i, var) \
+ var
-#define BOOST_SCOPE_EXIT_AUX_ARG(r, id, i, var) BOOST_PP_COMMA_IF(i) \
- boost_se_params_->BOOST_SCOPE_EXIT_AUX_PARAM(id,i,var).value
-
-#define BOOST_SCOPE_EXIT_AUX_TAG_DECL(r, id, i, var) \
- typedef void (*BOOST_SCOPE_EXIT_AUX_TAG(id,i))(int var);
+#define BOOST_SCOPE_EXIT_AUX_ARG(r, id, i, var) \
+ BOOST_PP_COMMA_IF(i) \
+ boost_se_params_->BOOST_SCOPE_EXIT_DETAIL_PARAM(id, i, var).value
+
+#define BOOST_SCOPE_EXIT_DETAIL_TAG_DECL(r, id, i, var) \
+ typedef void (*BOOST_SCOPE_EXIT_DETAIL_TAG(id, i))(int var);
+
+// Adam Butcher's workaround to deduce `this` type on MSVC revision < 10.
+// Boost.Typeof for VC71's typeid-based workaround does not work to determine
+// `this` type due to error C2355 being incorrectly reported. The typical
+// avoidance strategy implemented below is to make an indirect compile-time
+// constant by assigning an enum and use that as type-index-- this only works
+// with the sizeof() approach and not with the typeid() approach. This does not
+// work in typeof emulation mode.
+#if BOOST_SCOPE_EXIT_AUX_TYPEOF_THIS_WORKAROUND_01
+namespace boost { namespace scope_exit { namespace aux {
+ namespace msvc_typeof_this {
+
+template<int Id>
+struct msvc_typeid_wrapper
+{
+ typedef typename boost::type_of::msvc_extract_type<boost::mpl::int_<Id>
+ >::id2type id2type;
+ typedef typename id2type::type type;
+};
-#ifdef BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND
+template<>
+struct msvc_typeid_wrapper<4>
+{
+ typedef msvc_typeid_wrapper<4> type;
+};
-#define BOOST_SCOPE_EXIT_AUX_PARAMS_T_CTOR(id, seq)
+template<typename T>
+struct encode_type
+{
+ BOOST_STATIC_CONSTANT(unsigned,
+ value = boost::type_of::encode_counter<T>::count);
+ typedef typename boost::type_of::msvc_register_type<T,
+ boost::mpl::int_<value> >::id2type type;
+ BOOST_STATIC_CONSTANT(unsigned, next = value + 1);
+};
-#define BOOST_SCOPE_EXIT_AUX_PARAM_INIT(r, id, i, var) \
- BOOST_PP_COMMA_IF(i) { BOOST_SCOPE_EXIT_AUX_DEREF(id,i,var) }
+template<class T>
+struct sizer
+{
+ typedef char(*type)[encode_type<T>::value];
+};
-#define BOOST_SCOPE_EXIT_AUX_PARAMS_INIT(id, seq) \
- = { BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_PARAM_INIT, id, seq) };
+template<typename T>
+typename boost::disable_if<
+ typename boost::is_function<T>::type
+ , typename sizer<T>::type
+>::type encode_start(T const&);
+
+template<typename T>
+typename boost::enable_if<
+ typename boost::is_function<T>::type
+ , typename sizer<T>::type
+>::type encode_start(T&);
+
+template<typename Organizer, typename T>
+boost::type_of::msvc_register_type<T, Organizer> typeof_register_type(const T&,
+ Organizer* = 0);
+
+} } } }
+
+#define BOOST_SCOPE_EXIT_AUX_TYPEDEF_TYPEOF_THIS_INDEX_(id) \
+ BOOST_PP_CAT(boost_se_thistype_index_, id)
+
+#define BOOST_SCOPE_EXIT_DETAIL_TYPEDEF_TYPEOF_THIS(id, new_type) \
+ enum { \
+ BOOST_SCOPE_EXIT_AUX_TYPEDEF_TYPEOF_THIS_INDEX_(id) = sizeof( \
+ *::boost::scope_exit::aux::msvc_typeof_this::encode_start(this)) \
+ }; \
+ typedef ::boost::scope_exit::aux::msvc_typeof_this::msvc_typeid_wrapper< \
+ BOOST_SCOPE_EXIT_AUX_TYPEDEF_TYPEOF_THIS_INDEX_(id) \
+ >::type new_type;
+
+#else // TYPEOF_THIS_WORKAROUND
+
+#define BOOST_SCOPE_EXIT_DETAIL_TYPEDEF_TYPEOF_THIS(id, new_type) \
+ typedef BOOST_TYPEOF(this) new_type;
+
+#endif // TYPEOF_THIS_WORKAROUND
+
+#if BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND_01
+
+#define BOOST_SCOPE_EXIT_AUX_PARAMS_T_CTOR(id, captures, has_this)
+
+#define BOOST_SCOPE_EXIT_DETAIL_PARAM_INIT(r, id, i, var) \
+ BOOST_PP_COMMA_IF(i) { BOOST_SCOPE_EXIT_AUX_DEREF(id, i, var) }
+
+#define BOOST_SCOPE_EXIT_AUX_PARAMS_INIT(id, captures, has_this) \
+ BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(captures), = { ) \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_DETAIL_PARAM_INIT, id, \
+ captures) \
+ BOOST_PP_COMMA_IF(BOOST_PP_BITAND(BOOST_PP_LIST_IS_CONS(captures), \
+ has_this)) \
+ BOOST_PP_EXPR_IIF(has_this, this) /* no extra {...} needed here */ \
+ BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(captures), } )
#else
-#define BOOST_SCOPE_EXIT_AUX_CTOR_ARG(r, id, i, var) BOOST_PP_COMMA_IF(i) \
- BOOST_SCOPE_EXIT_AUX_PARAM_T(id,i,var) & BOOST_PP_CAT(a,i)
+#define BOOST_SCOPE_EXIT_AUX_CTOR_ARG(r, id, i, var) \
+ BOOST_PP_COMMA_IF(i) \
+ BOOST_SCOPE_EXIT_DETAIL_PARAM_T(id, i, var) & BOOST_PP_CAT(a, i)
+
+#define BOOST_SCOPE_EXIT_AUX_MEMBER_INIT(r, id, i, var) \
+ BOOST_PP_COMMA_IF(i) \
+ BOOST_SCOPE_EXIT_DETAIL_PARAM(id, i, var) ( BOOST_PP_CAT(a, i) )
+
+#define BOOST_SCOPE_EXIT_AUX_CTOR_ARG_THIS(id, comma01) \
+ BOOST_PP_COMMA_IF(comma01) \
+ BOOST_SCOPE_EXIT_AUX_THIS_T(id) /* ptr type so no & */ a_this
+
+#define BOOST_SCOPE_EXIT_AUX_MEMBER_THIS_INIT(id, comma01) \
+ BOOST_PP_COMMA_IF(comma01) \
+ BOOST_SCOPE_EXIT_DETAIL_PARAM_THIS(id) ( a_this )
+
+#define BOOST_SCOPE_EXIT_AUX_PARAMS_T_CTOR(id, captures, has_this) \
+ BOOST_SCOPE_EXIT_DETAIL_PARAMS_T(id)( \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_CTOR_ARG, id, captures) \
+ BOOST_PP_IIF(has_this, \
+ BOOST_SCOPE_EXIT_AUX_CTOR_ARG_THIS \
+ , \
+ BOOST_PP_TUPLE_EAT(2) \
+ )(id, BOOST_PP_LIST_IS_CONS(captures)) \
+ ) \
+ BOOST_PP_EXPR_IIF(BOOST_PP_BITOR(BOOST_PP_LIST_IS_CONS(captures), \
+ has_this), \
+ : \
+ ) \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_MEMBER_INIT, id, \
+ captures) \
+ BOOST_PP_IIF(has_this, \
+ BOOST_SCOPE_EXIT_AUX_MEMBER_THIS_INIT \
+ , \
+ BOOST_PP_TUPLE_EAT(2) \
+ )(id, BOOST_PP_LIST_IS_CONS(captures)) \
+ {}
-#define BOOST_SCOPE_EXIT_AUX_MEMBER_INIT(r, id, i, var) BOOST_PP_COMMA_IF(i) \
- BOOST_SCOPE_EXIT_AUX_PARAM(id,i,var) ( BOOST_PP_CAT(a,i) )
-
-#define BOOST_SCOPE_EXIT_AUX_PARAMS_T_CTOR(id, seq) \
- BOOST_SCOPE_EXIT_AUX_PARAMS_T(id)( \
- BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_CTOR_ARG, id, seq ) ) \
- : BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_MEMBER_INIT, id, seq) {}
-
-#define BOOST_SCOPE_EXIT_AUX_PARAM_INIT(r, id, i, var) \
+#define BOOST_SCOPE_EXIT_DETAIL_PARAM_INIT(r, id, i, var) \
BOOST_PP_COMMA_IF(i) BOOST_SCOPE_EXIT_AUX_DEREF(id,i,var)
-#define BOOST_SCOPE_EXIT_AUX_PARAMS_INIT(id, seq) \
- ( BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_PARAM_INIT, id, seq) );
+#define BOOST_SCOPE_EXIT_AUX_PARAMS_INIT(id, captures, has_this) \
+ BOOST_PP_LPAREN_IF(BOOST_PP_LIST_IS_CONS(captures)) \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_DETAIL_PARAM_INIT, id, \
+ captures)\
+ BOOST_PP_COMMA_IF(BOOST_PP_BITAND(BOOST_PP_LIST_IS_CONS(captures), \
+ has_this)) \
+ BOOST_PP_EXPR_IIF(has_this, this) \
+ BOOST_PP_RPAREN_IF(BOOST_PP_LIST_IS_CONS(captures))
#endif
#if defined(BOOST_TYPEOF_EMULATION)
-#define BOOST_SCOPE_EXIT_AUX_CAPTURE_DECL(r, idty, i, var) \
- struct BOOST_SCOPE_EXIT_AUX_WRAPPED(BOOST_PP_TUPLE_ELEM(2,0,idty), i) \
- : BOOST_TYPEOF(boost::scope_exit::aux::wrap( \
- BOOST_SCOPE_EXIT_AUX_DEREF(BOOST_PP_TUPLE_ELEM(2,0,idty), i, var))) \
- {}; typedef BOOST_PP_TUPLE_ELEM(2,1,idty) \
- BOOST_SCOPE_EXIT_AUX_WRAPPED(BOOST_PP_TUPLE_ELEM(2,0,idty), i)::type \
- BOOST_SCOPE_EXIT_AUX_CAPTURE_T(BOOST_PP_TUPLE_ELEM(2,0,idty), i, var);
+#define BOOST_SCOPE_EXIT_DETAIL_CAPTURE_DECL(r, id_ty, i, var) \
+ struct BOOST_SCOPE_EXIT_AUX_WRAPPED(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), i) \
+ : BOOST_TYPEOF(::boost::scope_exit::detail::wrap( \
+ BOOST_SCOPE_EXIT_AUX_DEREF(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), \
+ i, var))) \
+ {}; \
+ typedef BOOST_PP_TUPLE_ELEM(2, 1,id_ty) \
+ BOOST_SCOPE_EXIT_AUX_WRAPPED(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), i)::type\
+ BOOST_SCOPE_EXIT_DETAIL_CAPTURE_T(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), \
+ i, var) \
+ ;
#elif defined(BOOST_INTEL)
-#define BOOST_SCOPE_EXIT_AUX_CAPTURE_DECL(r, idty, i, var) \
- typedef BOOST_TYPEOF_KEYWORD( \
- BOOST_SCOPE_EXIT_AUX_DEREF(BOOST_PP_TUPLE_ELEM(2,0,idty), i, var)) \
- BOOST_SCOPE_EXIT_AUX_CAPTURE_T(BOOST_PP_TUPLE_ELEM(2,0,idty), i, var);
+#define BOOST_SCOPE_EXIT_DETAIL_CAPTURE_DECL(r, id_ty, i, var) \
+ typedef \
+ BOOST_TYPEOF_KEYWORD(BOOST_SCOPE_EXIT_AUX_DEREF( \
+ BOOST_PP_TUPLE_ELEM(2, 0, id_ty), i, var)) \
+ BOOST_SCOPE_EXIT_DETAIL_CAPTURE_T(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), \
+ i, var) \
+ ;
#else
-#define BOOST_SCOPE_EXIT_AUX_CAPTURE_DECL(r, idty, i, var) \
- typedef BOOST_TYPEOF(boost::scope_exit::aux::wrap( \
- BOOST_SCOPE_EXIT_AUX_DEREF(BOOST_PP_TUPLE_ELEM(2,0,idty), i, var))) \
- BOOST_SCOPE_EXIT_AUX_WRAPPED(BOOST_PP_TUPLE_ELEM(2,0,idty), i); \
- typedef BOOST_PP_TUPLE_ELEM(2,1,idty) \
- BOOST_SCOPE_EXIT_AUX_WRAPPED(BOOST_PP_TUPLE_ELEM(2,0,idty), i)::type \
- BOOST_SCOPE_EXIT_AUX_CAPTURE_T(BOOST_PP_TUPLE_ELEM(2,0,idty), i, var);
+#define BOOST_SCOPE_EXIT_DETAIL_CAPTURE_DECL(r, id_ty, i, var) \
+ typedef \
+ BOOST_TYPEOF(::boost::scope_exit::detail::wrap( \
+ BOOST_SCOPE_EXIT_AUX_DEREF(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), \
+ i, var))) \
+ BOOST_SCOPE_EXIT_AUX_WRAPPED(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), i) \
+ ; \
+ typedef BOOST_PP_TUPLE_ELEM(2, 1, id_ty) \
+ BOOST_SCOPE_EXIT_AUX_WRAPPED(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), i)::type\
+ BOOST_SCOPE_EXIT_DETAIL_CAPTURE_T(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), \
+ i, var) \
+ ;
#endif
-#define BOOST_SCOPE_EXIT_AUX_PARAM_DECL(r, idty, i, var) \
- typedef BOOST_SCOPE_EXIT_AUX_CAPTURE_T( \
- BOOST_PP_TUPLE_ELEM(2,0,idty), i, var) \
- BOOST_SCOPE_EXIT_AUX_PARAM_T(BOOST_PP_TUPLE_ELEM(2,0,idty), i, var);
-
-
-#define BOOST_SCOPE_EXIT_AUX_IMPL(id, seq, ty) \
- BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_TAG_DECL, id, seq) \
- BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_CAPTURE_DECL, (id,ty), seq) \
- struct BOOST_SCOPE_EXIT_AUX_PARAMS_T(id) { \
- BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_PARAM_DECL, (id,ty), seq) \
- BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_MEMBER, id, seq) \
- BOOST_SCOPE_EXIT_AUX_PARAMS_T_CTOR(id, seq) \
- } BOOST_SCOPE_EXIT_AUX_PARAMS(id) BOOST_SCOPE_EXIT_AUX_PARAMS_INIT(id,seq) \
- boost::scope_exit::aux::declared< boost::scope_exit::aux::resolve< \
- sizeof(boost_scope_exit_args)>::cmp1<0>::cmp2 > boost_scope_exit_args; \
- boost_scope_exit_args.value = &BOOST_SCOPE_EXIT_AUX_PARAMS(id); \
- struct BOOST_SCOPE_EXIT_AUX_GUARD_T(id) { \
- BOOST_SCOPE_EXIT_AUX_PARAMS_T(id)* boost_se_params_; \
- BOOST_SCOPE_EXIT_AUX_GUARD_T(id) (void* boost_se_params) \
- : boost_se_params_( \
- (BOOST_SCOPE_EXIT_AUX_PARAMS_T(id)*)boost_se_params) \
- {} \
- ~BOOST_SCOPE_EXIT_AUX_GUARD_T(id)() { boost_se_body( \
- BOOST_PP_SEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_ARG, id, seq) ); } \
- static void boost_se_body(BOOST_PP_SEQ_FOR_EACH_I( \
- BOOST_SCOPE_EXIT_AUX_ARG_DECL, (id,ty), seq) )
+#define BOOST_SCOPE_EXIT_DETAIL_PARAM_DECL(r, id_ty, i, var) \
+ typedef \
+ BOOST_SCOPE_EXIT_DETAIL_CAPTURE_T(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), \
+ i, var) \
+ BOOST_SCOPE_EXIT_DETAIL_PARAM_T(BOOST_PP_TUPLE_ELEM(2, 0, id_ty), \
+ i, var) \
+ ;
+
+// Traits.
+
+#define BOOST_SCOPE_EXIT_AUX_TRAITS_OP_CAPTURE(d, captures, this01, capture) \
+ (BOOST_PP_LIST_APPEND(captures, (capture, BOOST_PP_NIL)), this01)
+
+#define BOOST_SCOPE_EXIT_AUX_TRAITS_OP_THIS(d, captures, this01, this_) \
+ (captures, 1 /* has this (note, no error if multiple this_) */)
+
+#define BOOST_SCOPE_EXIT_AUX_TRAITS_OP(d, captures_this, capture) \
+ BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_THISUNDERSCORE_BACK(\
+ capture), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_OP_THIS \
+ , \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_OP_CAPTURE \
+ )(d, BOOST_PP_TUPLE_ELEM(2, 0, captures_this), \
+ BOOST_PP_TUPLE_ELEM(2, 1, captures_this), capture)
+
+// ref_val: & | =
+#define BOOST_SCOPE_EXIT_AUX_TRAITS_ALL_OP(ref_val, traits) \
+ ( \
+ BOOST_PP_LIST_APPEND((ref_val, BOOST_PP_NIL), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)) \
+ , \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits) \
+ )
+
+#define BOOST_SCOPE_EXIT_AUX_TRAITS(captures) \
+ BOOST_PP_LIST_FOLD_LEFT(BOOST_SCOPE_EXIT_AUX_TRAITS_OP, \
+ (BOOST_PP_NIL, 0), captures)
+
+#define BOOST_SCOPE_EXIT_AUX_TRAITS_ALL(captures) \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_ALL_OP(BOOST_PP_LIST_FIRST(captures), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS(BOOST_PP_LIST_REST(captures)))
-#if defined(BOOST_MSVC)
+#define BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits) \
+ BOOST_PP_TUPLE_ELEM(2, 0, traits)
-#define BOOST_SCOPE_EXIT_END } BOOST_SCOPE_EXIT_AUX_GUARD(__COUNTER__) ( \
- boost_scope_exit_args.value);
+#define BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits) \
+ BOOST_PP_TUPLE_ELEM(2, 1, traits)
-#define BOOST_SCOPE_EXIT(seq) \
- BOOST_SCOPE_EXIT_AUX_IMPL(__COUNTER__, seq, BOOST_PP_EMPTY())
+#if BOOST_SCOPE_EXIT_AUX_LAMBDAS_01 // Lambdas.
-#else
+namespace boost { namespace scope_exit { namespace aux {
+
+template<typename This = void>
+struct guard { // With object `this_` (for backward compatibility).
+ explicit guard(This _this) : this_(_this) {}
+ ~guard() { if(f_) f_(this_); }
+ template<typename Lambda>
+ void operator=(Lambda f) { f_ = f; }
+private:
+ This this_;
+ boost::function<void (This)> f_;
+};
-#define BOOST_SCOPE_EXIT_END } BOOST_SCOPE_EXIT_AUX_GUARD(__LINE__) ( \
- boost_scope_exit_args.value);
+template<>
+struct guard<void> { // Without object `this_` (could capture `this` directly).
+ ~guard() { if(f_) f_(); }
+ template<typename Lambda>
+ void operator=(Lambda f) { f_ = f; }
+private:
+ boost::function<void (void)> f_;
+};
-#define BOOST_SCOPE_EXIT(seq) \
- BOOST_SCOPE_EXIT_AUX_IMPL(__LINE__, seq, BOOST_PP_EMPTY())
+} } }
-#endif
+#define BOOST_SCOPE_EXIT_AUX_IMPL(id, traits, unused) \
+ ::boost::scope_exit::aux::guard< \
+ BOOST_PP_IIF(BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits), \
+ /* no need for TYPEDEF THIS MSVC workaround on C++11 */ \
+ BOOST_TYPEOF /* delay expansion for commas in TYPEOF */ \
+ , \
+ BOOST_PP_TUPLE_EAT(1) \
+ )(this) \
+ > BOOST_SCOPE_EXIT_AUX_GUARD(id) \
+ BOOST_PP_EXPR_IIF(BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits), \
+ (this) \
+ ) \
+ ; \
+ BOOST_SCOPE_EXIT_AUX_GUARD(id) = [ \
+ BOOST_PP_LIST_ENUM(BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)) \
+ ]( \
+ BOOST_PP_IIF(BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits), \
+ /* no need for TYPEDEF THIS MSVC workaround on C++11 */ \
+ BOOST_TYPEOF /* delay expansion for commas in TYPEOF */ \
+ , \
+ BOOST_PP_TUPLE_EAT(1) \
+ )(this) \
+ BOOST_PP_EXPR_IIF(BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits), this_) \
+ ) mutable -> void
+
+#else // No lambdas.
+
+// ty: EMPTY() | typename
+#define BOOST_SCOPE_EXIT_AUX_IMPL(id, traits, ty) \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_DETAIL_TAG_DECL, id, \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)) \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_DETAIL_CAPTURE_DECL, (id, ty), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)) \
+ BOOST_PP_IIF(BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits), \
+ BOOST_SCOPE_EXIT_DETAIL_TYPEDEF_TYPEOF_THIS \
+ , \
+ BOOST_PP_TUPLE_EAT(2) \
+ )(id, BOOST_SCOPE_EXIT_AUX_THIS_T(id)) \
+ struct BOOST_SCOPE_EXIT_DETAIL_PARAMS_T(id) { \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_DETAIL_PARAM_DECL, (id, ty), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)) \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_MEMBER, id, \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)) \
+ BOOST_PP_EXPR_IIF(BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits), \
+ BOOST_SCOPE_EXIT_AUX_THIS_T(id) \
+ BOOST_SCOPE_EXIT_DETAIL_PARAM_THIS(id) ; \
+ ) \
+ BOOST_SCOPE_EXIT_AUX_PARAMS_T_CTOR(id, \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits)) \
+ } BOOST_SCOPE_EXIT_AUX_PARAMS(id) \
+ BOOST_SCOPE_EXIT_AUX_PARAMS_INIT(id, \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits)) \
+ ; \
+ ::boost::scope_exit::detail::declared< \
+ ::boost::scope_exit::detail::resolve< \
+ sizeof(BOOST_SCOPE_EXIT_AUX_ARGS) \
+ >::cmp1<0>::cmp2 \
+ > BOOST_SCOPE_EXIT_AUX_ARGS; \
+ BOOST_SCOPE_EXIT_AUX_ARGS.value = &BOOST_SCOPE_EXIT_AUX_PARAMS(id); \
+ struct BOOST_SCOPE_EXIT_AUX_GUARD_T(id) { \
+ BOOST_SCOPE_EXIT_DETAIL_PARAMS_T(id)* boost_se_params_; \
+ BOOST_SCOPE_EXIT_AUX_GUARD_T(id) (void* boost_se_params) \
+ : boost_se_params_( \
+ (BOOST_SCOPE_EXIT_DETAIL_PARAMS_T(id)*)boost_se_params) \
+ {} \
+ ~BOOST_SCOPE_EXIT_AUX_GUARD_T(id)() { \
+ boost_se_body( \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_ARG, id, \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)) \
+ BOOST_PP_COMMA_IF(BOOST_PP_BITAND(BOOST_PP_LIST_IS_CONS( \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits))) \
+ BOOST_PP_EXPR_IIF(BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS( \
+ traits), \
+ boost_se_params_->BOOST_SCOPE_EXIT_DETAIL_PARAM_THIS(id) \
+ ) \
+ ); \
+ } \
+ static void boost_se_body( \
+ BOOST_PP_LIST_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_ARG_DECL, (id, ty), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)) \
+ BOOST_PP_COMMA_IF(BOOST_PP_BITAND(BOOST_PP_LIST_IS_CONS( \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_CAPTURES(traits)), \
+ BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits))) \
+ BOOST_PP_EXPR_IIF(BOOST_SCOPE_EXIT_AUX_TRAITS_HAS_THIS(traits), \
+ BOOST_SCOPE_EXIT_AUX_THIS_T(id) this_ \
+ ) \
+ )
+
+#endif // Lambdas.
+
+// PUBLIC //
+
+#if defined(BOOST_NO_VARIADIC_MACROS) // No variadic macros (sequences only).
+# define BOOST_SCOPE_EXIT(void_or_seq) \
+ BOOST_SCOPE_EXIT_AUX_IMPL( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_LINE_COUNTER \
+ , BOOST_SCOPE_EXIT_AUX_TRAITS( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_VOID_LIST(void_or_seq)) \
+ , BOOST_PP_EMPTY() \
+ )
+# if BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND_01 && \
+ !BOOST_SCOPE_EXIT_AUX_LAMBDAS_01
+# define BOOST_SCOPE_EXIT_TPL(void_or_seq) \
+ BOOST_SCOPE_EXIT_AUX_IMPL( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_LINE_COUNTER \
+ , BOOST_SCOPE_EXIT_AUX_TRAITS( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_VOID_LIST(void_or_seq)) \
+ , typename \
+ )
+# else // No TPL workaround or lambdas (for backward compatibility).
+# define BOOST_SCOPE_EXIT_TPL(void_or_seq) \
+ BOOST_SCOPE_EXIT(void_or_seq)
+# endif
+# if BOOST_SCOPE_EXIT_AUX_LAMBDAS_01 /* C++11 only */
+# define BOOST_SCOPE_EXIT_ALL(seq) \
+ BOOST_SCOPE_EXIT_AUX_IMPL( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_LINE_COUNTER \
+ , BOOST_SCOPE_EXIT_AUX_TRAITS_ALL( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_NON_VOID_LIST(seq)) \
+ , ~ /* unused on C++11 */ \
+ )
+# endif
+#else // Variadic macros (both sequences and variadic tuples).
+# define BOOST_SCOPE_EXIT(...) \
+ BOOST_SCOPE_EXIT_AUX_IMPL( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_LINE_COUNTER \
+ , BOOST_SCOPE_EXIT_AUX_TRAITS( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_VOID_LIST(__VA_ARGS__)) \
+ , BOOST_PP_EMPTY() \
+ )
+# if BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND_01 && \
+ !BOOST_SCOPE_EXIT_AUX_LAMBDAS_01
+# define BOOST_SCOPE_EXIT_TPL(...) \
+ BOOST_SCOPE_EXIT_AUX_IMPL( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_LINE_COUNTER \
+ , BOOST_SCOPE_EXIT_AUX_TRAITS( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_VOID_LIST(__VA_ARGS__)) \
+ , typename \
+ )
+# else // No TPL workaround or lambdas (for backward compatibility).
+# define BOOST_SCOPE_EXIT_TPL(...) \
+ BOOST_SCOPE_EXIT(__VA_ARGS__)
+# endif
+# if BOOST_SCOPE_EXIT_AUX_LAMBDAS_01 /* C++11 only */
+# define BOOST_SCOPE_EXIT_ALL(...) \
+ BOOST_SCOPE_EXIT_AUX_IMPL( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_LINE_COUNTER \
+ , BOOST_SCOPE_EXIT_AUX_TRAITS_ALL( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_NON_VOID_LIST( \
+ __VA_ARGS__)) \
+ , ~ /* unused on C++11 */ \
+ )
+# endif
+#endif // Variadics.
+
+#if BOOST_SCOPE_EXIT_AUX_LAMBDAS_01 // Lambdas.
+# define BOOST_SCOPE_EXIT_END \
+ ; /* for backward compatibility */
+#else // No lambdas.
+# define BOOST_SCOPE_EXIT_END \
+ } BOOST_SCOPE_EXIT_AUX_GUARD( \
+ BOOST_LOCAL_FUNCTION_DETAIL_PP_LINE_COUNTER \
+ )(BOOST_SCOPE_EXIT_AUX_ARGS.value);
+#endif // Lambdas.
+
+// DOCUMENTATION //
+
+#else // DOXYGEN
+
+/** @file
+@brief Scope exits allow to execute arbitrary code when the enclosing scope exits.
+*/
+
+/**
+@brief This macro declares a scope exit.
+
+The scope exit declaration schedules the execution of the scope exit body at the exit of the enclosing scope:
+
+@code
+ { // Some local scope.
+ ...
+ BOOST_SCOPE_EXIT(capture_list) {
+ ... // Body code.
+ } BOOST_SCOPE_EXIT_END
+ ...
+ }
+@endcode
-#ifdef BOOST_SCOPE_EXIT_AUX_TPL_WORKAROUND
-#define BOOST_SCOPE_EXIT_TPL(seq) \
- BOOST_SCOPE_EXIT_AUX_IMPL(__LINE__, seq, typename)
-#else
-#define BOOST_SCOPE_EXIT_TPL(seq) BOOST_SCOPE_EXIT(seq)
-#endif
+The enclosing scope must be local.
+If multiple scope exits are declared within the same enclosing scope, the scope exit bodies are executed in the reversed order of their declarations.
+Note how the end of the scope exit body must be marked by @RefMacro{BOOST_SCOPE_EXIT_END} (or by a <c>;</c> but only on C++11).
+
+@Params
+@Param{capture_list,
+On compilers that support variadic macros\, the capture list syntax is defined by the following grammar:
+@code
+ capture_list:
+ void | capture_tuple | capture_sequence
+ capture_tuple:
+ capture\, capture\, ...
+ capture_sequence:
+ (capture) (capture) ...
+ capture:
+ [&]variable | this_
+@endcode
+On compilers that do not support variadic macros\, <c>capture_tuple</c> cannot be used:
+@code
+ capture_list:
+ void | capture_sequence
+@endcode
+Finally\, on C++11 compilers <c>this</c> can be used instead of <c>this_</c>:
+@code
+ capture:
+ [&]variable | this_ | this
+@endcode
+
+Lexical conventions: <c>token1 | token2</c> means either <c>token1</c> or
+<c>token2</c>; <c>[token]</c> means either <c>token</c> or nothing;
+<c>{expression}</c> means the token resulting from the expression.
+}
+@EndParams
+
+Note that on compilers with variadic macro support (most of moder compliers and all C++11 compilers), the capture list can be specified as a comma-separated list of tokens.
+On all compilers, the same macro @RefMacro{BOOST_SCOPE_EXIT} also allows to specify the capture list as a Boost.Preprocessor sequence of tokens (for supporting compilers without variadic macros and for backward compatibility with older versions of this library).
+
+The name <c>variable</c> of each captured variable must be a valid name in the enclosing scope and it must appear exactly once in the capture list.
+If a capture starts with the ampersand sign <c>&</c>, the corresponding variable will be available by reference within the scope exit body; otherwise, a copy of the variable will be made at the point of the scope exit declaration and that copy will be available inside the scope exit body (in this case, the variable's type must be <c>CopyConstructible</c>).
+
+From within a member function, the object <c>this</c> can be captured using the special symbol <c>this_</c> in both the capture list and the scope exit body (using <c>this</c> instead of <c>this_</c> in the scope exit body leads to undefined behaviour).
+On C++11 it is possible (but not required) to use <c>this</c> instead of <c>this_</c>.
+
+It is possible to capture no variable by specifying the capture list as <c>void</c> (regardless of variadic macro support).
+
+Only variables listed in the capture list, static variables, <c>extern</c> variables, global variables, functions, and enumerations from the enclosing scope can be used inside the scope exit body.
+
+On various GCC versions the special macro @RefMacro{BOOST_SCOPE_EXIT_TPL} must be used instead of @RefMacro{BOOST_SCOPE_EXIT} within templates (this is not necessary on C++11).
+
+On C++11, it is possible capture all variables in scope without listing their names using the macro @RefMacro{BOOST_SCOPE_EXIT_ALL}.
+
+@Warning The implementation executes the scope exit body within a destructor thus the scope exit body must never throw in order to comply with STL exception safety requirements.
+
+@Note The implementation uses Boost.Typeof to automatically deduce the types of the captured variables.
+In order to compile code in type-of emulation mode, Boost.Typeof must be properly configured (see the @RefSectId{Getting_Started, Getting Started} section).
+
+@See @RefSect{Tutorial} section, @RefSectId{Getting_Started, Getting Started} section, @RefSectId{No_Variadic_Macros, No Variadic Macros} section, @RefMacro{BOOST_SCOPE_EXIT_TPL}, @RefMacro{BOOST_SCOPE_EXIT_ALL}, @RefMacro{BOOST_SCOPE_EXIT_END}.
+*/
+#define BOOST_SCOPE_EXIT(capture_list)
+
+/**
+@brief This macro is a workaround to declare a scope exit for various versions of GCC.
+
+Various versions of the GCC compiler do not compile @RefMacro{BOOST_SCOPE_EXIT} inside function templates.
+As a workaround, @RefMacro{BOOST_SCOPE_EXIT_TPL} should be used instead of @RefMacro{BOOST_SCOPE_EXIT} in these cases:
+
+@code
+ { // Some local scope.
+ ...
+ BOOST_SCOPE_EXIT_TPL(capture_list) {
+ ... // Body code.
+ } BOOST_SCOPE_EXIT_END
+ ...
+ }
+@endcode
-#endif // #if defined(BOOST_SCOPE_EXIT_AUX_CXX0X)
+The syntax of @RefMacro{BOOST_SCOPE_EXIT_TPL} is the exact same as the one of @RefMacro{BOOST_SCOPE_EXIT} (see @RefMacro{BOOST_SCOPE_EXIT} for more information).
+
+On C++11, @RefMacro{BOOST_SCOPE_EXIT_TPL} is not needed because @RefMacro{BOOST_SCOPE_EXIT} always compiles on GCC versions that support C++11 (that is also why there is no need for a <c>BOOST_SCOPE_EXIT_ALL_TPL</c> macro given that @RefMacro{BOOST_SCOPE_EXIT_ALL} is only available for C++11 compilers on which it always compiles correctly).
+However, @RefMacro{BOOST_SCOPE_EXIT_TPL} is still provided on C++11 so to write code that is portable between C++03 and C++11 compilers.
+
+@Note The problem boils down to the following code (see also GCC bug 37920):
+@code
+ template<class T>
+ void f(T const& x) {
+ int i = 0;
+ struct local {
+ typedef __typeof__(i) typeof_i;
+ typedef __typeof__(x) typeof_x;
+ };
+ typedef local::typeof_i i_type;
+ typedef local::typeof_x x_type;
+ }
+
+ int main(void) { f(0); }
+@endcode
+This can be fixed by adding <c>typename</c> in front of <c>local::typeof_i</c> and <c>local::typeof_x</c> (which is the approach followed by the implementation of @RefMacro{BOOST_SCOPE_EXIT_TPL}).
+
+@Note Although @RefMacro{BOOST_SCOPE_EXIT_TPL} has the same suffix as <c>BOOST_TYPEOF_TPL</c>, it does not follow the Boost.Typeof convention.
+
+@See @RefSect{Tutorial} section, @RefMacro{BOOST_SCOPE_EXIT}, @RefMacro{BOOST_SCOPE_EXIT_END}.
+*/
+#define BOOST_SCOPE_EXIT_TPL(capture_list)
+
+/**
+@brief This macro declares a scope exit that captures all variables in scope (C++11 only).
+
+This macro accepts a capture list starting with either <c>&</c> or <c>=</c> to capture all variables in scope by reference or value respectively (following the same syntax of C++11 lambdas).
+A part from that, this macro works like @RefMacro{BOOST_SCOPE_EXIT} (see @RefMacro{BOOST_SCOPE_EXIT} for more information).
+
+@code
+ { // Some local scope.
+ ...
+ BOOST_SCOPE_EXIT_ALL(capture_list) { // C++11 only.
+ ... // Body code.
+ }; // Use `;` instead of `BOOST_SCOPE_EXIT_END` (C++11 only).
+ ...
+ }
+@endcode
+
+@Warning This macro is only available on C++11 compilers.
+It is not defined on non-C++11 compilers so its use on non-C++11 compilers will generate a compiler error.
+
+@Params
+@Param{capture_list,
+@code
+capture_list:
+ capture_tuple | capture_sequence
+capture_tuple:
+ {& | =} [\, capture\, capture\, ...]
+capture_sequence:
+ {(&) | (=)} [(capture) (capture) ...]
+capture:
+ [&]variable | this_ | this
+@endcode
+
+Lexical conventions: <c>token1 | token2</c> means either <c>token1</c> or
+<c>token2</c>; <c>[token]</c> means either <c>token</c> or nothing;
+<c>{expression}</c> means the token resulting from the expression.
+}
+@EndParams
+
+For this macro, the capture list must always contain at least the leading <c>&</c> or <c>=</c> so it can never be <c>void</c>.
+
+Note that on compilers with variadic macro support (which should be all C++11 compilers), the capture list can be specified as a comma-separated list.
+On all compilers, the same macro @RefMacro{BOOST_SCOPE_EXIT_ALL} also allows to specify the capture list as a Boost.Preprocessor sequence (to allow to use a syntax consistent with the one of <c>BOOST_SCOPE_EXIT</c> when used on compilers without variadic macro support).
+The scope exit body declared by this macro can be terminated equivalently by either a semi-column <c>;</c> or by the macro @RefMacro{BOOST_SCOPE_EXIT_END}.
+The @RefMacro{BOOST_SCOPE_EXIT_ALL} macro is only available on C++11 where the terminating semi-column <c>;</c> can always be used without worrying about portability with C++03 (see @RefMacro{BOOST_SCOPE_EXIT_END} for more information).
+Similarly, this macro can always use <c>this</c> instead of <c>this_</c> to capture the enclosing object without worrying about portability with C++03 because this macro is only available on C++11 compilers.
+
+@Note In summary, this macro can take advantage of all syntax improvements allowed by C++11 but it optionally supports the same syntax required by C++03 so programmers can always program both @RefMacro{BOOST_SCOPE_EXIT_ALL} and @RefMacro{BOOST_SCOPE_EXIT} using the same syntax and for all compilers if they wish to do so.
+
+@Warning The implementation executes the scope exit body within a destructor thus the scope exit body must never throw in order to comply with STL exception safety requirements.
+
+@See @RefSect{Tutorial} section, @RefSectId{No_Variadic_Macros, No Variadic Macros} section, @RefMacro{BOOST_SCOPE_EXIT}, @RefMacro{BOOST_SCOPE_EXIT_END}.
+*/
+#define BOOST_SCOPE_EXIT_ALL(capture_list)
+
+/**
+@brief This macro marks the end of a scope exit body.
+
+This macro must follow the closing curly bracket <c>}</c> that ends the scope exit body:
+
+@code
+ { // Some local scope.
+ ...
+ BOOST_SCOPE_EXIT(capture_list) {
+ ... // Body code.
+ } BOOST_SCOPE_EXIT_END
+ ...
+ }
+@endcode
+
+On C++11, this macro is not necessary and it can be replaced by a semi-column <c>;</c> :
+@code
+ { // Some local scope.
+ ...
+ BOOST_SCOPE_EXIT(capture_list) {
+ ... // Body code.
+ }; // C++11 only.
+ ...
+ }
+@endcode
+However, @RefMacro{BOOST_SCOPE_EXIT_END} is still provided on C++11 so to write code that is portable between C++03 and C++11 compilers.
+
+@See @RefSect{Tutorial} section, @RefMacro{BOOST_SCOPE_EXIT}, @RefMacro{BOOST_SCOPE_EXIT_TPL}, @RefMacro{BOOST_SCOPE_EXIT_ALL}.
+*/
+#define BOOST_SCOPE_EXIT_END
+
+/**
+@brief Force not to use C++11 features.
+
+If programmers define this configuration macro, C++11 features will not be used even on C++11 compilers (only C++03 features will be used).
+By default this macro is not defined.
+
+@Note This macro does not disable comma-separated capture lists on compilers that support variadic macros (programmers can simply use Boost.Preprocessor sequences if they do not wish to use comma-separated capture lists).
+
+@See @RefMacro{BOOST_SCOPE_EXIT}, @RefMacro{BOOST_SCOPE_EXIT_ALL}, @RefMacro{BOOST_SCOPE_EXIT_END}.
+*/
+#define BOOST_SCOPE_EXIT_CONFIG_NO_CPP11
+
+#endif // DOXYGEN
#endif // #ifndef FILE_boost_scope_exit_hpp_INCLUDED
+
Modified: branches/quickbook-dev/boost/serialization/extended_type_info_no_rtti.hpp
==============================================================================
--- branches/quickbook-dev/boost/serialization/extended_type_info_no_rtti.hpp (original)
+++ branches/quickbook-dev/boost/serialization/extended_type_info_no_rtti.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -147,7 +147,7 @@
}
virtual void destroy(void const * const p) const{
boost::serialization::access::destroy(
- static_cast<T const * const>(p)
+ static_cast<T const *>(p)
);
//delete static_cast<T const * const>(p) ;
}
Modified: branches/quickbook-dev/boost/serialization/extended_type_info_typeid.hpp
==============================================================================
--- branches/quickbook-dev/boost/serialization/extended_type_info_typeid.hpp (original)
+++ branches/quickbook-dev/boost/serialization/extended_type_info_typeid.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -131,7 +131,7 @@
}
virtual void destroy(void const * const p) const {
boost::serialization::access::destroy(
- static_cast<T const * const>(p)
+ static_cast<T const *>(p)
);
//delete static_cast<T const * const>(p);
}
Modified: branches/quickbook-dev/boost/serialization/force_include.hpp
==============================================================================
--- branches/quickbook-dev/boost/serialization/force_include.hpp (original)
+++ branches/quickbook-dev/boost/serialization/force_include.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -40,11 +40,11 @@
# if defined(__MWERKS__)
# define BOOST_DLLEXPORT __declspec(dllexport)
# elif defined(__GNUC__) && (__GNUC__ >= 3)
-# define BOOST_USED __attribute__ ((used))
+# define BOOST_USED __attribute__ ((__used__))
# elif defined(__IBMCPP__) && (__IBMCPP__ >= 1110)
-# define BOOST_USED __attribute__ ((used))
+# define BOOST_USED __attribute__ ((__used__))
# elif defined(__INTEL_COMPILER) && (BOOST_INTEL_CXX_VERSION >= 800)
-# define BOOST_USED __attribute__ ((used))
+# define BOOST_USED __attribute__ ((__used__))
# endif
#endif
Modified: branches/quickbook-dev/boost/serialization/vector.hpp
==============================================================================
--- branches/quickbook-dev/boost/serialization/vector.hpp (original)
+++ branches/quickbook-dev/boost/serialization/vector.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -32,7 +32,7 @@
// default is being compatible with version 1.34.1 files, not 1.35 files
#ifndef BOOST_SERIALIZATION_VECTOR_VERSIONED
-#define BOOST_SERIALIZATION_VECTOR_VERSIONED(V) (V>4)
+#define BOOST_SERIALIZATION_VECTOR_VERSIONED(V) (V==4 || V==5)
#endif
namespace boost {
Modified: branches/quickbook-dev/boost/signals2/detail/foreign_ptr.hpp
==============================================================================
--- branches/quickbook-dev/boost/signals2/detail/foreign_ptr.hpp (original)
+++ branches/quickbook-dev/boost/signals2/detail/foreign_ptr.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,12 +18,15 @@
#include <boost/smart_ptr/bad_weak_ptr.hpp>
#include <boost/utility/swap.hpp>
-#if !defined(BOOST_INTEL_STDCXX0X)
-namespace std
-{
- template<typename T> class shared_ptr;
- template<typename T> class weak_ptr;
-}
+//FIXME: this is a hack to deal with the fact BOOST_NO_CXX_SMART_PTR doesn't
+// exist yet in boost.config. It will fail on a library which implements
+// C++11 std::tuple but not std::shared_ptr and std::weak_ptr.
+#ifdef BOOST_NO_CXX11_HDR_TUPLE
+#define BOOST_SIGNALS2_NO_CXX11_SMART_PTR
+#endif
+
+#ifndef BOOST_SIGNALS2_NO_CXX11_SMART_PTR
+#include <memory>
#endif
namespace boost
@@ -39,10 +42,12 @@
{
typedef boost::shared_ptr<T> shared_type;
};
+#ifndef BOOST_SIGNALS2_NO_CXX11_SMART_PTR
template<typename T> struct weak_ptr_traits<std::weak_ptr<T> >
{
typedef std::shared_ptr<T> shared_type;
};
+#endif
template<typename SharedPtr> struct shared_ptr_traits
{};
@@ -51,10 +56,12 @@
{
typedef boost::weak_ptr<T> weak_type;
};
+#ifndef BOOST_SIGNALS2_NO_CXX11_SMART_PTR
template<typename T> struct shared_ptr_traits<std::shared_ptr<T> >
{
typedef std::weak_ptr<T> weak_type;
};
+#endif
namespace detail
{
Modified: branches/quickbook-dev/boost/signals2/detail/variadic_slot_invoker.hpp
==============================================================================
--- branches/quickbook-dev/boost/signals2/detail/variadic_slot_invoker.hpp (original)
+++ branches/quickbook-dev/boost/signals2/detail/variadic_slot_invoker.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,10 +16,16 @@
#define BOOST_SIGNALS2_DETAIL_VARIADIC_SLOT_INVOKER_HPP
#include <boost/signals2/detail/variadic_arg_type.hpp>
-// if compiler has variadic template support, we assume they have
-// a variadic std::tuple implementation here. We don't use boost::tuple
-// because it does not have variadic template support at present.
+
+// if compiler has std::tuple use it instead of boost::tuple
+// because boost::tuple does not have variadic template support at present.
+#ifdef BOOST_NO_CXX11_HDR_TUPLE
+#include <boost/tuple.hpp>
+#define BOOST_SIGNALS2_TUPLE boost::tuple
+#else
#include <tuple>
+#define BOOST_SIGNALS2_TUPLE std::tuple
+#endif
namespace boost
{
@@ -65,7 +71,7 @@
typedef R result_type;
template<typename Func, typename ... Args>
- R operator()(Func &func, std::tuple<Args...> args) const
+ R operator()(Func &func, BOOST_SIGNALS2_TUPLE<Args...> args) const
{
typedef typename make_unsigned_meta_array<sizeof...(Args)>::type indices_type;
typename Func::result_type *resolver = 0;
@@ -73,12 +79,12 @@
}
private:
template<typename T, typename Func, unsigned ... indices, typename ... Args>
- R m_invoke(T *, Func &func, unsigned_meta_array<indices...>, std::tuple<Args...> args) const
+ R m_invoke(T *, Func &func, unsigned_meta_array<indices...>, BOOST_SIGNALS2_TUPLE<Args...> args) const
{
return func(std::get<indices>(args)...);
}
template<typename Func, unsigned ... indices, typename ... Args>
- R m_invoke(void *, Func &func, unsigned_meta_array<indices...>, std::tuple<Args...> args) const
+ R m_invoke(void *, Func &func, unsigned_meta_array<indices...>, BOOST_SIGNALS2_TUPLE<Args...> args) const
{
func(std::get<indices>(args)...);
return R();
@@ -113,7 +119,7 @@
{
return call_with_tuple_args<result_type>()(connectionBody->slot.slot_function(), _args);
}
- std::tuple<Args& ...> _args;
+ BOOST_SIGNALS2_TUPLE<Args& ...> _args;
};
} // namespace detail
} // namespace signals2
Modified: branches/quickbook-dev/boost/smart_ptr/detail/sp_counted_base.hpp
==============================================================================
--- branches/quickbook-dev/boost/smart_ptr/detail/sp_counted_base.hpp (original)
+++ branches/quickbook-dev/boost/smart_ptr/detail/sp_counted_base.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -44,6 +44,9 @@
#elif defined(__HP_aCC) && defined(__ia64)
# include <boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp>
+#elif defined( __IBMCPP__ ) && defined( __powerpc )
+# include <boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp>
+
#elif defined( __MWERKS__ ) && defined( __POWERPC__ )
# include <boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp>
@@ -62,9 +65,6 @@
#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__)
# include <boost/smart_ptr/detail/sp_counted_base_w32.hpp>
-#elif defined( _AIX )
-# include <boost/smart_ptr/detail/sp_counted_base_aix.hpp>
-
#elif !defined( BOOST_HAS_THREADS )
# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>
Modified: branches/quickbook-dev/boost/smart_ptr/detail/spinlock_gcc_arm.hpp
==============================================================================
--- branches/quickbook-dev/boost/smart_ptr/detail/spinlock_gcc_arm.hpp (original)
+++ branches/quickbook-dev/boost/smart_ptr/detail/spinlock_gcc_arm.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -43,13 +43,38 @@
{
int r;
+#if defined(__ARM_ARCH_6__) \
+ || defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6K__) \
+ || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6ZK__) \
+ || defined(__ARM_ARCH_6T2__) \
+ || defined(__ARM_ARCH_7__) \
+ || defined(__ARM_ARCH_7A__) \
+ || defined(__ARM_ARCH_7R__) \
+ || defined(__ARM_ARCH_7M__) \
+ || defined(__ARM_ARCH_7EM__)
+
+ __asm__ __volatile__(
+ "ldrex %0, [%2]; \n"
+ "cmp %0, %1; \n"
+ "strexne %0, %1, [%2]; \n"
+ BOOST_SP_ARM_BARRIER :
+ "=&r"( r ): // outputs
+ "r"( 1 ), "r"( &v_ ): // inputs
+ "memory", "cc" );
+
+#else
+
__asm__ __volatile__(
- "swp %0, %1, [%2]\n\t"
- BOOST_SP_ARM_BARRIER :
+ "swp %0, %1, [%2];\n"
+ BOOST_SP_ARM_BARRIER :
"=&r"( r ): // outputs
"r"( 1 ), "r"( &v_ ): // inputs
"memory", "cc" );
+#endif
+
return r == 0;
}
Deleted: branches/quickbook-dev/boost/spirit/actor.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/actor.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ACTOR
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ACTOR
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_actor.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_actor.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_actor.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/attribute.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/attribute.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ATTRIBUTE
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ATTRIBUTE
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_attribute.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_attribute.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_attribute.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/core.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/core.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CORE
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CORE
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_core.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_core.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_core.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/debug.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/debug.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DEBUG
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DEBUG
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_debug.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_debug.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_debug.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/dynamic.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/dynamic.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DYNAMIC
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DYNAMIC
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_dynamic.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_dynamic.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_dynamic.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/error_handling.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/error_handling.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ERROR_HANDLING
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ERROR_HANDLING
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_error_handling.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_error_handling.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_error_handling.hpp>
-
-#endif
Modified: branches/quickbook-dev/boost/spirit/home/qi.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/home/qi.hpp (original)
+++ branches/quickbook-dev/boost/spirit/home/qi.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,6 +15,7 @@
#include <boost/spirit/home/qi/auto.hpp>
#include <boost/spirit/home/qi/auxiliary.hpp>
#include <boost/spirit/home/qi/char.hpp>
+#include <boost/spirit/home/qi/copy.hpp>
#include <boost/spirit/home/qi/binary.hpp>
#include <boost/spirit/home/qi/directive.hpp>
#include <boost/spirit/home/qi/nonterminal.hpp>
Deleted: branches/quickbook-dev/boost/spirit/iterator.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/iterator.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ITERATOR
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ITERATOR
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_iterator.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_iterator.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_iterator.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/meta.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/meta.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_META
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_META
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_meta.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_meta.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_meta.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/phoenix.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/phoenix.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PHOENIX
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PHOENIX
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/phoenix1.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/symbols.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/symbols.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SYMBOLS
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SYMBOLS
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_symbols.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_symbols.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_symbols.hpp>
-
-#endif
Deleted: branches/quickbook-dev/boost/spirit/utility.hpp
==============================================================================
--- branches/quickbook-dev/boost/spirit/utility.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2008 Joel de Guzman
- Copyright (c) 2001-2008 Hartmut Kaiser
- http://spirit.sourceforge.net/
-
- Distributed under 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)
-=============================================================================*/
-#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_UTILITY
-#define BOOST_SPIRIT_DEPRECATED_INCLUDE_UTILITY
-
-#include <boost/version.hpp>
-
-#if BOOST_VERSION >= 103800
-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
-# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_utility.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-# warning "This header is deprecated. Please use: boost/spirit/include/classic_utility.hpp"
-#endif
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
-#define BOOST_SPIRIT_USE_OLD_NAMESPACE
-#endif
-#include <boost/spirit/include/classic_utility.hpp>
-
-#endif
Modified: branches/quickbook-dev/boost/thread/cv_status.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/cv_status.hpp (original)
+++ branches/quickbook-dev/boost/thread/cv_status.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -9,18 +9,18 @@
#ifndef BOOST_THREAD_CV_STATUS_HPP
#define BOOST_THREAD_CV_STATUS_HPP
-#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/scoped_enum.hpp>
namespace boost
{
// enum class cv_status;
- BOOST_DECLARE_STRONG_ENUM_BEGIN(cv_status)
+ BOOST_SCOPED_ENUM_DECLARE_BEGIN(cv_status)
{
no_timeout,
timeout
- };
- BOOST_DECLARE_STRONG_ENUM_END(cv_status)
+ }
+ BOOST_SCOPED_ENUM_DECLARE_END(cv_status)
}
#endif // header
Modified: branches/quickbook-dev/boost/thread/detail/config.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/detail/config.hpp (original)
+++ branches/quickbook-dev/boost/thread/detail/config.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,7 +10,6 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
-
#if !defined BOOST_THREAD_VERSION
#define BOOST_THREAD_VERSION 1
#else
@@ -19,34 +18,17 @@
#endif
#endif
-#if ! defined BOOST_THREAD_DONT_USE_CHRONO
+#if ! defined BOOST_THREAD_DONT_USE_SYSTEM
+#define BOOST_THREAD_USES_SYSTEM
+#endif
+
+#if ! defined BOOST_THREAD_DONT_USE_CHRONO && ! defined BOOST_THREAD_DONT_USE_SYSTEM
#define BOOST_THREAD_USES_CHRONO
#endif
+#if ! defined BOOST_THREAD_DONT_USE_MOVE
#define BOOST_THREAD_USES_MOVE
-
-#ifdef BOOST_NO_SCOPED_ENUMS
-#define BOOST_DECLARE_STRONG_ENUM_BEGIN(x) \
- struct x { \
- enum enum_type
-
-#define BOOST_DECLARE_STRONG_ENUM_END(x) \
- enum_type v_; \
- inline x() {} \
- inline x(enum_type v) : v_(v) {} \
- inline operator int() const {return v_;} \
- friend inline bool operator ==(x lhs, int rhs) {return lhs.v_==rhs;} \
- friend inline bool operator ==(int lhs, x rhs) {return lhs==rhs.v_;} \
- friend inline bool operator !=(x lhs, int rhs) {return lhs.v_!=rhs;} \
- friend inline bool operator !=(int lhs, x rhs) {return lhs!=rhs.v_;} \
- };
-
-#define BOOST_STRONG_ENUM_NATIVE(x) x::enum_type
-#else // BOOST_NO_SCOPED_ENUMS
-#define BOOST_DECLARE_STRONG_ENUM_BEGIN(x) enum class x
-#define BOOST_DECLARE_STRONG_ENUM_END(x)
-#define BOOST_STRONG_ENUM_NATIVE(x) x
-#endif // BOOST_NO_SCOPED_ENUMS
+#endif
#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
# pragma warn -8008 // Condition always true/false
Modified: branches/quickbook-dev/boost/thread/detail/thread.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/detail/thread.hpp (original)
+++ branches/quickbook-dev/boost/thread/detail/thread.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -572,6 +572,7 @@
static unsigned hardware_concurrency() BOOST_NOEXCEPT;
+#define BOOST_THREAD_DEFINES_THREAD_NATIVE_HANDLE
typedef detail::thread_data_base::native_handle_type native_handle_type;
native_handle_type native_handle();
Modified: branches/quickbook-dev/boost/thread/future.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/future.hpp (original)
+++ branches/quickbook-dev/boost/thread/future.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -8,6 +8,7 @@
#define BOOST_THREAD_FUTURE_HPP
#include <boost/thread/detail/config.hpp>
+#include <boost/thread/detail/scoped_enum.hpp>
#include <stdexcept>
#include <boost/thread/detail/move.hpp>
#include <boost/thread/thread_time.hpp>
@@ -45,14 +46,14 @@
{
//enum class future_errc
- BOOST_DECLARE_STRONG_ENUM_BEGIN(future_errc)
+ BOOST_SCOPED_ENUM_DECLARE_BEGIN(future_errc)
{
broken_promise,
future_already_retrieved,
promise_already_satisfied,
no_state
- };
- BOOST_DECLARE_STRONG_ENUM_END(future_errc)
+ }
+ BOOST_SCOPED_ENUM_DECLARE_END(future_errc)
namespace system
{
@@ -66,22 +67,22 @@
}
//enum class launch
- BOOST_DECLARE_STRONG_ENUM_BEGIN(launch)
+ BOOST_SCOPED_ENUM_DECLARE_BEGIN(launch)
{
async = 1,
deferred = 2,
any = async | deferred
- };
- BOOST_DECLARE_STRONG_ENUM_END(launch)
+ }
+ BOOST_SCOPED_ENUM_DECLARE_END(launch)
//enum class future_status
- BOOST_DECLARE_STRONG_ENUM_BEGIN(future_status)
+ BOOST_SCOPED_ENUM_DECLARE_BEGIN(future_status)
{
ready,
timeout,
deferred
- };
- BOOST_DECLARE_STRONG_ENUM_END(future_status)
+ }
+ BOOST_SCOPED_ENUM_DECLARE_END(future_status)
BOOST_THREAD_DECL
const system::error_category& future_category();
@@ -92,14 +93,14 @@
error_code
make_error_code(future_errc e)
{
- return error_code(static_cast<int>(e), boost::future_category());
+ return error_code(underlying_cast<int>(e), boost::future_category());
}
inline BOOST_THREAD_DECL
error_condition
make_error_condition(future_errc e)
{
- return error_condition(static_cast<int>(e), future_category());
+ return error_condition(underlying_cast<int>(e), future_category());
}
}
@@ -1330,22 +1331,16 @@
// Result retrieval
BOOST_THREAD_FUTURE<R> get_future()
{
- std::cout<< __LINE__ << " " << int(future_obtained) << std::endl;
lazy_init();
- std::cout<< __LINE__ << " " << int(future_obtained) << std::endl;
if (future_.get()==0)
{
- std::cout<< __LINE__ << " " << int(future_obtained) << std::endl;
boost::throw_exception(promise_moved());
}
if (future_obtained)
{
- std::cout<< __LINE__ << " " << int(future_obtained) << std::endl;
boost::throw_exception(future_already_retrieved());
}
- std::cout<< __LINE__ << " " << int(future_obtained) << std::endl;
future_obtained=true;
- std::cout<< __LINE__ << " " << int(future_obtained) << std::endl;
return BOOST_THREAD_FUTURE<R>(future_);
}
Modified: branches/quickbook-dev/boost/thread/locks.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/locks.hpp (original)
+++ branches/quickbook-dev/boost/thread/locks.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -2,6 +2,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
#ifndef BOOST_THREAD_LOCKS_HPP
#define BOOST_THREAD_LOCKS_HPP
#include <boost/thread/detail/config.hpp>
@@ -253,15 +254,16 @@
Mutex& m;
#ifndef BOOST_NO_DELETED_FUNCTIONS
+ public:
lock_guard(lock_guard const&) = delete;
lock_guard& operator=(lock_guard const&) = delete;
#else // BOOST_NO_DELETED_FUNCTIONS
- private:
- lock_guard(lock_guard const&);
- lock_guard& operator=(lock_guard const&);
- public:
+ private:
+ lock_guard(lock_guard&);
+ lock_guard& operator=(lock_guard&);
#endif // BOOST_NO_DELETED_FUNCTIONS
public:
+ typedef Mutex mutex_type;
explicit lock_guard(Mutex& m_):
m(m_)
{
@@ -285,27 +287,20 @@
bool is_locked;
#ifndef BOOST_NO_DELETED_FUNCTIONS
+ public:
unique_lock(unique_lock const&) = delete;
unique_lock& operator=(unique_lock const&) = delete;
#else // BOOST_NO_DELETED_FUNCTIONS
- private:
- // Fixme The following doesn't work
- //test_move_function.cpp:71:12: error: calling a private constructor of class 'boost::unique_lock<boost::mutex>'
- // return boost::unique_lock<boost::mutex>(m);
- //unique_lock(unique_lock const&);
+ private:
unique_lock(unique_lock&);
- // Fixme The following doesn't work
- // ../../../boost/thread/future.hpp:452:33: error: 'operator=' is a private member of 'boost::unique_lock<boost::mutex>'
- // locks[i]=boost::unique_lock<boost::mutex>(futures[i].future->mutex);
- //unique_lock& operator=(unique_lock const&);
unique_lock& operator=(unique_lock &);
- public:
#endif // BOOST_NO_DELETED_FUNCTIONS
private:
explicit unique_lock(upgrade_lock<Mutex>&);
unique_lock& operator=(upgrade_lock<Mutex>& other);
public:
+ typedef Mutex mutex_type;
#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100)
unique_lock(const volatile unique_lock&);
#endif
@@ -363,29 +358,20 @@
}
explicit unique_lock(upgrade_lock<Mutex>&& other);
- unique_lock<Mutex>&& move()
- {
- return static_cast<unique_lock<Mutex>&&>(*this);
- }
unique_lock& operator=(unique_lock&& other) BOOST_NOEXCEPT
{
- unique_lock temp(other.move());
+ unique_lock temp(move(other));
swap(temp);
return *this;
}
unique_lock& operator=(upgrade_lock<Mutex>&& other) BOOST_NOEXCEPT
{
- unique_lock temp(other.move());
+ unique_lock temp(move(other));
swap(temp);
return *this;
}
- void swap(unique_lock&& other) BOOST_NOEXCEPT
- {
- std::swap(m,other.m);
- std::swap(is_locked,other.is_locked);
- }
#else
#if defined BOOST_THREAD_USES_MOVE
unique_lock(boost::rv<unique_lock<Mutex> >& other) BOOST_NOEXCEPT:
@@ -600,7 +586,7 @@
is_locked=false;
}
-#ifndef BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
+#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
typedef void (unique_lock::*bool_type)();
operator bool_type() const BOOST_NOEXCEPT
{
@@ -611,7 +597,7 @@
return !owns_lock();
}
#else
- operator bool() const BOOST_NOEXCEPT
+ explicit operator bool() const BOOST_NOEXCEPT
{
return owns_lock();
}
@@ -638,46 +624,13 @@
friend class upgrade_lock<Mutex>;
};
-#ifndef BOOST_NO_RVALUE_REFERENCES
-// template<typename Mutex>
-// void swap(unique_lock<Mutex>&& lhs,unique_lock<Mutex>&& rhs)
-// {
-// lhs.swap(rhs);
-// }
-
- template<typename Mutex>
- inline upgrade_lock<Mutex>&& move(upgrade_lock<Mutex>&& ul)
- {
- return static_cast<upgrade_lock<Mutex>&&>(ul);
- }
-
- template<typename Mutex>
- inline upgrade_lock<Mutex>&& move(upgrade_lock<Mutex>& ul)
- {
- return static_cast<upgrade_lock<Mutex>&&>(ul);
- }
-#endif
template<typename Mutex>
void swap(unique_lock<Mutex>& lhs,unique_lock<Mutex>& rhs) BOOST_NOEXCEPT
{
lhs.swap(rhs);
}
-#ifndef BOOST_NO_RVALUE_REFERENCES
- template<typename Mutex>
- inline unique_lock<Mutex>&& move(unique_lock<Mutex>&& ul)
- {
- return static_cast<unique_lock<Mutex>&&>(ul);
- }
-
- template<typename Mutex>
- inline unique_lock<Mutex>&& move(unique_lock<Mutex>& ul)
- {
- return static_cast<unique_lock<Mutex>&&>(ul);
- }
-#endif
-
-#ifdef BOOST_NO_RVALUE_REFERENCES
+#if defined BOOST_NO_RVALUE_REFERENCES && ! defined BOOST_THREAD_USES_MOVE
template <typename Mutex>
struct has_move_emulation_enabled_aux<unique_lock<Mutex> >
: BOOST_MOVE_BOOST_NS::integral_constant<bool, true>
@@ -691,15 +644,17 @@
Mutex* m;
bool is_locked;
#ifndef BOOST_NO_DELETED_FUNCTIONS
- shared_lock(shared_lock const&);
- shared_lock& operator=(shared_lock const&);
+ public:
+ shared_lock(shared_lock const&) = delete;
+ shared_lock& operator=(shared_lock const&) = delete;
#else // BOOST_NO_DELETED_FUNCTIONS
- private:
- shared_lock(shared_lock const&);
- shared_lock& operator=(shared_lock const&);
- public:
+ private:
+ shared_lock(shared_lock &);
+ shared_lock& operator=(shared_lock &);
#endif // BOOST_NO_DELETED_FUNCTIONS
public:
+ typedef Mutex mutex_type;
+
shared_lock():
m(0),is_locked(false)
{}
@@ -725,7 +680,71 @@
{
timed_lock(target_time);
}
+
+#ifdef BOOST_THREAD_USES_CHRONO
+ template <class Clock, class Duration>
+ shared_lock(Mutex& mtx, const chrono::time_point<Clock, Duration>& t)
+ : m(&mtx), is_locked(mtx.try_lock_shared_until(t))
+ {
+ }
+ template <class Rep, class Period>
+ shared_lock(Mutex& mtx, const chrono::duration<Rep, Period>& d)
+ : m(&mtx), is_locked(mtx.try_lock_shared_for(d))
+ {
+ }
+#endif
+
#ifndef BOOST_NO_RVALUE_REFERENCES
+ shared_lock(shared_lock<Mutex> && other):
+ m(other.m),is_locked(other.is_locked)
+ {
+ other.is_locked=false;
+ other.m=0;
+ }
+
+ shared_lock(unique_lock<Mutex> && other):
+ m(other.m),is_locked(other.is_locked)
+ {
+ if(is_locked)
+ {
+ m->unlock_and_lock_shared();
+ }
+ other.is_locked=false;
+ other.m=0;
+ }
+
+ shared_lock(upgrade_lock<Mutex> && other):
+ m(other.m),is_locked(other.is_locked)
+ {
+ if(is_locked)
+ {
+ m->unlock_upgrade_and_lock_shared();
+ }
+ other.is_locked=false;
+ other.m=0;
+ }
+
+
+ shared_lock& operator=(shared_lock<Mutex> && other)
+ {
+ shared_lock temp(boost::move(other));
+ swap(temp);
+ return *this;
+ }
+
+ shared_lock& operator=(unique_lock<Mutex> && other)
+ {
+ shared_lock temp(boost::move(other));
+ swap(temp);
+ return *this;
+ }
+
+ shared_lock& operator=(upgrade_lock<Mutex> && other)
+ {
+ shared_lock temp(boost::move(other));
+ swap(temp);
+ return *this;
+ }
#else
#if defined BOOST_THREAD_USES_MOVE
@@ -853,19 +872,6 @@
#endif
#endif
-#ifndef BOOST_NO_RVALUE_REFERENCES
- void swap(shared_lock&& other)
- {
- std::swap(m,other.m);
- std::swap(is_locked,other.is_locked);
- }
-#else
- void swap(boost::detail::thread_move_t<shared_lock<Mutex> > other)
- {
- std::swap(m,other->m);
- std::swap(is_locked,other->is_locked);
- }
-#endif
void swap(shared_lock& other)
{
std::swap(m,other.m);
@@ -877,6 +883,14 @@
return m;
}
+ Mutex* release() BOOST_NOEXCEPT
+ {
+ Mutex* const res=m;
+ m=0;
+ is_locked=false;
+ return res;
+ }
+
~shared_lock()
{
if(owns_lock())
@@ -886,6 +900,10 @@
}
void lock()
{
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
if(owns_lock())
{
boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
@@ -895,6 +913,10 @@
}
bool try_lock()
{
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
if(owns_lock())
{
boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
@@ -904,6 +926,10 @@
}
bool timed_lock(boost::system_time const& target_time)
{
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
if(owns_lock())
{
boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
@@ -914,6 +940,10 @@
template<typename Duration>
bool timed_lock(Duration const& target_time)
{
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
if(owns_lock())
{
boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
@@ -921,8 +951,42 @@
is_locked=m->timed_lock_shared(target_time);
return is_locked;
}
+#ifdef BOOST_THREAD_USES_CHRONO
+ template <class Rep, class Period>
+ bool try_lock_for(const chrono::duration<Rep, Period>& rel_time)
+ {
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
+ if(owns_lock())
+ {
+ boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ }
+ is_locked=m->try_lock_shared_for(rel_time);
+ return is_locked;
+ }
+ template <class Clock, class Duration>
+ bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time)
+ {
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
+ if(owns_lock())
+ {
+ boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ }
+ is_locked=m->try_lock_shared_until(abs_time);
+ return is_locked;
+ }
+#endif
void unlock()
{
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
if(!owns_lock())
{
boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock doesn't own the mutex"));
@@ -931,7 +995,7 @@
is_locked=false;
}
-#ifndef BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
+#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
typedef void (shared_lock<Mutex>::*bool_type)();
operator bool_type() const
{
@@ -942,7 +1006,7 @@
return !owns_lock();
}
#else
- operator bool() const
+ explicit operator bool() const
{
return owns_lock();
}
@@ -954,7 +1018,7 @@
};
-#ifdef BOOST_NO_RVALUE_REFERENCES
+#if defined BOOST_NO_RVALUE_REFERENCES && ! defined BOOST_THREAD_USES_MOVE
template <typename Mutex>
struct has_move_emulation_enabled_aux<shared_lock<Mutex> >
: BOOST_MOVE_BOOST_NS::integral_constant<bool, true>
@@ -962,24 +1026,11 @@
#endif
-#ifndef BOOST_NO_RVALUE_REFERENCES
- template<typename Mutex>
- void swap(shared_lock<Mutex>&& lhs,shared_lock<Mutex>&& rhs)
- {
- lhs.swap(rhs);
- }
- template<typename Mutex>
- void swap(shared_lock<Mutex>& lhs,shared_lock<Mutex>& rhs)
- {
- lhs.swap(rhs);
- }
-#else
template<typename Mutex>
void swap(shared_lock<Mutex>& lhs,shared_lock<Mutex>& rhs)
{
lhs.swap(rhs);
}
-#endif
template<typename Mutex>
class upgrade_lock
@@ -987,10 +1038,17 @@
protected:
Mutex* m;
bool is_locked;
+#ifndef BOOST_NO_DELETED_FUNCTIONS
+ public:
+ upgrade_lock(upgrade_lock const&) = delete;
+ upgrade_lock& operator=(upgrade_lock const&) = delete;
+#else
private:
explicit upgrade_lock(upgrade_lock&);
upgrade_lock& operator=(upgrade_lock&);
+#endif
public:
+ typedef Mutex mutex_type;
upgrade_lock():
m(0),is_locked(false)
{}
@@ -1011,6 +1069,20 @@
{
try_lock();
}
+
+#ifdef BOOST_THREAD_USES_CHRONO
+ template <class Clock, class Duration>
+ upgrade_lock(Mutex& mtx, const chrono::time_point<Clock, Duration>& t)
+ : m(&mtx), is_locked(mtx.try_lock_upgrade_until(t))
+ {
+ }
+ template <class Rep, class Period>
+ upgrade_lock(Mutex& mtx, const chrono::duration<Rep, Period>& d)
+ : m(&mtx), is_locked(mtx.try_lock_upgrade_for(d))
+ {
+ }
+#endif
+
#ifndef BOOST_NO_RVALUE_REFERENCES
upgrade_lock(upgrade_lock<Mutex>&& other):
m(other.m),is_locked(other.is_locked)
@@ -1032,17 +1104,18 @@
upgrade_lock& operator=(upgrade_lock<Mutex>&& other)
{
- upgrade_lock temp(static_cast<upgrade_lock<Mutex>&&>(other));
+ upgrade_lock temp(boost::move(other));
swap(temp);
return *this;
}
upgrade_lock& operator=(unique_lock<Mutex>&& other)
{
- upgrade_lock temp(static_cast<unique_lock<Mutex>&&>(other));
+ upgrade_lock temp(boost::move(other));
swap(temp);
return *this;
}
+
#else
#if defined BOOST_THREAD_USES_MOVE
upgrade_lock(boost::rv<upgrade_lock<Mutex> >& other):
@@ -1136,7 +1209,18 @@
std::swap(m,other.m);
std::swap(is_locked,other.is_locked);
}
+ Mutex* mutex() const
+ {
+ return m;
+ }
+ Mutex* release() BOOST_NOEXCEPT
+ {
+ Mutex* const res=m;
+ m=0;
+ is_locked=false;
+ return res;
+ }
~upgrade_lock()
{
if(owns_lock())
@@ -1146,6 +1230,10 @@
}
void lock()
{
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
if(owns_lock())
{
boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost upgrade_lock owns already the mutex"));
@@ -1155,6 +1243,10 @@
}
bool try_lock()
{
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
if(owns_lock())
{
boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost upgrade_lock owns already the mutex"));
@@ -1164,6 +1256,10 @@
}
void unlock()
{
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
if(!owns_lock())
{
boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost upgrade_lock doesn't own the mutex"));
@@ -1171,8 +1267,37 @@
m->unlock_upgrade();
is_locked=false;
}
-
-#ifndef BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
+#ifdef BOOST_THREAD_USES_CHRONO
+ template <class Rep, class Period>
+ bool try_lock_for(const chrono::duration<Rep, Period>& rel_time)
+ {
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
+ if(owns_lock())
+ {
+ boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ }
+ is_locked=m->try_lock_upgrade_for(rel_time);
+ return is_locked;
+ }
+ template <class Clock, class Duration>
+ bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time)
+ {
+ if(m==0)
+ {
+ boost::throw_exception(boost::lock_error(system::errc::operation_not_permitted, "boost shared_lock has no mutex"));
+ }
+ if(owns_lock())
+ {
+ boost::throw_exception(boost::lock_error(system::errc::resource_deadlock_would_occur, "boost shared_lock owns already the mutex"));
+ }
+ is_locked=m->try_lock_upgrade_until(abs_time);
+ return is_locked;
+ }
+#endif
+#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
typedef void (upgrade_lock::*bool_type)();
operator bool_type() const
{
@@ -1183,7 +1308,7 @@
return !owns_lock();
}
#else
- operator bool() const
+ explicit operator bool() const
{
return owns_lock();
}
@@ -1196,7 +1321,13 @@
friend class unique_lock<Mutex>;
};
-#ifdef BOOST_NO_RVALUE_REFERENCES
+ template<typename Mutex>
+ void swap(upgrade_lock<Mutex>& lhs,upgrade_lock<Mutex>& rhs) BOOST_NOEXCEPT
+ {
+ lhs.swap(rhs);
+ }
+
+#if defined BOOST_NO_RVALUE_REFERENCES && ! defined BOOST_THREAD_USES_MOVE
template <typename Mutex>
struct has_move_emulation_enabled_aux<upgrade_lock<Mutex> >
: BOOST_MOVE_BOOST_NS::integral_constant<bool, true>
@@ -1247,9 +1378,17 @@
upgrade_lock<Mutex>* source;
unique_lock<Mutex> exclusive;
+#ifndef BOOST_NO_DELETED_FUNCTIONS
+ public:
+ upgrade_to_unique_lock(upgrade_to_unique_lock const&) = delete;
+ upgrade_to_unique_lock& operator=(upgrade_to_unique_lock const&) = delete;
+#else
+ private:
explicit upgrade_to_unique_lock(upgrade_to_unique_lock&);
upgrade_to_unique_lock& operator=(upgrade_to_unique_lock&);
+#endif
public:
+ typedef Mutex mutex_type;
explicit upgrade_to_unique_lock(upgrade_lock<Mutex>& m_):
source(&m_),exclusive(move(*source))
{}
@@ -1288,6 +1427,14 @@
swap(temp);
return *this;
}
+ operator ::boost::rv<upgrade_to_unique_lock>&()
+ {
+ return *static_cast< ::boost::rv<upgrade_to_unique_lock>* >(this);
+ }
+ operator const ::boost::rv<upgrade_to_unique_lock>&() const
+ {
+ return *static_cast<const ::boost::rv<upgrade_to_unique_lock>* >(this);
+ }
#else
upgrade_to_unique_lock(detail::thread_move_t<upgrade_to_unique_lock<Mutex> > other):
source(other->source),exclusive(move(other->exclusive))
@@ -1301,6 +1448,15 @@
swap(temp);
return *this;
}
+ operator detail::thread_move_t<upgrade_to_unique_lock<Mutex> >()
+ {
+ return move();
+ }
+
+ detail::thread_move_t<upgrade_to_unique_lock<Mutex> > move()
+ {
+ return detail::thread_move_t<upgrade_to_unique_lock<Mutex> >(*this);
+ }
#endif
#endif
void swap(upgrade_to_unique_lock& other)
@@ -1309,7 +1465,7 @@
exclusive.swap(other.exclusive);
}
-#ifndef BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
+#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
typedef void (upgrade_to_unique_lock::*bool_type)(upgrade_to_unique_lock&);
operator bool_type() const
{
@@ -1320,7 +1476,7 @@
return !owns_lock();
}
#else
- operator bool() const
+ explicit operator bool() const
{
return owns_lock();
}
@@ -1332,7 +1488,7 @@
}
};
-#ifdef BOOST_NO_RVALUE_REFERENCES
+#if defined BOOST_NO_RVALUE_REFERENCES && ! defined BOOST_THREAD_USES_MOVE
template <typename Mutex>
struct has_move_emulation_enabled_aux<upgrade_to_unique_lock<Mutex> >
: BOOST_MOVE_BOOST_NS::integral_constant<bool, true>
@@ -1365,25 +1521,16 @@
{}
#ifndef BOOST_NO_RVALUE_REFERENCES
try_lock_wrapper(try_lock_wrapper&& other):
- base(other.move())
+ base(move(other))
{}
- try_lock_wrapper&& move()
- {
- return static_cast<try_lock_wrapper&&>(*this);
- }
-
try_lock_wrapper& operator=(try_lock_wrapper<Mutex>&& other)
{
- try_lock_wrapper temp(other.move());
+ try_lock_wrapper temp(move(other));
swap(temp);
return *this;
}
- void swap(try_lock_wrapper&& other)
- {
- base::swap(other);
- }
#else
#if defined BOOST_THREAD_USES_MOVE
try_lock_wrapper(boost::rv<try_lock_wrapper<Mutex> >& other):
@@ -1463,7 +1610,7 @@
return base::release();
}
-#ifndef BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
+#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
typedef typename base::bool_type bool_type;
operator bool_type() const
{
@@ -1474,31 +1621,18 @@
return !this->owns_lock();
}
#else
- operator bool() const
+ explicit operator bool() const
{
return owns_lock();
}
#endif
};
-#ifndef BOOST_NO_RVALUE_REFERENCES
- template<typename Mutex>
- void swap(try_lock_wrapper<Mutex>&& lhs,try_lock_wrapper<Mutex>&& rhs)
- {
- lhs.swap(rhs);
- }
- template<typename Mutex>
- void swap(try_lock_wrapper<Mutex>& lhs,try_lock_wrapper<Mutex>& rhs)
- {
- lhs.swap(rhs);
- }
-#else
template<typename Mutex>
void swap(try_lock_wrapper<Mutex>& lhs,try_lock_wrapper<Mutex>& rhs)
{
lhs.swap(rhs);
}
-#endif
template<typename MutexType1,typename MutexType2>
unsigned try_lock_internal(MutexType1& m1,MutexType2& m2)
Modified: branches/quickbook-dev/boost/thread/pthread/condition_variable_fwd.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/pthread/condition_variable_fwd.hpp (original)
+++ branches/quickbook-dev/boost/thread/pthread/condition_variable_fwd.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -201,6 +201,7 @@
}
#endif
+#define BOOST_THREAD_DEFINES_CONDITION_VARIABLE_NATIVE_HANDLE
typedef pthread_cond_t* native_handle_type;
native_handle_type native_handle()
{
Modified: branches/quickbook-dev/boost/thread/pthread/mutex.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/pthread/mutex.hpp (original)
+++ branches/quickbook-dev/boost/thread/pthread/mutex.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,6 +1,7 @@
#ifndef BOOST_THREAD_PTHREAD_MUTEX_HPP
#define BOOST_THREAD_PTHREAD_MUTEX_HPP
// (C) Copyright 2007-8 Anthony Williams
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
// Distributed under 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)
@@ -97,13 +98,14 @@
// The following throw_exception has been replaced by an assertion and just return false,
// as this is an internal error and the user can do nothing with the exception.
//boost::throw_exception(lock_error(res,"boost: mutex try_lock failed in pthread_mutex_trylock"));
- BOOST_ASSERT(false && "boost: mutex try_lock failed in pthread_mutex_trylock");
+ BOOST_ASSERT_MSG(false ,"boost: mutex try_lock failed in pthread_mutex_trylock");
return false;
}
return !res;
}
+#define BOOST_THREAD_DEFINES_MUTEX_NATIVE_HANDLE
typedef pthread_mutex_t* native_handle_type;
native_handle_type native_handle()
{
@@ -285,6 +287,7 @@
}
#endif
+#define BOOST_THREAD_DEFINES_TIMED_MUTEX_NATIVE_HANDLE
typedef pthread_mutex_t* native_handle_type;
native_handle_type native_handle()
{
Modified: branches/quickbook-dev/boost/thread/pthread/recursive_mutex.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/pthread/recursive_mutex.hpp (original)
+++ branches/quickbook-dev/boost/thread/pthread/recursive_mutex.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -123,6 +123,7 @@
BOOST_ASSERT(!res || res==EBUSY);
return !res;
}
+#define BOOST_THREAD_DEFINES_RECURSIVE_MUTEX_NATIVE_HANDLE
typedef pthread_mutex_t* native_handle_type;
native_handle_type native_handle()
{
@@ -387,6 +388,7 @@
}
#endif
+#define BOOST_THREAD_DEFINES_RECURSIVE_TIMED_MUTEX_NATIVE_HANDLE
typedef pthread_mutex_t* native_handle_type;
native_handle_type native_handle()
{
Modified: branches/quickbook-dev/boost/thread/pthread/shared_mutex.hpp
==============================================================================
--- branches/quickbook-dev/boost/thread/pthread/shared_mutex.hpp (original)
+++ branches/quickbook-dev/boost/thread/pthread/shared_mutex.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -2,6 +2,7 @@
#define BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP
// (C) Copyright 2006-8 Anthony Williams
+// (C) Copyright 2012 Vicente J. Botet Escriba
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -12,6 +13,10 @@
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/thread/detail/thread_interruption.hpp>
+#ifdef BOOST_THREAD_USES_CHRONO
+#include <boost/chrono/system_clocks.hpp>
+#include <boost/chrono/ceil.hpp>
+#endif
#include <boost/config/abi_prefix.hpp>
@@ -43,7 +48,17 @@
}
+#ifndef BOOST_NO_DELETED_FUNCTIONS
+ public:
+ shared_mutex(shared_mutex const&) = delete;
+ shared_mutex& operator=(shared_mutex const&) = delete;
+#else // BOOST_NO_DELETED_FUNCTIONS
+ private:
+ shared_mutex(shared_mutex const&);
+ shared_mutex& operator=(shared_mutex const&);
+#endif // BOOST_NO_DELETED_FUNCTIONS
public:
+
shared_mutex()
{
state_data state_={0,0,0,0};
@@ -102,7 +117,29 @@
{
return timed_lock_shared(get_system_time()+relative_time);
}
-
+#ifdef BOOST_THREAD_USES_CHRONO
+ template <class Rep, class Period>
+ bool try_lock_shared_for(const chrono::duration<Rep, Period>& rel_time)
+ {
+ return try_lock_shared_until(chrono::steady_clock::now() + rel_time);
+ }
+ template <class Clock, class Duration>
+ bool try_lock_shared_until(const chrono::time_point<Clock, Duration>& abs_time)
+ {
+ boost::this_thread::disable_interruption do_not_disturb;
+ boost::mutex::scoped_lock lk(state_change);
+
+ while(state.exclusive || state.exclusive_waiting_blocked)
+ {
+ if(cv_status::timeout==shared_cond.wait_until(lk,abs_time))
+ {
+ return false;
+ }
+ }
+ ++state.shared_count;
+ return true;
+ }
+#endif
void unlock_shared()
{
boost::mutex::scoped_lock lk(state_change);
@@ -166,6 +203,37 @@
return timed_lock(get_system_time()+relative_time);
}
+#ifdef BOOST_THREAD_USES_CHRONO
+ template <class Rep, class Period>
+ bool try_lock_for(const chrono::duration<Rep, Period>& rel_time)
+ {
+ return try_lock_until(chrono::steady_clock::now() + rel_time);
+ }
+ template <class Clock, class Duration>
+ bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time)
+ {
+ boost::this_thread::disable_interruption do_not_disturb;
+ boost::mutex::scoped_lock lk(state_change);
+
+ while(state.shared_count || state.exclusive)
+ {
+ state.exclusive_waiting_blocked=true;
+ if(cv_status::timeout == exclusive_cond.wait_until(lk,abs_time))
+ {
+ if(state.shared_count || state.exclusive)
+ {
+ state.exclusive_waiting_blocked=false;
+ release_waiters();
+ return false;
+ }
+ break;
+ }
+ }
+ state.exclusive=true;
+ return true;
+ }
+#endif
+
bool try_lock()
{
boost::mutex::scoped_lock lk(state_change);
@@ -228,6 +296,33 @@
return timed_lock_upgrade(get_system_time()+relative_time);
}
+#ifdef BOOST_THREAD_USES_CHRONO
+ template <class Rep, class Period>
+ bool try_lock_upgrade_for(const chrono::duration<Rep, Period>& rel_time)
+ {
+ return try_lock_upgrade_until(chrono::steady_clock::now() + rel_time);
+ }
+ template <class Clock, class Duration>
+ bool try_lock_upgrade_until(const chrono::time_point<Clock, Duration>& abs_time)
+ {
+ boost::this_thread::disable_interruption do_not_disturb;
+ boost::mutex::scoped_lock lk(state_change);
+ while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade)
+ {
+ if(cv_status::timeout == shared_cond.wait_until(lk,abs_time))
+ {
+ if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade)
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ ++state.shared_count;
+ state.upgrade=true;
+ return true;
+ }
+#endif
bool try_lock_upgrade()
{
boost::mutex::scoped_lock lk(state_change);
@@ -258,6 +353,7 @@
}
}
+ // Upgrade <-> Exclusive
void unlock_upgrade_and_lock()
{
boost::this_thread::disable_interruption do_not_disturb;
@@ -281,6 +377,19 @@
release_waiters();
}
+#if 0 // To be added
+ bool try_unlock_upgrade_and_lock();
+ template <class Rep, class Period>
+ bool
+ try_unlock_upgrade_and_lock_for(
+ const chrono::duration<Rep, Period>& rel_time);
+ template <class Clock, class Duration>
+ bool
+ try_unlock_upgrade_and_lock_until(
+ const chrono::time_point<Clock, Duration>& abs_time);
+#endif
+
+ // Shared <-> Exclusive
void unlock_and_lock_shared()
{
boost::mutex::scoped_lock lk(state_change);
@@ -290,6 +399,19 @@
release_waiters();
}
+#if 0 // To be added
+ bool try_unlock_shared_and_lock();
+ template <class Rep, class Period>
+ bool
+ try_unlock_shared_and_lock_for(
+ const chrono::duration<Rep, Period>& rel_time);
+ template <class Clock, class Duration>
+ bool
+ try_unlock_shared_and_lock_until(
+ const chrono::time_point<Clock, Duration>& abs_time);
+#endif
+
+ // Shared <-> Upgrade
void unlock_upgrade_and_lock_shared()
{
boost::mutex::scoped_lock lk(state_change);
@@ -297,6 +419,18 @@
state.exclusive_waiting_blocked=false;
release_waiters();
}
+
+#if 0 // To be added
+ bool try_unlock_shared_and_lock_upgrade();
+ template <class Rep, class Period>
+ bool
+ try_unlock_shared_and_lock_upgrade_for(
+ const chrono::duration<Rep, Period>& rel_time);
+ template <class Clock, class Duration>
+ bool
+ try_unlock_shared_and_lock_upgrade_until(
+ const chrono::time_point<Clock, Duration>& abs_time);
+#endif
};
}
Modified: branches/quickbook-dev/boost/type_traits/intrinsics.hpp
==============================================================================
--- branches/quickbook-dev/boost/type_traits/intrinsics.hpp (original)
+++ branches/quickbook-dev/boost/type_traits/intrinsics.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -131,10 +131,10 @@
# if __has_feature(is_union)
# define BOOST_IS_UNION(T) __is_union(T)
# endif
-# if __has_feature(is_pod) && defined(_LIBCPP_VERSION)
+# if (__has_feature(is_pod) && defined(_LIBCPP_VERSION)) || __has_feature(__is_pod__)
# define BOOST_IS_POD(T) __is_pod(T)
# endif
-# if __has_feature(is_empty) && defined(_LIBCPP_VERSION)
+# if (__has_feature(is_empty) && defined(_LIBCPP_VERSION)) || __has_feature(__is_empty__)
# define BOOST_IS_EMPTY(T) __is_empty(T)
# endif
# if __has_feature(has_trivial_constructor)
Modified: branches/quickbook-dev/boost/unordered/detail/allocator_helpers.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/detail/allocator_helpers.hpp (original)
+++ branches/quickbook-dev/boost/unordered/detail/allocator_helpers.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -26,8 +26,25 @@
#include <boost/assert.hpp>
#include <boost/utility/addressof.hpp>
-#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
+#if !defined(BOOST_UNORDERED_USE_ALLOCATOR_TRAITS)
+# if defined(__GXX_EXPERIMENTAL_CXX0X__) && \
+ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))
+# define BOOST_UNORDERED_USE_ALLOCATOR_TRAITS 1
+# endif
+#
+# if defined(BOOST_MSVC) && BOOST_MSVC < 1400
+# define BOOST_UNORDERED_USE_ALLOCATOR_TRAITS 2
+# endif
+#endif
+
+#if !defined(BOOST_UNORDERED_USE_ALLOCATOR_TRAITS)
+# define BOOST_UNORDERED_USE_ALLOCATOR_TRAITS 0
+#endif
+
+#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 1
# include <memory>
+#elif BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 2
+# include <boost/container/allocator/allocator_traits.hpp>
#endif
#if !defined(BOOST_NO_0X_HDR_TYPE_TRAITS)
@@ -190,7 +207,7 @@
// Uses the standard versions if available.
// (although untested as I don't have access to a standard version yet)
-#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
+#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 1
template <typename Alloc>
struct allocator_traits : std::allocator_traits<Alloc> {};
@@ -198,9 +215,22 @@
template <typename Alloc, typename T>
struct rebind_wrap
{
- typedef typename std::allocator_traits<Alloc>::rebind_alloc<T> type;
+ typedef typename std::allocator_traits<Alloc>::
+ template rebind_alloc<T> type;
};
+#elif BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 2
+
+ template <typename Alloc>
+ struct allocator_traits :
+ boost::container::allocator_traits<Alloc> {};
+
+ template <typename Alloc, typename T>
+ struct rebind_wrap :
+ boost::container::allocator_traits<Alloc>::
+ template portable_rebind_alloc<T>
+ {};
+
#else
// TODO: Does this match std::allocator_traits<Alloc>::rebind_alloc<T>?
Modified: branches/quickbook-dev/boost/unordered/detail/buckets.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/detail/buckets.hpp (original)
+++ branches/quickbook-dev/boost/unordered/detail/buckets.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,6 +18,7 @@
#include <boost/type_traits/alignment_of.hpp>
#include <boost/swap.hpp>
#include <boost/assert.hpp>
+#include <boost/limits.hpp>
#if defined(BOOST_MSVC)
#pragma warning(push)
@@ -29,7 +30,8 @@
template <typename Types> struct table;
template <typename NodePointer> struct bucket;
struct ptr_bucket;
- template <typename A, typename Bucket, typename Node> struct buckets;
+ template <typename A, typename Bucket, typename Node, typename Policy>
+ struct buckets;
///////////////////////////////////////////////////////////////////
//
@@ -181,10 +183,95 @@
///////////////////////////////////////////////////////////////////
//
+ // Hash Policy
+ //
+ // Don't really want buckets to derive from this, but will for now.
+
+ template <typename SizeT>
+ struct prime_policy
+ {
+ template <typename Hash, typename T>
+ static inline SizeT apply_hash(Hash const& hf, T const& x) {
+ return hf(x);
+ }
+
+ static inline SizeT to_bucket(SizeT bucket_count, SizeT hash) {
+ return hash % bucket_count;
+ }
+
+ static inline SizeT new_bucket_count(SizeT min) {
+ return boost::unordered::detail::next_prime(min);
+ }
+
+ static inline SizeT prev_bucket_count(SizeT max) {
+ return boost::unordered::detail::prev_prime(max);
+ }
+ };
+
+ template <typename SizeT>
+ struct mix64_policy
+ {
+ template <typename Hash, typename T>
+ static inline SizeT apply_hash(Hash const& hf, T const& x) {
+ SizeT key = hf(x);
+ key = (~key) + (key << 21); // key = (key << 21) - key - 1;
+ key = key ^ (key >> 24);
+ key = (key + (key << 3)) + (key << 8); // key * 265
+ key = key ^ (key >> 14);
+ key = (key + (key << 2)) + (key << 4); // key * 21
+ key = key ^ (key >> 28);
+ key = key + (key << 31);
+ return key;
+ }
+
+ static inline SizeT to_bucket(SizeT bucket_count, SizeT hash) {
+ return hash & (bucket_count - 1);
+ }
+
+ static inline SizeT new_bucket_count(SizeT min) {
+ if (min <= 4) return 4;
+ --min;
+ min |= min >> 1;
+ min |= min >> 2;
+ min |= min >> 4;
+ min |= min >> 8;
+ min |= min >> 16;
+ min |= min >> 32;
+ return min + 1;
+ }
+
+ static inline SizeT prev_bucket_count(SizeT max) {
+ max |= max >> 1;
+ max |= max >> 2;
+ max |= max >> 4;
+ max |= max >> 8;
+ max |= max >> 16;
+ max |= max >> 32;
+ return (max >> 1) + 1;
+ }
+ };
+
+ template <int digits, int radix>
+ struct pick_policy_impl {
+ typedef prime_policy<std::size_t> type;
+ };
+
+ template <>
+ struct pick_policy_impl<64, 2> {
+ typedef mix64_policy<std::size_t> type;
+ };
+
+ struct pick_policy :
+ pick_policy_impl<
+ std::numeric_limits<std::size_t>::digits,
+ std::numeric_limits<std::size_t>::radix> {};
+
+ ///////////////////////////////////////////////////////////////////
+ //
// Buckets
- template <typename A, typename Bucket, typename Node>
- struct buckets
+ template <typename A, typename Bucket, typename Node, typename Policy>
+ struct buckets : Policy
{
private:
buckets(buckets const&);
@@ -247,7 +334,7 @@
std::size_t max_bucket_count() const
{
// -1 to account for the start bucket.
- return boost::unordered::detail::prev_prime(
+ return this->prev_bucket_count(
bucket_allocator_traits::max_size(bucket_alloc()) - 1);
}
@@ -292,7 +379,7 @@
if (!ptr) return 0;
std::size_t count = 0;
- while(ptr && ptr->hash_ % this->bucket_count_ == index)
+ while(ptr && this->to_bucket(this->bucket_count_, ptr->hash_) == index)
{
++count;
ptr = static_cast<node_pointer>(ptr->next_);
@@ -487,7 +574,7 @@
else
{
bucket_pointer next_bucket = this->get_bucket(
- next->hash_ % this->bucket_count_);
+ this->to_bucket(this->bucket_count_, next->hash_));
if (next_bucket != bucket)
{
@@ -513,7 +600,7 @@
if (n == end) return;
std::size_t new_bucket_index =
- n->hash_ % this->bucket_count_;
+ this->to_bucket(this->bucket_count_, n->hash_);
if (bucket_index != new_bucket_index) {
bucket_index = new_bucket_index;
break;
@@ -529,7 +616,7 @@
if (n == end) break;
std::size_t new_bucket_index =
- n->hash_ % this->bucket_count_;
+ this->to_bucket(this->bucket_count_, n->hash_);
if (bucket_index != new_bucket_index) {
bucket_index = new_bucket_index;
this->get_bucket(bucket_index)->next_ = previous_pointer();
@@ -538,7 +625,7 @@
// Finally fix the bucket containing the trailing node.
if (n) {
- this->get_bucket(n->hash_ % this->bucket_count_)->next_
+ this->get_bucket(this->to_bucket(this->bucket_count_, n->hash_))->next_
= prev;
}
}
Modified: branches/quickbook-dev/boost/unordered/detail/equivalent.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/detail/equivalent.hpp (original)
+++ branches/quickbook-dev/boost/unordered/detail/equivalent.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -136,6 +136,8 @@
typedef boost::unordered::detail::grouped_table_impl<types> table;
typedef boost::unordered::detail::set_extractor<value_type> extractor;
+
+ typedef boost::unordered::detail::pick_policy::type policy;
};
template <typename A, typename K, typename M, typename H, typename P>
@@ -160,6 +162,8 @@
typedef boost::unordered::detail::grouped_table_impl<types> table;
typedef boost::unordered::detail::map_extractor<key_type, value_type>
extractor;
+
+ typedef boost::unordered::detail::pick_policy::type policy;
};
template <typename Types>
@@ -219,7 +223,7 @@
Key const& k,
Pred const& eq) const
{
- std::size_t bucket_index = hash % this->bucket_count_;
+ std::size_t bucket_index = this->to_bucket(this->bucket_count_, hash);
node_pointer n = this->get_start(bucket_index);
for (;;)
@@ -234,7 +238,7 @@
}
else
{
- if (node_hash % this->bucket_count_ != bucket_index)
+ if (this->to_bucket(this->bucket_count_, node_hash) != bucket_index)
return node_pointer();
}
@@ -397,25 +401,25 @@
if(pos) {
this->add_after_node(n, pos);
if (n->next_) {
- std::size_t next_bucket =
- static_cast<node_pointer>(n->next_)->hash_ %
- this->bucket_count_;
- if (next_bucket != hash % this->bucket_count_) {
+ std::size_t next_bucket = this->to_bucket(
+ this->bucket_count_,
+ static_cast<node_pointer>(n->next_)->hash_);
+ if (next_bucket != this->to_bucket(this->bucket_count_, hash)) {
this->get_bucket(next_bucket)->next_ = n;
}
}
}
else {
- bucket_pointer b = this->get_bucket(hash % this->bucket_count_);
+ bucket_pointer b = this->get_bucket(this->to_bucket(this->bucket_count_, hash));
if (!b->next_)
{
previous_pointer start_node = this->get_previous_start();
if (start_node->next_) {
- this->get_bucket(
+ this->get_bucket(this->to_bucket(this->bucket_count_,
static_cast<node_pointer>(start_node->next_)->hash_
- % this->bucket_count_)->next_ = n;
+ ))->next_ = n;
}
b->next_ = start_node;
@@ -435,7 +439,7 @@
node_pointer emplace_impl(node_constructor& a)
{
key_type const& k = this->get_key(a.value());
- std::size_t hash = this->hash_function()(k);
+ std::size_t hash = this->hash(k);
node_pointer position = this->find_node(hash, k);
// reserve has basic exception safety if the hash function
@@ -447,7 +451,7 @@
void emplace_impl_no_rehash(node_constructor& a)
{
key_type const& k = this->get_key(a.value());
- std::size_t hash = this->hash_function()(k);
+ std::size_t hash = this->hash(k);
this->add_node(a, hash,
this->find_node(hash, k));
}
@@ -523,8 +527,8 @@
{
if(!this->size_) return 0;
- std::size_t hash = this->hash_function()(k);
- std::size_t bucket_index = hash % this->bucket_count_;
+ std::size_t hash = this->hash(k);
+ std::size_t bucket_index = this->to_bucket(this->bucket_count_, hash);
bucket_pointer bucket = this->get_bucket(bucket_index);
previous_pointer prev = bucket->next_;
@@ -535,7 +539,7 @@
if (!prev->next_) return 0;
std::size_t node_hash =
static_cast<node_pointer>(prev->next_)->hash_;
- if (node_hash % this->bucket_count_ != bucket_index)
+ if (this->to_bucket(this->bucket_count_, node_hash) != bucket_index)
return 0;
if (node_hash == hash &&
this->key_eq()(k, this->get_key(
@@ -560,7 +564,7 @@
node_pointer next = static_cast<node_pointer>(r->next_);
bucket_pointer bucket = this->get_bucket(
- r->hash_ % this->bucket_count_);
+ this->to_bucket(this->bucket_count_, r->hash_));
previous_pointer prev = unlink_node(*bucket, r);
this->fix_buckets(bucket, prev, next);
@@ -574,7 +578,7 @@
{
if (r1 == r2) return r2;
- std::size_t bucket_index = r1->hash_ % this->bucket_count_;
+ std::size_t bucket_index = this->to_bucket(this->bucket_count_, r1->hash_);
previous_pointer prev = unlink_nodes(
*this->get_bucket(bucket_index), r1, r2);
this->fix_buckets_range(bucket_index, prev, r1, r2);
@@ -809,7 +813,8 @@
static previous_pointer place_in_bucket(buckets& dst,
previous_pointer prev, node_pointer end)
{
- bucket_pointer b = dst.get_bucket(end->hash_ % dst.bucket_count_);
+ bucket_pointer b = dst.get_bucket(dst.to_bucket(
+ dst.bucket_count_, end->hash_));
if (!b->next_) {
b->next_ = static_cast<node_pointer>(prev);
Modified: branches/quickbook-dev/boost/unordered/detail/extract_key.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/detail/extract_key.hpp (original)
+++ branches/quickbook-dev/boost/unordered/detail/extract_key.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -51,13 +51,6 @@
return v;
}
-#if BOOST_UNORDERED_USE_RV_REF
- static key_type const& extract(BOOST_RV_REF(key_type) v)
- {
- return v;
- }
-#endif
-
static no_key extract()
{
return no_key();
@@ -69,7 +62,6 @@
{
return no_key();
}
-
#else
template <class Arg>
static no_key extract(Arg const&)
@@ -106,13 +98,6 @@
return v;
}
- // TODO: Why does this cause errors?
- //
- //static key_type const& extract(BOOST_RV_REF(key_type) v)
- //{
- // return v;
- //}
-
template <class Second>
static key_type const& extract(std::pair<key_type, Second> const& v)
{
Modified: branches/quickbook-dev/boost/unordered/detail/table.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/detail/table.hpp (original)
+++ branches/quickbook-dev/boost/unordered/detail/table.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,15 +24,16 @@
template <typename NodePointer, typename Value> struct iterator;
template <typename ConstNodePointer, typename NodePointer,
typename Value> struct c_iterator;
- template <typename NodePointer, typename Value> struct l_iterator;
+ template <typename NodePointer, typename Value, typename Policy>
+ struct l_iterator;
template <typename ConstNodePointer, typename NodePointer,
- typename Value> struct cl_iterator;
+ typename Value, typename Policy> struct cl_iterator;
// Local Iterators
//
// all no throw
- template <typename NodePointer, typename Value>
+ template <typename NodePointer, typename Value, typename Policy>
struct l_iterator
: public boost::iterator<
std::forward_iterator_tag, Value, std::ptrdiff_t,
@@ -40,7 +41,7 @@
{
#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
template <typename ConstNodePointer, typename NodePointer2,
- typename Value2>
+ typename Value2, typename Policy2>
friend struct boost::unordered::iterator_detail::cl_iterator;
private:
#endif
@@ -66,7 +67,8 @@
l_iterator& operator++() {
ptr_ = static_cast<node_pointer>(ptr_->next_);
- if (ptr_ && ptr_->hash_ % bucket_count_ != bucket_)
+ if (ptr_ && Policy::to_bucket(bucket_count_, ptr_->hash_)
+ != bucket_)
ptr_ = node_pointer();
return *this;
}
@@ -86,14 +88,15 @@
}
};
- template <typename ConstNodePointer, typename NodePointer, typename Value>
+ template <typename ConstNodePointer, typename NodePointer, typename Value,
+ typename Policy>
struct cl_iterator
: public boost::iterator<
std::forward_iterator_tag, Value, std::ptrdiff_t,
ConstNodePointer, Value const&>
{
friend struct boost::unordered::iterator_detail::l_iterator
- <NodePointer, Value>;
+ <NodePointer, Value, Policy>;
private:
typedef NodePointer node_pointer;
@@ -109,7 +112,7 @@
ptr_(x), bucket_(b), bucket_count_(c) {}
cl_iterator(boost::unordered::iterator_detail::l_iterator<
- NodePointer, Value> const& x) :
+ NodePointer, Value, Policy> const& x) :
ptr_(x.ptr_), bucket_(x.bucket_), bucket_count_(x.bucket_count_)
{}
@@ -124,7 +127,8 @@
cl_iterator& operator++() {
ptr_ = static_cast<node_pointer>(ptr_->next_);
- if (ptr_ && ptr_->hash_ % bucket_count_ != bucket_)
+ if (ptr_ && Policy::to_bucket(bucket_count_, ptr_->hash_)
+ != bucket_)
ptr_ = node_pointer();
return *this;
}
@@ -302,7 +306,8 @@
boost::unordered::detail::buckets<
typename Types::allocator,
typename Types::bucket,
- typename Types::node>,
+ typename Types::node,
+ typename Types::policy>,
boost::unordered::detail::functions<
typename Types::hasher,
typename Types::key_equal>
@@ -318,6 +323,7 @@
typedef typename Types::value_type value_type;
typedef typename Types::table table_impl;
typedef typename Types::link_pointer link_pointer;
+ typedef typename Types::policy policy;
typedef boost::unordered::detail::functions<
typename Types::hasher,
@@ -326,7 +332,8 @@
typedef boost::unordered::detail::buckets<
typename Types::allocator,
typename Types::bucket,
- typename Types::node> buckets;
+ typename Types::node,
+ typename Types::policy> buckets;
typedef typename buckets::node_allocator node_allocator;
typedef typename buckets::node_allocator_traits node_allocator_traits;
@@ -338,9 +345,9 @@
typedef boost::unordered::iterator_detail::
c_iterator<const_node_pointer, node_pointer, value_type> c_iterator;
typedef boost::unordered::iterator_detail::
- l_iterator<node_pointer, value_type> l_iterator;
+ l_iterator<node_pointer, value_type, policy> l_iterator;
typedef boost::unordered::iterator_detail::
- cl_iterator<const_node_pointer, node_pointer, value_type>
+ cl_iterator<const_node_pointer, node_pointer, value_type, policy>
cl_iterator;
// Members
@@ -395,7 +402,7 @@
// Or from rehash post-condition:
// count > size / mlf_
- return boost::unordered::detail::next_prime(
+ return this->new_bucket_count(
boost::unordered::detail::double_to_size(floor(
static_cast<double>(size) /
static_cast<double>(mlf_))) + 1);
@@ -408,7 +415,7 @@
hasher const& hf,
key_equal const& eq,
node_allocator const& a) :
- buckets(a, boost::unordered::detail::next_prime(num_buckets)),
+ buckets(a, this->new_bucket_count(num_buckets)),
functions(hf, eq),
mlf_(1.0f),
max_load_(0)
@@ -586,6 +593,11 @@
return extractor::extract(x);
}
+ std::size_t hash(key_type const& k) const
+ {
+ return this->apply_hash(this->hash_function(), k);
+ }
+
// Find Node
template <typename Key, typename Hash, typename Pred>
@@ -596,7 +608,7 @@
{
if (!this->size_) return node_pointer();
return static_cast<table_impl const*>(this)->
- find_node_impl(hash_function(k), k, eq);
+ find_node_impl(this->apply_hash(hash_function, k), k, eq);
}
node_pointer find_node(
@@ -612,7 +624,7 @@
{
if (!this->size_) return node_pointer();
return static_cast<table_impl const*>(this)->
- find_node_impl(this->hash_function()(k), k, this->key_eq());
+ find_node_impl(this->hash(k), k, this->key_eq());
}
node_pointer find_matching_node(node_pointer n) const
@@ -666,10 +678,10 @@
if(!this->size_) {
if(this->buckets_) this->delete_buckets();
- this->bucket_count_ = next_prime(min_buckets);
+ this->bucket_count_ = this->new_bucket_count(min_buckets);
}
else {
- min_buckets = next_prime((std::max)(min_buckets,
+ min_buckets = this->new_bucket_count((std::max)(min_buckets,
boost::unordered::detail::double_to_size(floor(
static_cast<double>(this->size_) /
static_cast<double>(mlf_))) + 1));
Modified: branches/quickbook-dev/boost/unordered/detail/unique.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/detail/unique.hpp (original)
+++ branches/quickbook-dev/boost/unordered/detail/unique.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -132,6 +132,8 @@
typedef boost::unordered::detail::table_impl<types> table;
typedef boost::unordered::detail::set_extractor<value_type> extractor;
+
+ typedef boost::unordered::detail::pick_policy::type policy;
};
template <typename A, typename K, typename M, typename H, typename P>
@@ -156,6 +158,8 @@
typedef boost::unordered::detail::table_impl<types> table;
typedef boost::unordered::detail::map_extractor<key_type, value_type>
extractor;
+
+ typedef boost::unordered::detail::pick_policy::type policy;
};
template <typename Types>
@@ -217,7 +221,7 @@
Key const& k,
Pred const& eq) const
{
- std::size_t bucket_index = hash % this->bucket_count_;
+ std::size_t bucket_index = this->to_bucket(this->bucket_count_, hash);
node_pointer n = this->get_start(bucket_index);
for (;;)
@@ -232,7 +236,7 @@
}
else
{
- if (node_hash % this->bucket_count_ != bucket_index)
+ if (this->to_bucket(this->bucket_count_, node_hash) != bucket_index)
return node_pointer();
}
@@ -298,16 +302,16 @@
node_pointer n = a.release();
n->hash_ = hash;
- bucket_pointer b = this->get_bucket(hash % this->bucket_count_);
+ bucket_pointer b = this->get_bucket(this->to_bucket(this->bucket_count_, hash));
if (!b->next_)
{
previous_pointer start_node = this->get_previous_start();
if (start_node->next_) {
- this->get_bucket(
- static_cast<node_pointer>(start_node->next_)->hash_ %
- this->bucket_count_)->next_ = n;
+ this->get_bucket(this->to_bucket(this->bucket_count_,
+ static_cast<node_pointer>(start_node->next_)->hash_)
+ )->next_ = n;
}
b->next_ = start_node;
@@ -328,7 +332,7 @@
{
typedef typename value_type::second_type mapped_type;
- std::size_t hash = this->hash_function()(k);
+ std::size_t hash = this->hash(k);
node_pointer pos = this->find_node(hash, k);
if (pos) return pos->value();
@@ -389,7 +393,7 @@
emplace_return emplace_impl(key_type const& k,
BOOST_UNORDERED_EMPLACE_ARGS)
{
- std::size_t hash = this->hash_function()(k);
+ std::size_t hash = this->hash(k);
node_pointer pos = this->find_node(hash, k);
if (pos) return emplace_return(iterator(pos), false);
@@ -409,7 +413,7 @@
emplace_return emplace_impl_with_node(node_constructor& a)
{
key_type const& k = this->get_key(a.value());
- std::size_t hash = this->hash_function()(k);
+ std::size_t hash = this->hash(k);
node_pointer pos = this->find_node(hash, k);
if (pos) return emplace_return(iterator(pos), false);
@@ -473,7 +477,7 @@
void insert_range_empty(node_constructor& a, key_type const& k,
InputIt i, InputIt j)
{
- std::size_t hash = this->hash_function()(k);
+ std::size_t hash = this->hash(k);
a.construct_node();
a.construct_value2(*i);
this->reserve_for_insert(this->size_ +
@@ -486,7 +490,7 @@
InputIt i, InputIt j)
{
// No side effects in this initial code
- std::size_t hash = this->hash_function()(k);
+ std::size_t hash = this->hash(k);
node_pointer pos = this->find_node(hash, k);
if (!pos) {
@@ -523,8 +527,8 @@
{
if(!this->size_) return 0;
- std::size_t hash = this->hash_function()(k);
- std::size_t bucket_index = hash % this->bucket_count_;
+ std::size_t hash = this->hash(k);
+ std::size_t bucket_index = this->to_bucket(this->bucket_count_, hash);
bucket_pointer bucket = this->get_bucket(bucket_index);
previous_pointer prev = bucket->next_;
@@ -535,7 +539,7 @@
if (!prev->next_) return 0;
std::size_t node_hash =
static_cast<node_pointer>(prev->next_)->hash_;
- if (node_hash % this->bucket_count_ != bucket_index)
+ if (this->to_bucket(this->bucket_count_, node_hash) != bucket_index)
return 0;
if (node_hash == hash &&
this->key_eq()(k, this->get_key(
@@ -557,7 +561,7 @@
node_pointer next = static_cast<node_pointer>(r->next_);
bucket_pointer bucket = this->get_bucket(
- r->hash_ % this->bucket_count_);
+ this->to_bucket(this->bucket_count_, r->hash_));
previous_pointer prev = unlink_node(*bucket, r);
this->fix_buckets(bucket, prev, next);
@@ -571,7 +575,7 @@
{
if (r1 == r2) return r2;
- std::size_t bucket_index = r1->hash_ % this->bucket_count_;
+ std::size_t bucket_index = this->to_bucket(this->bucket_count_, r1->hash_);
previous_pointer prev = unlink_nodes(
*this->get_bucket(bucket_index), r1, r2);
this->fix_buckets_range(bucket_index, prev, r1, r2);
@@ -689,7 +693,8 @@
previous_pointer prev)
{
node_pointer n = static_cast<node_pointer>(prev->next_);
- bucket_pointer b = dst.get_bucket(n->hash_ % dst.bucket_count_);
+ bucket_pointer b = dst.get_bucket(dst.to_bucket(dst.bucket_count_,
+ n->hash_));
if (!b->next_) {
b->next_ = prev;
Modified: branches/quickbook-dev/boost/unordered/detail/util.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/detail/util.hpp (original)
+++ branches/quickbook-dev/boost/unordered/detail/util.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -56,7 +56,7 @@
// primes
#define BOOST_UNORDERED_PRIMES \
- (5ul)(11ul)(17ul)(29ul)(37ul)(53ul)(67ul)(79ul) \
+ (17ul)(29ul)(37ul)(53ul)(67ul)(79ul) \
(97ul)(131ul)(193ul)(257ul)(389ul)(521ul)(769ul) \
(1031ul)(1543ul)(2053ul)(3079ul)(6151ul)(12289ul)(24593ul) \
(49157ul)(98317ul)(196613ul)(393241ul)(786433ul) \
Modified: branches/quickbook-dev/boost/unordered/unordered_map.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/unordered_map.hpp (original)
+++ branches/quickbook-dev/boost/unordered/unordered_map.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -465,7 +465,8 @@
size_type bucket(const key_type& k) const
{
- return table_.hash_function()(k) % table_.bucket_count_;
+ return table_.to_bucket(table_.bucket_count_,
+ table_.hash(k));
}
local_iterator begin(size_type n)
@@ -946,7 +947,8 @@
size_type bucket(const key_type& k) const
{
- return table_.hash_function()(k) % table_.bucket_count_;
+ return table_.to_bucket(table_.bucket_count_,
+ table_.hash(k));
}
local_iterator begin(size_type n)
Modified: branches/quickbook-dev/boost/unordered/unordered_set.hpp
==============================================================================
--- branches/quickbook-dev/boost/unordered/unordered_set.hpp (original)
+++ branches/quickbook-dev/boost/unordered/unordered_set.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -450,7 +450,8 @@
size_type bucket(const key_type& k) const
{
- return table_.hash_function()(k) % table_.bucket_count_;
+ return table_.to_bucket(table_.bucket_count_,
+ table_.hash(k));
}
local_iterator begin(size_type n)
@@ -921,7 +922,8 @@
size_type bucket(const key_type& k) const
{
- return table_.hash_function()(k) % table_.bucket_count_;
+ return table_.to_bucket(table_.bucket_count_,
+ table_.hash(k));
}
local_iterator begin(size_type n)
Modified: branches/quickbook-dev/boost/utility/base_from_member.hpp
==============================================================================
--- branches/quickbook-dev/boost/utility/base_from_member.hpp (original)
+++ branches/quickbook-dev/boost/utility/base_from_member.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,6 +1,6 @@
// boost utility/base_from_member.hpp header file --------------------------//
-// Copyright 2001, 2003, 2004 Daryle Walker. Use, modification, and
+// Copyright 2001, 2003, 2004, 2012 Daryle Walker. Use, modification, and
// distribution are subject to the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or a copy at
// <http://www.boost.org/LICENSE_1_0.txt>.)
@@ -10,10 +10,15 @@
#ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP
#define BOOST_UTILITY_BASE_FROM_MEMBER_HPP
+#include <boost/config.hpp>
#include <boost/preprocessor/arithmetic/inc.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
// Base-from-member arity configuration macro ------------------------------//
@@ -53,6 +58,59 @@
namespace boost
{
+namespace detail
+{
+
+// Type-unmarking class template -------------------------------------------//
+
+// Type-trait to get the raw type, i.e. the type without top-level reference nor
+// cv-qualification, from a type expression. Mainly for function arguments, any
+// reference part is stripped first.
+
+// Contributed by Daryle Walker
+
+template < typename T >
+struct remove_cv_ref
+{
+ typedef typename ::boost::remove_cv<typename
+ ::boost::remove_reference<T>::type>::type type;
+
+}; // boost::detail::remove_cv_ref
+
+// Unmarked-type comparison class template ---------------------------------//
+
+// Type-trait to check if two type expressions have the same raw type.
+
+// Contributed by Daryle Walker, based on a work-around by Luc Danton
+
+template < typename T, typename U >
+struct is_related
+ : public ::boost::is_same<
+ typename ::boost::detail::remove_cv_ref<T>::type,
+ typename ::boost::detail::remove_cv_ref<U>::type >
+{};
+
+// Enable-if-on-unidentical-unmarked-type class template -------------------//
+
+// Enable-if on the first two type expressions NOT having the same raw type.
+
+// Contributed by Daryle Walker, based on a work-around by Luc Danton
+
+#ifndef BOOST_NO_VARIADIC_TEMPLATES
+template<typename ...T>
+struct enable_if_unrelated
+ : public ::boost::enable_if_c<true>
+{};
+
+template<typename T, typename U, typename ...U2>
+struct enable_if_unrelated<T, U, U2...>
+ : public ::boost::disable_if< ::boost::detail::is_related<T, U> >
+{};
+#endif
+
+} // namespace boost::detail
+
+
// Base-from-member class template -----------------------------------------//
// Helper to initialize a base object so a derived class can use this
@@ -68,12 +126,24 @@
protected:
MemberType member;
+#if !defined(BOOST_NO_RVALUE_REFERENCES) && \
+ !defined(BOOST_NO_VARIADIC_TEMPLATES) && \
+ !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS)
+ template <typename ...T, typename EnableIf = typename
+ ::boost::detail::enable_if_unrelated<base_from_member, T...>::type>
+ explicit BOOST_CONSTEXPR base_from_member( T&& ...x )
+ BOOST_NOEXCEPT_IF( BOOST_NOEXCEPT_EXPR(::new ((void*) 0) MemberType(
+ static_cast<T&&>(x)... )) ) // no std::is_nothrow_constructible...
+ : member( static_cast<T&&>(x)... ) // ...nor std::forward needed
+ {}
+#else
base_from_member()
: member()
{}
BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY),
BOOST_PRIVATE_CTR_DEF, _ )
+#endif
}; // boost::base_from_member
Modified: branches/quickbook-dev/boost/uuid/seed_rng.hpp
==============================================================================
--- branches/quickbook-dev/boost/uuid/seed_rng.hpp (original)
+++ branches/quickbook-dev/boost/uuid/seed_rng.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -155,7 +155,7 @@
{
// the not_used variable is to suppress warnings
size_t not_used = 0;
- not_used = std::fread( buffer, 1, 20, random_ );
+ not_used += std::fread( buffer, 1, 20, random_ );
}
// using an uninitialized buffer[] if fopen fails
Modified: branches/quickbook-dev/boost/uuid/sha1.hpp
==============================================================================
--- branches/quickbook-dev/boost/uuid/sha1.hpp (original)
+++ branches/quickbook-dev/boost/uuid/sha1.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -8,6 +8,7 @@
// Revision History
// 29 May 2007 - Initial Revision
// 25 Feb 2008 - moved to namespace boost::uuids::detail
+// 10 Jan 2012 - can now handle the full size of messages (2^64 - 1 bits)
// This is a byte oriented implementation
Modified: branches/quickbook-dev/boost/variant/detail/visitation_impl.hpp
==============================================================================
--- branches/quickbook-dev/boost/variant/detail/visitation_impl.hpp (original)
+++ branches/quickbook-dev/boost/variant/detail/visitation_impl.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -261,7 +261,7 @@
# undef BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_CASE
- default: BOOST_ASSERT(!"Boost.Variant internal error: 'which' out of range.");
+ default: break;
}
// If not handled in this iteration, continue unrolling:
Modified: branches/quickbook-dev/boost/xpressive/detail/core/adaptor.hpp
==============================================================================
--- branches/quickbook-dev/boost/xpressive/detail/core/adaptor.hpp (original)
+++ branches/quickbook-dev/boost/xpressive/detail/core/adaptor.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
&& ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
// Ugh, gcc has an optimizer bug which elides this c'tor call
// resulting in pure virtual function calls.
- __attribute__((noinline))
+ __attribute__((__noinline__))
#endif
: xpr_(xpr)
{
Modified: branches/quickbook-dev/doc/test/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/doc/test/Jamfile.v2 (original)
+++ branches/quickbook-dev/doc/test/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -186,6 +186,8 @@
<xsl:param>chunk.section.depth=1
<xsl:param>boost.root=../../..
<xsl:param>navig.graphics=1
+ <xsl:param>boost.mathjax=1
+ <xsl:path>$(images_location)/..
# PDF Options:
@@ -205,3 +207,4 @@
+
Modified: branches/quickbook-dev/doc/test/test.qbk
==============================================================================
--- branches/quickbook-dev/doc/test/test.qbk (original)
+++ branches/quickbook-dev/doc/test/test.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -606,6 +606,26 @@
[endsect]
+[section Equations]
+
+This page is largely to test equation handling in various browsers, unfortunately none of this works as well as it should (or at all?)
+in Internet Explorer....
+
+This equation is formatted from Latex text:
+
+'''<inlinemediaobject><textobject role="tex">ax^2 + bx + c = 0</textobject></inlinemediaobject>'''
+
+This equation is formed from MathML:
+
+'''<inlinemediaobject><textobject role="MathML"><?dbhtml-include href="test.mml"?></textobject></inlinemediaobject>'''
+
+This equation is SVG:
+
+'''<inlinemediaobject><imageobject><imagedata format="SVG" fileref="../test.svg"></imagedata></imageobject></inlinemediaobject>'''
+
+
+[endsect]
+
[include test_HTML4_symbols.qbk]
[include remez.qbk]
Modified: branches/quickbook-dev/index.html
==============================================================================
--- branches/quickbook-dev/index.html (original)
+++ branches/quickbook-dev/index.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -55,7 +55,7 @@
<h3>Changes in this release</h3>
- <p>This release includes ? new libraries
+ <p>This release includes one new library, Boost.Heap,
as well as updates to many existing libraries. See
<a href="http://www.boost.org/users/history/version_1_49_0">Release
History</a> for more information.</p>
Modified: branches/quickbook-dev/libs/algorithm/string/doc/usage.xml
==============================================================================
--- branches/quickbook-dev/libs/algorithm/string/doc/usage.xml (original)
+++ branches/quickbook-dev/libs/algorithm/string/doc/usage.xml 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -163,7 +163,7 @@
<title>Trimming</title>
<para>
- When parsing the input from a user, strings usually have unwanted leading or trailing
+ When parsing the input from a user, strings often have unwanted leading or trailing
characters. To get rid of them, we need trim functions:
</para>
<programlisting>
Modified: branches/quickbook-dev/libs/algorithm/test/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/algorithm/test/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/algorithm/test/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,28 @@
# Clamp tests
[ run clamp_test.cpp : : : : clamp_test ]
+
+# Cxx11 tests
+ [ run all_of_test.cpp : : : : all_of_test ]
+ [ run any_of_test.cpp : : : : any_of_test ]
+ [ run none_of_test.cpp : : : : none_of_test ]
+ [ run one_of_test.cpp : : : : one_of_test ]
+
+ [ run ordered_test.cpp : : : : ordered_test ]
+ [ run find_if_not_test1.cpp : : : : find_if_not_test1 ]
+ [ run copy_n_test1.cpp : : : : copy_n_test1 ]
+ [ run iota_test1.cpp : : : : iota_test1 ]
+
+ [ run is_permutation_test1.cpp : : : : is_permutation_test1 ]
+ [ run partition_point_test1.cpp : : : : partition_point_test1 ]
+ [ run is_partitioned_test1.cpp : : : : is_partitioned_test1 ]
+ [ run partition_copy_test1.cpp : : : : partition_copy_test1 ]
+
+# Hex tests
+ [ run hex_test1.cpp : : : : hex_test1 ]
+ [ run hex_test2.cpp : : : : hex_test2 ]
+ [ run hex_test3.cpp : : : : hex_test3 ]
+ [ compile-fail hex_fail1.cpp ]
;
}
Modified: branches/quickbook-dev/libs/asio/doc/history.qbk
==============================================================================
--- branches/quickbook-dev/libs/asio/doc/history.qbk (original)
+++ branches/quickbook-dev/libs/asio/doc/history.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -29,6 +29,11 @@
* Fixed a non-paged pool "leak" on Windows when an `io_service` is repeatedly
run without anything to do
([@https://svn.boost.org/trac/boost/ticket/6321 #6321]).
+* Reverted earlier change to allow some speculative operations to be performed
+ without holding the lock, as it introduced a race condition in some
+ multithreaded scenarios.
+* Fixed a bug where the second buffer in an array of two buffers may be ignored
+ if the first buffer is empty.
[heading Asio 1.6.1 / Boost 1.48]
Modified: branches/quickbook-dev/libs/chrono/doc/chrono.qbk
==============================================================================
--- branches/quickbook-dev/libs/chrono/doc/chrono.qbk (original)
+++ branches/quickbook-dev/libs/chrono/doc/chrono.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -54,11 +54,12 @@
[def __precondition [*PreConditions:]]
[def __requires [*Requires:]]
[def __params [*Parameters:]]
-[template param[p] [*[p]:]]
+[template param [p] [*[p]:]]
[template mu[]'''μ'''] [/ µ Greek small letter mu]
[template plusminus[]'''±'''] [/ ? plus or minus sign]
+[def __mus [mu]s]
[/===============================================]
[def __common_type `common_type`]
@@ -265,6 +266,8 @@
[def __prefix [link chrono.reference.io.duration_style_hpp.duration_style `prefix`]]
[def __symbol [link chrono.reference.io.duration_style_hpp.duration_style `symbol`]]
+[def __symbol_format [link chrono.reference.io.duration_io_hpp.manipulators.symbol_format `symbol_format`]]
+[def __name_format [link chrono.reference.io.duration_io_hpp.manipulators.name_format `name_format`]]
[def __duration_fmt [link chrono.reference.io.duration_io_hpp.manipulators.duration_fmt `duration_fmt`]]
[def __duration_fmt__c1 [link chrono.reference.io.duration_io_hpp.manipulators.duration_fmt.c1 `duration_fmt`]]
[def __duration_fmt__op_duration_style [link chrono.reference.io.duration_io_hpp.manipulators.duration_fmt.op_duration_style `operator duration_style_type`]]
@@ -279,32 +282,72 @@
[def __duration_style_io_saver__d [link chrono.reference.io.ios_state_hpp.ioss.duration_style_io_saver.d `~duration_style_io_saver`]]
[def __duration_style_io_saver__restore [link chrono.reference.io.ios_state_hpp.ioss.duration_style_io_saver.restore `restore`]]
+[def __get_duration_style [link chrono.reference.io.ios_state_hpp.sag.get_duration_style `get_duration_style`]]
+[def __set_duration_style [link chrono.reference.io.ios_state_hpp.sag.set_duration_style `set_duration_style`]]
+[def __get_timezone [link chrono.reference.io.ios_state_hpp.sag.get_timezone `get_timezone`]]
+[def __set_timezone [link chrono.reference.io.ios_state_hpp.sag.set_timezone `set_timezone`]]
+[def __get_time_fmt [link chrono.reference.io.ios_state_hpp.sag.get_time_fmt `get_time_fmt`]]
+[def __set_time_fmt [link chrono.reference.io.ios_state_hpp.sag.set_time_fmt `set_time_fmt`]]
+
[def __duration__op_in [link chrono.reference.io.duration_io_hpp.streams.duration__op_in `operator >>`]]
[def __duration__op_out [link chrono.reference.io.duration_io_hpp.streams.duration__op_out `operator <<`]]
+[def __duration_get [link chrono.reference.io.duration_get_hpp.duration_get `duration_get`]]
+[def __duration_get_c [link chrono.reference.io.duration_get_hpp.duration_get.c `duration_get`]]
+[def __duration_get_d [link chrono.reference.io.duration_get_hpp.duration_get.d `~duration_get`]]
+[def __duration_get_get [link chrono.reference.io.duration_get_hpp.duration_get.get `get`]]
+[def __duration_get_get2 [link chrono.reference.io.duration_get_hpp.duration_get.get2 `get`]]
+[def __duration_get_get_unit [link chrono.reference.io.duration_get_hpp.duration_get.get_unit `get_unit`]]
+[def __duration_get_get_value [link chrono.reference.io.duration_get_hpp.duration_get.get_value `get_value`]]
+
+[def __duration_put [link chrono.reference.io.duration_put_hpp.duration_put `duration_put`]]
+[def __duration_put_c [link chrono.reference.io.duration_put_hpp.duration_put.c `duration_put`]]
+[def __duration_put_d [link chrono.reference.io.duration_put_hpp.duration_put.d `~duration_put`]]
+[def __duration_put_put [link chrono.reference.io.duration_put_hpp.duration_put.put `put`]]
+[def __duration_put_put2 [link chrono.reference.io.duration_put_hpp.duration_put.put2 `put`]]
+[def __duration_put_put_unit [link chrono.reference.io.duration_put_hpp.duration_put.put_unit `put_unit`]]
+[def __duration_put_put_value [link chrono.reference.io.duration_put_hpp.duration_put.put_value `put_value`]]
+
+[def __duration_units [link chrono.reference.io.duration_units_hpp.duration_units `duration_units`]]
+[def __duration_units_c [link chrono.reference.io.duration_units_hpp.duration_units.c `duration_units`]]
+[def __duration_units_d [link chrono.reference.io.duration_units_hpp.duration_units.d `~duration_units`]]
+[def __duration_units_get_n_d_valid_units_start [link chrono.reference.io.duration_units_hpp.duration_units.get_n_d_valid_units_start `get_n_d_valid_units_start`]]
+[def __duration_units_get_n_d_valid_units_end [link chrono.reference.io.duration_units_hpp.duration_units.get_n_d_valid_units_end `get_n_d_valid_units_end`]]
+[def __duration_units_get_n_d_unit [link chrono.reference.io.duration_units_hpp.duration_units.get_n_d_valid_unit `get_n_d_unit`]]
+[def __duration_units_do_get_n_d_unit [link chrono.reference.io.duration_units_hpp.duration_units.do_get_n_d_unit `do_get_n_d_unit`]]
+[def __duration_units_match_n_d_valid_unit [link chrono.reference.io.duration_units_hpp.duration_units.match_n_d_valid_unit `match_n_d_valid_unit`]]
+[def __duration_units_get_valid_units_start [link chrono.reference.io.duration_units_hpp.duration_units.get_valid_units_start `get_valid_units_start`]]
+[def __duration_units_get_valid_units_end [link chrono.reference.io.duration_units_hpp.duration_units.get_valid_units_end `get_valid_units_end`]]
+[def __duration_units_get_unit [link chrono.reference.io.duration_units_hpp.duration_units.get_unit `get_unit`]]
+[def __duration_units_do_get_unit [link chrono.reference.io.duration_units_hpp.duration_units.do_get_unit `do_get_unit`]]
+[def __duration_units_match_valid_unit [link chrono.reference.io.duration_units_hpp.duration_units.match_valid_unit `match_valid_unit`]]
+[def __duration_units_get_pattern [link chrono.reference.io.duration_units_hpp.duration_units.get_pattern `get_pattern`]]
+[def __duration_units_is_named_unit [link chrono.reference.io.duration_units_hpp.duration_units.is_named_unit `is_named_unit`]]
+[def __duration_units_do_is_named_unit [link chrono.reference.io.duration_units_hpp.duration_units.do_is_named_unit `do_is_named_unit`]]
+
[/==================]
[def __timezone_ns [link chrono.reference.io.timezone_hpp.timezone `timezone`]]
[def __timezone [link chrono.reference.io.timezone_hpp.timezone `timezone_type`]]
-[def __udt [link chrono.reference.io.timezone_hpp.timezone `udt`]]
+[def __utc [link chrono.reference.io.timezone_hpp.timezone `utc`]]
[def __local [link chrono.reference.io.timezone_hpp.timezone `local`]]
[def __time_fmt1 [link chrono.reference.io.time_point_io_hpp.manip.time_fmt1 `time_fmt`]]
[def __time_fmt2 [link chrono.reference.io.time_point_io_hpp.manip.time_fmt2 `time_fmt`]]
-[def __timezone_io_saver [link chrono.reference.io.time_point_io_hpp.ioss.timezone_io_saver `timezone_io_saver`]]
-[def __timezone_io_saver__c1 [link chrono.reference.io.time_point_io_hpp.ioss.timezone_io_saver.c1 `timezone_io_saver`]]
-[def __timezone_io_saver__c2 [link chrono.reference.io.time_point_io_hpp.ioss.timezone_io_saver.c2 `timezone_io_saver`]]
-[def __timezone_io_saver__d [link chrono.reference.io.time_point_io_hpp.ioss.timezone_io_saver.d `~timezone_io_saver`]]
-[def __timezone_io_saver__restore [link chrono.reference.io.time_point_io_hpp.ioss.timezone_io_saver.restore `restore`]]
-
-[def __time_fmt_io_saver [link chrono.reference.io.time_point_io_hpp.ioss.time_fmt_io_saver `time_fmt_io_saver`]]
-[def __time_fmt_io_saver__c1 [link chrono.reference.io.time_point_io_hpp.ioss.time_fmt_io_saver.c1 `time_fmt_io_saver`]]
-[def __time_fmt_io_saver__c2 [link chrono.reference.io.time_point_io_hpp.ioss.time_fmt_io_saver.c2 `time_fmt_io_saver`]]
-[def __time_fmt_io_saver__d [link chrono.reference.io.time_point_io_hpp.ioss.time_fmt_io_saver.d `~time_fmt_io_saver`]]
-[def __time_fmt_io_saver__restore [link chrono.reference.io.time_point_io_hpp.ioss.time_fmt_io_saver.restore `restore`]]
+[def __timezone_io_saver [link chrono.reference.io.ios_state_hpp.ioss.timezone_io_saver `timezone_io_saver`]]
+[def __timezone_io_saver__c1 [link chrono.reference.io.ios_state_hpp.ioss.timezone_io_saver.c1 `timezone_io_saver`]]
+[def __timezone_io_saver__c2 [link chrono.reference.io.ios_state_hpp.ioss.timezone_io_saver.c2 `timezone_io_saver`]]
+[def __timezone_io_saver__d [link chrono.reference.io.ios_state_hpp.ioss.timezone_io_saver.d `~timezone_io_saver`]]
+[def __timezone_io_saver__restore [link chrono.reference.io.ios_state_hpp.ioss.timezone_io_saver.restore `restore`]]
+
+[def __time_fmt_io_saver [link chrono.reference.io.ios_state_hpp.ioss.time_fmt_io_saver `time_fmt_io_saver`]]
+[def __time_fmt_io_saver__c1 [link chrono.reference.io.ios_state_hpp.ioss.time_fmt_io_saver.c1 `time_fmt_io_saver`]]
+[def __time_fmt_io_saver__c2 [link chrono.reference.io.ios_state_hpp.ioss.time_fmt_io_saver.c2 `time_fmt_io_saver`]]
+[def __time_fmt_io_saver__d [link chrono.reference.io.ios_state_hpp.ioss.time_fmt_io_saver.d `~time_fmt_io_saver`]]
+[def __time_fmt_io_saver__restore [link chrono.reference.io.ios_state_hpp.ioss.time_fmt_io_saver.restore `restore`]]
[/==================]
@@ -318,9 +361,10 @@
[def __SimpleStopwatch [link chrono.reference.stopwatches.simple_stopwatch_req `SimpleStopwatch`]]
[def __simple_stopwatch_concept [link chrono.reference.stopwatches.simple_stopwatch_req `SimpleStopwatch`]]
[def __simple_stopwatch [link chrono.reference.stopwatches.simple_stopwatch_hpp.simple_stopwatch `simple_stopwatch`]]
-[def __simple_stopclock [link chrono.reference.stopwatches.simple_stopwatch_hpp.simple_stopwatch `simple_clock`]]
[def __stopwatch [link chrono.reference.stopwatches.simple_stopwatch_hpp.simple_stopwatch `simple_stopwatch`]]
+[def __simple_stopclock [link chrono.reference.stopwatches.simple_stopwatch_hpp.simple_stopclock `simple_stopclock`]]
+[def __basic_stopclock [link chrono.reference.stopwatches.simple_stopwatch_hpp.basic_stopclock `basic_stopclock`]]
[def __BasicStopwatch [link chrono.reference.stopwatches.stopwatch_req `BasicStopwatch`]]
[def __basic_stopwatch_concept [link chrono.reference.stopwatches.stopwatch_req `BasicStopwatch`]]
@@ -480,10 +524,16 @@
It provides I/O for __duration and __time_point. This I/O makes use of these types much more convenient. In following the "you only pay for what you use" philosophy, this extra functionality is located in a header separate from <boost/chrono/chrono.hpp>, namely <boost/chrono/chrono_io.hpp>.
It builds on `<boost/ratio/ratio_io.hpp>` to provide readable and flexible formatting and parsing for types in `<boost/chrono.hpp>`.
-This textural representation uses [@http://en.wikipedia.org/wiki/SI_prefix#List_of_SI_prefixes SI prefixes] whenever possible. This makes it easy for `boost::milliseconds` to be represented by the text "milliseconds", or a hypothetical meter class to print out "millimeter".
-The __duration unit names can be customized through a new facet: __duration_punct.
-
-`system_clock::time_point` I/O is proposed in terms of UTC timepoints, strongly guided by ISO 9899:1999, Programming languages - C, ISO 9945:2003, Information Technology - Portable Operating System Interface (POSIX) and ISO 8601:2004, Data elements and interchange formats - Information interchange - Representation of dates and times.
+This textural representation uses [@http://en.wikipedia.org/wiki/SI_prefix#List_of_SI_prefixes SI prefixes] whenever possible.
+This makes it easy for `boost::milliseconds` to be represented by the text "milliseconds", or a hypothetical meter
+class to print out "millimeter".
+The __duration and the __time_point i/o can be customized through the new facets: __duration_units and __time_point_units.
+The user can specialize these facets so that the the chrono i/o could be localizable.
+However Boost.Chrono doesn't provides a complete locale solution.
+
+`system_clock::time_point` I/O is proposed in terms of UTC timepoints, strongly guided by
+ISO 9899:1999, Programming languages - C, ISO 9945:2003, Information Technology - Portable Operating System Interface (POSIX) and
+ISO 8601:2004, Data elements and interchange formats - Information interchange - Representation of dates and times.
[heading Rounding utilities]
@@ -493,29 +543,26 @@
On top of the core facilities, __Boost_Chrono provides:
-* Stopwatches: Some facility to measure elapsed time with the ability to start, stop, suspend, or resume measurement.
- * __SimpleStopwatch concept.
- * __BasicStopwatch concept.
- * __SuspendableStopwatch concept.
- * __simple_stopwatch, model of __SimpleStopwatch capturing elapsed __Clock times.
- * __laps_stopwatch, model of __BasicStopwatch allowing in addition to start and stop the capture of elapsed __Clock times.
- * __suspendable_stopwatch, model of __SuspendableStopwatch allowing in addition to suspend and resume the capture of elapsed __Clock times.
-
-__laps_stopwatch and __suspendable_stopwatch have LapsCollector template parameter that allows to store information of the samples defined by a cycle start-stop.
-
-* Stopclocks: a complete time reporting package that can be invoked in a single line of code.
- * __stopwatch_reporter`<__Stopwatch,__Formatter>`, convenient reporting to an output stream (including wide char streams) of the elapsed time of models of __Stopwatch results.
- * Some basic __Formatters.
- * `__simple_stopclock<__Clock>` shortcut of `__stopwatch_reporter<__simple_stopwatch<__Clock>>`
- * `__basic_stopclock<__Clock>` shortcut of `__stopwatch_reporter<__laps_stopwatch<__Clock>>`
- * `__suspendable_stopclock<__Clock>` shortcut of `__stopwatch_reporter<__suspendable_stopwatch<__Clock>>`
+Stopwatches: Some facility to measure elapsed time with the ability to start, stop, suspend, or resume measurement.
+* __SimpleStopwatch, __BasicStopwatch, __SuspendableStopwatch concepts.
+* __simple_stopwatch, model of __SimpleStopwatch capturing elapsed __Clock times.
+* __laps_stopwatch, model of __BasicStopwatch allowing in addition to start and stop the capture of elapsed __Clock times.
+* __suspendable_stopwatch, model of __SuspendableStopwatch allowing in addition to suspend and resume the capture of elapsed __Clock times.
+* __laps_stopwatch and __suspendable_stopwatch have __LapsCollector template parameter that allows to store information of the samples defined by a cycle start-stop.
+
+Stopclocks: a complete time reporting package that can be invoked in a single line of code.
+
+* __stopwatch_reporter`<__Stopwatch,__Formatter>`, convenient reporting to an output stream (including wide char streams) of the elapsed time of models of __Stopwatch results.
+* Some basic __Formatters.
+* `__simple_stopclock<__Clock>` shortcut of `__stopwatch_reporter<__simple_stopwatch<__Clock>>`
+* `__basic_stopclock<__Clock>` shortcut of `__stopwatch_reporter<__laps_stopwatch<__Clock>>`
+* `__suspendable_stopclock<__Clock>` shortcut of `__stopwatch_reporter<__suspendable_stopwatch<__Clock>>`
[heading Caveat Emptor]
The underlying clocks provided by operating systems are subject to many seemingly arbitrary policies and implementation irregularities. That's a polite way of saying they tend to be flakey, and each operating system or even each clock has its own cruel and unusual forms of flakiness. Don't bet the farm on their accuracy, unless you have become deeply familiar with exactly what the specific operating system is guaranteeing, which is often very little.
-
[endsect]
[endsect]
@@ -1267,7 +1314,7 @@
ClockTick(3) + nanoseconds(10) = 56 [1/5000000000]seconds
Set cout to use short names:
- milliseconds(3) + microseconds(10) = 3010 [mu]s
+ milliseconds(3) + microseconds(10) = 3010 __mus
hours(3) + minutes(10) = 190 m
ClockTick(3) + nanoseconds(10) = 56 [1/5000000000]s
@@ -1279,10 +1326,10 @@
As can be seen, each duration type can be streamed without having to manually stream the compile-time units after the run-time value. And when the compile-time unit is known to be a "common unit", English names are used. For "uncommon units" a unit name is composed from the reduced numerator and denominator of the associated __ratio. Whatever stream/locale settings are set for `duration::rep` are used for the value. Additionally, when the value is 1, singular forms for the units are used.
-Sometimes it is desired to shorten these names by using the SI symbols instead of SI prefixes. This can be accomplished with the use of the __duration_symbol manipulator [footnote __duration_short in V1]:
+Sometimes it is desired to shorten these names by using the SI symbols instead of SI prefixes. This can be accomplished with the use of the __symbol_format manipulator [footnote __duration_short in V1]:
cout << "\nSet cout to use short names:\n";
- cout << boost::chrono::duration_prefix;
+ cout << boost::chrono::symbol_format;
cout << "milliseconds(3) + microseconds(10) = "
<< boost::chrono::milliseconds(3) + boost::chrono::microseconds(10) << '\n';
@@ -1297,7 +1344,7 @@
The output could be
Set cout to use short names:
- milliseconds(3) + microseconds(10) = 3010 [mu]s
+ milliseconds(3) + microseconds(10) = 3010 __mus
hours(3) + minutes(10) = 190 m
ClockTick(3) + nanoseconds(10) = 56 [1/5000000000]s
@@ -4199,12 +4246,47 @@
// i/o state savers
struct __duration_style_io_saver;
-
+ template<typename CharT = char, typename Traits = std::char_traits<CharT> >
+ struct __timezone_io_saver;
+ template<typename CharT = char, typename Traits = std::char_traits<CharT> >
+ struct __time_fmt_io_saver;
}
}
[section:sag Setter and getters]
+[section:get_duration_style Non Member Function `get_duration_style(std::ios_base &)`]
+
+ duration_style::type get_duration_style(std::ios_base & ios);
+
+__returns The stream's __duration_style attribute associated to `ios`.
+
+[endsect]
+
+[section:set_duration_style Non Member Function `set_duration_style(std::ios_base &,duration_style::type)`]
+
+ void set_duration_style(std::ios_base& ios, duration_style::type style);
+
+__effects Set the stream's __duration_style attribute associated to `ios` so the `style` parameter.
+
+[endsect]
+
+[section:get_timezone Non Member Function `get_timezone(std::ios_base&)`]
+
+ timezone::type get_timezone(std::ios_base & ios);
+
+__returns The stream's __timezone attribute associated to `ios`.
+
+[endsect]
+
+[section:set_timezone Non Member Function `set_timezone(std::ios_base&,duration_style::type)`]
+
+ void set_timezone(std::ios_base& ios, timezone::type tz);
+
+__effects Set the stream's __timezone attribute associated to `ios` so the `style` parameter.
+
+[endsect]
+
[endsect]
[section:ioss I/O State Savers]
[section:duration_style_io_saver Template Class `duration_style_io_saver`]
@@ -4213,8 +4295,8 @@
struct duration_style_io_saver
{
- typedef std::ios_base state_type;
- typedef __duration_style aspect_type;
+ typedef std::ios_base state_type; // the state type is ios_base
+ typedef __duration_style aspect_type; // the aspect type is the __duration_style
explicit __duration_style_io_saver__c1(state_type &s);
__duration_style_io_saver__c2(state_type &s, aspect_type new_value);
@@ -4222,7 +4304,6 @@
void __duration_style_io_saver__restore();
};
-
The `state_type` is a version of the IOStreams base class `std::ios_base`.
[section:c1 Constructor `duration_style_io_saver(state_type&)`]
@@ -4270,6 +4351,124 @@
[endsect]
+[section:timezone_io_saver Template Class `timezone_io_saver<>`]
+
+
+ template<typename CharT = char, typename Traits = std::char_traits<CharT> >
+ struct __timezone_io_saver
+ {
+ typedef std::basic_ios<CharT, Traits> state_type;
+ typedef __timezone aspect_type;
+
+ explicit __timezone_io_saver__c1(state_type &s);
+ __timezone_io_saver__c2(state_type &s, aspect_type new_value);
+ __timezone_io_saver__d();
+ void timezone_io_saver__restore();
+ };
+
+
+The `state_type` is a version of the IOStreams base class template `std::basic_ios<CharT, Traits>`, where `CharT` is a character type and `Traits` is a character traits class. The user would usually place an actual input, output, or combined stream object for the state-type parameter, and not a base class object.
+
+[section:c1 Constructor `timezone_io_saver(state_type&)`]
+
+The first constructor takes a stream object and saves a reference to the stream and the current value of a particular stream attribute.
+
+ explicit timezone_io_saver(state_type &s);
+
+__effects Constructs a __timezone_io_saver by storing `s`.
+
+[endsect]
+
+[section:c2 Constructor `timezone_io_saver(state_type, aspect_type)`]
+
+The second constructor works like the first, and uses its second argument to change the stream's attribute to the new aspect_type value given.
+
+ explicit timezone_io_saver(state_type &s, aspect_type new_value);
+
+__effects Constructs a __timezone_io_saver by storing `s`.
+
+
+[endsect]
+
+[section:d Destructor `~timezone_io_saver()`]
+
+The destructor restores the stream's attribute to the saved value.
+
+ ~timezone_io_saver();
+
+__effects As if __timezone_io_saver__restore().
+
+[endsect]
+[section:restore Member Function `restore()`]
+
+The restoration can be activated early (and often) with the restore member function.
+
+ void restore();
+
+__effects Restores the stream's __timezone attribute to the saved value.
+
+[endsect]
+
+
+[endsect]
+
+[section:time_fmt_io_saver Template Class `time_fmt_io_saver<>`]
+
+ template<typename CharT = char, typename Traits = std::char_traits<CharT> >
+ struct __time_fmt_io_saver
+ {
+ typedef std::basic_ios<CharT, Traits> state_type;
+
+ explicit __time_fmt_io_saver__c1(state_type &s);
+ __time_fmt_io_saver__c2(state_type &s, basic_string<CharT> const& new_value);
+ __time_fmt_io_saver__d();
+ void __time_fmt_io_saver__restore();
+ };
+
+
+The `state_type` is a version of the IOStreams base class template `std::basic_ios<CharT, Traits>`, where `CharT` is a character type and `Traits` is a character traits class. The user would usually place an actual input, output, or combined stream object for the state-type parameter, and not a base class object.
+
+[section:c1 Constructor `time_fmt_io_saver(state_type&)`]
+
+The first constructor takes a stream object and saves a reference to the stream and the current value of a particular stream attribute.
+
+ explicit time_fmt_io_saver(state_type &s);
+
+__effects Constructs a __time_fmt_io_saver by storing `s`.
+
+[endsect]
+
+[section:c2 Constructor `time_fmt_io_saver(state_type, aspect_type)`]
+
+The second constructor works like the first, and uses its second argument to change the stream's attribute to the new aspect_type value given.
+
+ explicit time_fmt_io_saver(state_type &s, aspect_type new_value);
+
+__effects Constructs a __time_fmt_io_saver by storing `s`.
+
+
+[endsect]
+
+[section:d Destructor `~time_fmt_io_saver()`]
+
+The destructor restores the stream's attribute to the saved value.
+
+ ~time_fmt_io_saver();
+
+__effects As if __time_fmt_io_saver__restore().
+
+[endsect]
+[section:restore Member Function `restore()`]
+
+The restoration can be activated early (and often) with the restore member function.
+
+ void restore();
+
+__effects Restores the stream's time format attribute to the saved value.
+
+[endsect]
+
+[endsect]
[endsect]
[endsect] [/section:ios_state_hpp Header `<boost/chrono/io/ios_sate.hpp>`]
@@ -4282,7 +4481,7 @@
namespace chrono {
template <class CharT, class InputIterator = std::istreambuf_iterator<CharT> >
- class duration_get;
+ class __duration_get;
}
}
@@ -4297,10 +4496,10 @@
typedef std::basic_string<CharT> string_type; // Type of character string passed to member functions.
typedef InputIterator iter_type; // Type of iterator used to scan the character buffer.
- explicit duration_get(size_t refs = 0);
+ explicit __duration_get_c(size_t refs = 0);
template <typename Rep, typename Period>
- iter_type get(
+ iter_type __duration_get_get(
iter_type s,
iter_type end,
std::ios_base& ios,
@@ -4311,7 +4510,7 @@
) const;
template <typename Rep, typename Period>
- iter_type get(
+ iter_type __duration_get_get2(
iter_type s,
iter_type end,
std::ios_base& ios,
@@ -4320,7 +4519,7 @@
) const;
template <typename Rep>
- iter_type get_value(
+ iter_type __duration_get_get_value(
iter_type s,
iter_type end,
std::ios_base& ios,
@@ -4328,7 +4527,7 @@
Rep& r
) const;
- iter_type get_unit(
+ iter_type __duration_get_get_unit(
iter_type i,
iter_type e,
std::ios_base& is,
@@ -4338,17 +4537,9 @@
static std::locale::id id; // Unique identifier for this type of facet.
- ~duration_get()
+ __duration_get_d()
{
}
-
- protected:
-
- virtual iter_type do_get_n_d_prefix_unit(duration_units<CharT> const &facet, iter_type i, iter_type e,
- std::ios_base&, std::ios_base::iostate& err) const;
-
- virtual iter_type do_get_prefix_unit(duration_units<CharT> const &facet, iter_type i, iter_type e,
- std::ios_base&, std::ios_base::iostate& err, detail::rt_ratio &rt) const;
};
@@ -4391,7 +4582,7 @@
[endsect]
[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
-[section:g1 Template Member Function `get(iter_type,iter_type,std::ios_base&,std::ios_base::iostate&,duration<Rep,Period>&,const char_type*, const char_type*) const`]
+[section:get Template Member Function `get(iter_type,iter_type,std::ios_base&,std::ios_base::iostate&,duration<Rep,Period>&,const char_type*, const char_type*) const`]
template <typename Rep, typename Period>
iter_type get(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err,
@@ -4466,7 +4657,7 @@
[endsect]
[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
-[section:g2 Template Member Function `get(iter_type,iter_type,std::ios_base&,std::ios_base::iostate&,duration<Rep,Period>&) const`]
+[section:get2 Template Member Function `get(iter_type,iter_type,std::ios_base&,std::ios_base::iostate&,duration<Rep,Period>&) const`]
template <typename Rep, typename Period>
iter_type get(
@@ -4552,10 +4743,7 @@
__returns `i`, an iterator pointing just beyond the last character that can be determined to be part of a valid duration unit.
[endsect]
-
-
-
-
+[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
[section:do_get_n_d_prefix_unit Protected Member Function `do_get_n_d_prefix_unit(duration_units<CharT> const&,iter_type,iter_type,std::ios_base&,std::ios_base::iostate&) const`]
virtual iter_type do_get_n_d_prefix_unit(
@@ -4586,7 +4774,7 @@
__returns `s`, an iterator pointing just beyond the last character that can be determined to be part of a valid name.
[endsect]
-
+[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
[section:do_get_prefix_unit Protected Member Function `do_get_prefix_unit(duration_units<CharT> const&,iter_type,iter_type,std::ios_base&,std::ios_base::iostate&,detail::rt_ratio&) const`]
virtual iter_type do_get_prefix_unit(
@@ -4618,6 +4806,7 @@
__returns `s`, an iterator pointing just beyond the last character that can be determined to be part of a valid name.
[endsect]
+[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
[endsect]
@@ -4630,253 +4819,1493 @@
namespace boost {
namespace chrono {
-
+ template <class CharT, class OutputIterator = std::ostreambuf_iterator<CharT> >
+ class __duration_put;
+
}
}
+
+[section:duration_put Template Class `duration_put`]
+
+ template <class CharT, class OutputIterator = std::ostreambuf_iterator<CharT> >
+ class duration_put: public std::locale::facet
+ {
+ public:
+ typedef CharT char_type; // Type of character the facet is instantiated on.
+ typedef std::basic_string<CharT> string_type; // Type of character string passed to member functions.
+ typedef OutputIterator iter_type; // Type of iterator used to write in the character buffer.
-[endsect] [/section:duration_put_hpp]
-
-[/==================================================================]
-[section:duration_units_hpp Header `<boost/chrono/io/duration_units.hpp>`]
-[/==================================================================]
+ explicit __duration_put_c(size_t refs = 0);
+
+ template <typename Rep, typename Period>
+ iter_type __duration_put_put(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d, const CharT* pattern,
+ const CharT* pat_end) const;
+
+ template <typename Rep, typename Period>
+ iter_type __duration_put_put2(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
- namespace boost {
- namespace chrono {
+ template <typename Rep, typename Period>
+ iter_type __duration_put_put_value(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
+ template <typename Rep, typename Period>
+ iter_type __duration_put_put_unit(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
- }
- }
-[endsect] [/section:duration_units_hpp]
+ static std::locale::id id; // Unique identifier for this type of facet.
-[/==================================================================]
-[section:duration_io_hpp Header `<boost/chrono/io/duration_io.hpp>`]
-[/==================================================================]
+ __duration_put_d();
+ };
- namespace boost {
- namespace chrono {
+[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
+[section:c Constructor `duration_put(size_t)`]
- // manipulators
+ explicit duration_put(size_t refs);
- std::ios_base& __symbol_format(ios_base& ios);
- std::ios_base& __name_format(ios_base& ios);
- class __duration_fmt;
- template<class CharT, class Traits>
- std::basic_ostream<CharT, Traits>&
- __duration_fmt__op_out(std::basic_ostream<CharT, Traits>& os, duration_fmt d);
+Constructs a __duration_put facet.
- template<class CharT, class Traits>
- std::basic_istream<CharT, Traits>&
- __duration_fmt__op_in(std::basic_istream<CharT, Traits>& is, duration_fmt d);
+__params
+* [param refs] references
- // duration I/O
+__effects Constructs a __duration_put facet.
+If the `refs` argument is `0` then destruction of the object is
+delegated to the locale, or locales, containing it. This allows
+the user to ignore lifetime management issues. On the other had,
+if `refs` is `1` then the object must be explicitly deleted;
+`locale` will not do so. In this case, the object can be
+maintained across the lifetime of multiple locales.
- template <class CharT, class Traits, class Rep, class Period>
- std::basic_ostream<CharT, Traits>&
- __duration__op_out(std::basic_ostream<CharT, Traits>& os, const __duration<Rep, Period>& d);
+[endsect]
+[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
+[section:d Destructor `~duration_put()`]
- template <class CharT, class Traits, class Rep, class Period>
- std::basic_istream<CharT, Traits>&
- __duration__op_in(std::basic_istream<CharT, Traits>& is, __duration<Rep, Period>& d)
+ ~duration_put();
- }
- }
+Destructs a __duration_put facet.
+[endsect]
+[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
+[section:put Member Function `put(iter_type,std::ios_base&,char_type,duration<Rep,Period> const&, const CharT*,const CharT*)`]
-[section:manipulators I/O Manipulators]
+ template <typename Rep, typename Period>
+ iter_type put(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d, const CharT* pattern,
+ const CharT* pat_end) const;
-There is a parameterized manimulator that takes the duration_style as parameter.
-The symbol or name format can be easily chosen by streaming a `symbol_format` or `name_format` manipulators respectively.
+__params
-[section:duration_fmt Template Class `duration_fmt`]
+* [param s] an output stream iterator
+* [param ios] a reference to a ios_base
+* [param d] the duration
+* [param pattern] begin of the formatting pattern
+* [param pat_end] end of the formatting pattern
- class duration_fmt
- {
- public:
+__effects Steps through the sequence from `pattern` to `pat_end`,
+identifying characters that are part of a pattern sequence. Each character
+that is not part of a pattern sequence is written to `s` immediately, and
+each pattern sequence, as it is identified, results in a call to `put_value` or `put_unit`;
+thus, pattern elements and other characters are interleaved in the output
+in the order in which they appear in the pattern. Pattern sequences are
+identified by converting each character `c` to a `char` value as if by
+`ct.narrow(c,0)`, where `ct` is a reference to `ctype<charT>` obtained from
+`ios.getloc()`. The first character of each sequence is equal to `'%'`,
+followed by a pattern specifier character specifier, which can be `'v'` for
+the duration value or `'u'` for the duration unit. .
+For each valid pattern sequence identified, calls
+`put_value(s, ios, d)` or `put_unit(s, ios, d)`.
- explicit __duration_fmt__c1(__duration_style style) BOOST_CHRONO_NOEXCEPT;
+__returns An iterator pointing immediately after the last character produced.
- #ifndef BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
- explicit
- __duration_fmt__op_duration_style() const BOOST_CHRONO_NOEXCEPT;
- #endif
- __duration_style __duration_fmt__get_duration_style() const BOOST_CHRONO_NOEXCEPT;
- };
- template<class CharT, class Traits>
- std::basic_ostream<CharT, Traits>&
- __duration_fmt__op_out(std::basic_ostream<CharT, Traits>& os, duration_fmt d);
+[endsect]
+[section:put2 Member Function `put(iter_type,std::ios_base&,char_type fill, duration<Rep, Period> const&)`]
- template<class CharT, class Traits>
- std::basic_istream<CharT, Traits>&
- __duration_fmt__op_in(std::basic_istream<CharT, Traits>& is, duration_fmt d);
+ template <typename Rep, typename Period>
+ iter_type put(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
+__params
-[section:c1 Constructor `duration_fmt(duration_style_type)`]
+* [param s] an output stream iterator
+* [param ios] a reference to a ios_base
+* [param d] the duration
- explicit duration_fmt(duration_style_type f) noexcept;
+Retrieves Stores the duration pattern from the __duration_unit facet in let say `str`. Last as if
-__effects Constructs a __duration_fmt by storing `f`.
+ return put(s, ios, d, str.data(), str.data() + str.size());
-__postcondition `static_cast<duration_style>(*this) == f`.
+__returns An iterator pointing immediately after the last character produced.
[endsect]
-[section:op_duration_style Member Function `operator duration_style()`]
+[section:put_value Member Function `put_value(iter_type, std::ios_base&, char_type, duration<Rep,Period> const&)`]
- explicit operator duration_style() const noexcept;
+ template <typename Rep, typename Period>
+ iter_type put_value(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
+
+__params
+
+* [param s] an output stream iterator
+* [param ios] a reference to a ios_base
+* [param d] the duration
+
+__effects As if std::use_facet<std::num_put<CharT, iter_type> >(ios.getloc()).put(s, ios, ' ', static_cast<long int> (d.count())).
+
+__returns An iterator pointing immediately after the last character produced.
+
+[endsect]
+[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
+[section:put_unit Member Function `put_unit(iter_type,std::ios_base&,char_type,duration<Rep, Period> const&)`]
+
+ template <typename Rep, typename Period>
+ iter_type put_unit(iter_type s, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
+
+__params
+
+* [param s] an output stream iterator
+* [param ios] a reference to a ios_base
+* [param fill] the fill character
+* [param d] the duration
+
+__effects Let `facet` be the `duration_units<CharT>` facet associated to `ios`. If the associated unit is named, as if
+
+ string_type str = facet.get_unit(get_duration_style(ios), d);
+ s=std::copy(str.begin(), str.end(), s);
+
+Otherwise, format the unit as `"[Period::num/Period::den]"` followed by the unit associated to [N/D] obtained using `facet.get_n_d_unit(get_duration_style(ios), d)`.
+
+__returns s, iterator pointing immediately after the last character produced.
+
+[endsect]
+[//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////]
+[endsect]
+
+[endsect] [/section:duration_put_hpp]
+
+[/==================================================================]
+[section:duration_units_hpp Header `<boost/chrono/io/duration_units.hpp>`]
+[/==================================================================]
+
+ namespace boost {
+ namespace chrono {
+ class rt_ratio;
+ template <typename CharT = char>
+ class duration_units;
+
+ }
+ }
+
+
+[section:rt_ratio Class `rt_ratio`]
+
+ class rt_ratio
+ {
+ public:
+ template <typename Period>
+ rt_ratio(Period const&) :
+ num(Period::type::num), den(Period::type::den)
+ {
+ }
+
+ rt_ratio(intmax_t n = 0, intmax_t d = 1) :
+ num(n), den(d)
+ {
+ }
+
+ intmax_t num;
+ intmax_t den;
+ };
+
+[endsect]
+[section:duration_units Template Class `duration_units`]
+
+ template <typename CharT = char>
+ class duration_units: public std::locale::facet
+ {
+ public:
+ typedef CharT char_type; // Type of character the facet is instantiated on.
+ typedef std::basic_string<CharT> string_type; // Type of character string passed to member functions.
+ static std::locale::id id; // Unique identifier for this type of facet.
+
+ explicit __duration_units_c(size_t refs = 0);
+ virtual const string_type* __duration_units_get_n_d_valid_units_start() const =0;
+ virtual const string_type* __duration_units_get_n_d_valid_units_end() const=0;
+ virtual const string_type* __duration_units_get_valid_units_start() const=0;
+ virtual const string_type* __duration_units_get_valid_units_end() const=0;
+ virtual bool __duration_units_match_n_d_valid_unit(const string_type* k) const = 0;
+ virtual bool __duration_units_match_valid_unit(const string_type* k, rt_ratio& rt) const = 0;
+ virtual string_type __duration_units_get_pattern() const=0;
+ template <typename Rep, typename Period>
+ string_type __duration_units_get_unit(duration_style::type style, duration<Rep, Period> const& d) const;
+ template <typename Rep, typename Period>
+ string_type __duration_units_get_n_d_unit(duration_style::type style, duration<Rep, Period> const& d) const;
+ template <typename Period>
+ bool __duration_units_is_named_unit() const;
+
+ protected:
+ virtual __duration_units_d();
+ virtual string_type __duration_units_do_get_n_d_unit(duration_style::type style, rt_ratio rt, intmax_t v) const = 0;
+ virtual string_type __duration_units_do_get_unit(duration_style::type style,rt_ratio rt, intmax_t v) const = 0;
+ virtual bool __duration_units_do_is_named_unit(rt_ratio rt) const =0;
+ };
+
+__duration_units facet gives useful information about the duration units,
+as the number of plural forms, the plural form associated to a duration,
+the text associated to a plural form and a duration's period,
+
+[section:c Constructor `duration_units()`]
+
+ explicit duration_units(size_t refs = 0);
+
+Construct a __duration_units facet.
+
+__params
+
+* [param refs] references
+
+__effects Construct a __duration_units facet.
+If the `refs` argument is `0` then destruction of the object is
+delegated to the locale, or locales, containing it. This allows
+the user to ignore lifetime management issues. On the other had,
+if `refs` is `1` then the object must be explicitly deleted;
+the locale will not do so. In this case, the object can be
+maintained across the lifetime of multiple locales.
+
+[endsect]
+[section:d Destructor `~duration_units()`]
+
+ virtual ~duration_units();
+
+__effects Destroys the facet.
+
+[endsect]
+[section:get_n_d_valid_units_start Member Function `get_n_d_valid_units_start()`]
+
+ virtual const string_type* get_n_d_valid_units_start() const =0;
+
+__returns pointer to the start of valid [N/D] units.
+
+
+[endsect]
+[section:get_n_d_valid_units_end Member Function `get_n_d_valid_units_end()`]
+
+ virtual const string_type* get_n_d_valid_units_end() const=0;
+
+__returns pointer to the end of valid [N/D] units.
+
+[endsect]
+[section:get_valid_units_start Member Function `get_valid_units_start()`]
+
+ virtual const string_type* get_valid_units_start() const=0;
+
+__returns pointer to the start of valid units, symbol or prefix with its different plural forms.
+
+[endsect]
+[section:get_valid_units_end Member Function `get_valid_units_end()`]
+
+ virtual const string_type* get_valid_units_end() const=0;
+
+__returns pointer to the end of valid units.
+
+[endsect]
+[section:match_n_d_valid_unit Member Function `match_n_d_valid_unit(const string_type*)`]
+
+ virtual bool match_n_d_valid_unit(const string_type* k) const = 0;
+
+__params
+
+* [param k] the found pointer to the [N/D] unit.
+
+__returns `true` if `k` matches a valid unit.
+
+[endsect]
+[section:match_valid_unit Member Function `match_valid_unit(const string_type*,rt_ratio&)`]
+
+ virtual bool match_valid_unit(const string_type* k, rt_ratio& rt) const = 0;
+
+__params
+
+* [param k] the found pointer to the unit.
+
+__effects `rt` is set to the valid Period when the `k` matches a valid unit.
+__returns `true` if `k` matches a valid unit.
+
+[endsect]
+[section:get_pattern Member Function `get_pattern()`]
+
+ virtual string_type get_pattern() const=0;
+
+__returns the pattern to be used by default.
+
+[endsect]
+[section:get_unit Template Member Function `get_unit(duration_style::type,duration<Rep,Period> const&)`]
+
+ template <typename Rep, typename Period>
+ string_type get_unit(duration_style::type style, duration<Rep, Period> const& d) const;
+
+
+__returns `get_unit(style, d.count(), rt_ratio(Period()))`, the unit associated to this duration.
+
+[endsect]
+
+[section:get_n_d_unit Template Member Function `get_n_d_unit(duration_style::type,duration<Rep,Period> const&)`]
+
+ template <typename Rep, typename Period>
+ string_type get_n_d_unit(duration_style::type style, duration<Rep, Period> const& d) const;
+
+__returns get_n_d_unit(style, d.count(), rt_ratio(Period())), i.e. the [N/D] suffix unit associated to this duration.
+
+[endsect]
+
+[section:is_named_unit Template Member Function `is_named_unit()`]
+
+ template <typename Period>
+ bool is_named_unit() const;
+
+__returns `do_is_named_unit(rt_ratio(Period()))`, true if the unit associated to the given Period is named, false otherwise.
+
+[endsect]
+
+[section:do_get_n_d_unit Protected Member Function `do_get_n_d_unit(duration_style::type,rt_ratio,intmax_t)`]
+
+ virtual string_type do_get_n_d_unit(duration_style::type style, rt_ratio rt, intmax_t v) const = 0;
+
+__returns the [N/D] suffix unit associated to this duration.
+
+[endsect]
+
+[section:do_get_unit Protected Member Function `do_get_unit(duration_style::type,rt_ratio,intmax_t)`]
+
+ virtual string_type do_get_unit(duration_style::type style,rt_ratio rt, intmax_t v) const = 0;
+
+__returns the unit associated to this duration.
+
+[endsect]
+
+[section:do_is_named_unit Protected Member Function `do_is_named_unit(rt_ratio)`]
+
+ virtual bool do_is_named_unit(rt_ratio rt) const =0;
+
+__returns true if the unit associated to the given Period is named, false otherwise.
+
+[endsect]
+
+[endsect] [/section:duration_units]
+
+[section:duration_units_default Template Class `duration_units_default`]
+
+ template <typename CharT = char>
+ class duration_units_default: public duration_units<CharT>
+ {
+ protected:
+ static const std::size_t pfs_ = 2; // The defaul English facet has two plural forms.
+
+ public:
+ typedef CharT char_type;
+ typedef std::basic_string<CharT> string_type;
+
+ explicit duration_units_default(size_t refs = 0);
+ ~duration_units_default();
+
+ bool match_n_d_valid_unit(const string_type* k) const;
+ bool match_valid_unit(const string_type* k, rt_ratio& rt) const;
+ const string_type* get_n_d_valid_units_start()const;
+ const string_type* get_n_d_valid_units_end()const;
+ string_type* get_valid_units_start() const;
+ string_type* get_valid_units_end() const;
+ string_type get_pattern() const;
+ protected:
+ bool do_is_named_unit(rt_ratio rt) const;
+ string_type do_get_n_d_unit(duration_style::type style, rt_ratio, intmax_t v) const;
+ string_type do_get_unit(duration_style::type style, rt_ratio rt, intmax_t v) const;
+
+ virtual std::size_t do_get_plural_forms() const;
+ virtual std::size_t do_get_plural_form(int_least64_t value) const;
+
+ virtual string_type do_get_unit(duration_style_type style, ratio<1> u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, ratio<60> u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, ratio<3600> u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, atto u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, femto u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, pico u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, nano u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, micro u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, milli u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, centi u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, deci u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, deca u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, hecto u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, kilo u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, mega u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, giga u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, tera u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, peta u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, exa u, std::size_t pf) const;
+
+ virtual string_type do_get_ratio_prefix(duration_style_type style, atto u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, femto u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, pico u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, nano u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, micro u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, milli u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, centi u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, deci u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, deca u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, hecto u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, kilo u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, mega u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, giga u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, tera u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, peta u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, exa u) const;
+ };
+
+This class is used to define the strings for the default English.
+This facet names the units associated to the following periods:
+
+* __atto,
+* __femto,
+* __pico,
+* __nano,
+* __micro,
+* __milli,
+* __centi,
+* __deci,
+* ratio<1>,
+* __deca,
+* __hecto,
+* __kilo,
+* __mega,
+* __giga,
+* __tera,
+* __peta,
+* __exa,
+* ratio<60> and
+* ratio<3600>.
+
+
+[section:c Constructor `duration_units_default()`]
+
+ explicit duration_units_default(size_t refs = 0);
+
+Construct a duration_units_default facet.
+
+__params
+
+* [param refs] references
+
+__effects Construct a duration_units_default facet.
+If the `refs` argument is `0` then destruction of the object is
+delegated to the locale, or locales, containing it. This allows
+the user to ignore lifetime management issues. On the other had,
+if `refs` is `1` then the object must be explicitly deleted;
+the locale will not do so. In this case, the object can be
+maintained across the lifetime of multiple locales.
+
+[endsect]
+[section:d Destructor `~duration_units_default()`]
+
+ virtual ~duration_units_default();
+
+__effects Destroys the facet.
+
+[endsect]
+[section:get_n_d_valid_units_start Member Function `get_n_d_valid_units_start()`]
+
+ virtual const string_type* get_n_d_valid_units_start() const;
+
+__returns pointer to the start of valid [N/D] units.
+
+
+[endsect]
+[section:get_n_d_valid_units_end Member Function `get_n_d_valid_units_end()`]
+
+ virtual const string_type* get_n_d_valid_units_end() const;
+
+__returns pointer to the end of valid [N/D] units.
+
+[endsect]
+[section:get_valid_units_start Member Function `get_valid_units_start()`]
+
+ virtual const string_type* get_valid_units_start() const;
+
+__returns pointer to the start of valid units, symbol or prefix with its different plural forms.
+
+[endsect]
+[section:get_valid_units_end Member Function `get_valid_units_end()`]
+
+ virtual const string_type* get_valid_units_end() const;
+
+__returns pointer to the end of valid units.
+
+[endsect]
+[section:match_n_d_valid_unit Member Function `match_n_d_valid_unit(const string_type*)`]
+
+ virtual bool match_n_d_valid_unit(const string_type* k) const;
+
+__params
+
+* [param k] the found pointer to the [N/D] unit.
+
+__returns `true` if `k` matches a valid unit.
+
+[endsect]
+[section:match_valid_unit Member Function `match_valid_unit(const string_type*,rt_ratio&)`]
+
+ virtual bool match_valid_unit(const string_type* k, rt_ratio& rt) const;
+
+__params
+
+* [param k] the found pointer to the unit.
+
+__effects `rt` is set to the valid Period when the `k` matches a valid unit.
+__returns `true` if `k` matches a valid unit.
+
+[endsect]
+[section:get_pattern Member Function `get_pattern()`]
+
+ virtual string_type get_pattern() const;
+
+__returns the pattern to be used by default.
+
+[endsect]
+
+[section:do_get_n_d_unit Protected Member Function `do_get_n_d_unit(duration_style::type,rt_ratio,intmax_t)`]
+
+ virtual string_type do_get_n_d_unit(duration_style::type style, rt_ratio rt, intmax_t v) const;
+
+__returns the [N/D] suffix unit associated to this duration.
+
+[endsect]
+
+[section:do_get_unit Protected Member Function `do_get_unit(duration_style::type,rt_ratio,intmax_t)`]
+
+ virtual string_type do_get_unit(duration_style::type style,rt_ratio rt, intmax_t v) const;
+
+__returns the unit associated to this duration.
+
+[endsect]
+
+[section:do_is_named_unit Protected Member Function `do_is_named_unit(rt_ratio)`]
+
+ virtual bool do_is_named_unit(rt_ratio rt) const;
+
+__returns true if the unit associated to the given Period is named, false otherwise.
+
+[endsect]
+
+[section:do_get_plural_forms Protected Member Function `do_get_plural_forms()`]
+
+ virtual std::size_t do_get_plural_forms() const;
+
+__returns the number of associated plural forms this facet manages.
+
+[endsect]
+
+[section:do_get_plural_form Protected Member Function `do_get_plural_form(int_least64_t)`]
+
+ virtual std::size_t do_get_plural_form(int_least64_t value) const;
+
+Gets the associated plural form.
+
+__params
+
+[param value] the duration representation
+
+__returns the plural form associated to the `value` parameter. In English there are 2 plural forms
+
+* 0 singular (-1 or 1)
+* 1 plural for all others
+
+[endsect]
+
+[section:do_get_unit_seconds Protected Member Function `do_get_unit(duration_style_type,ratio<1>,std::size_t)`]
+
+ virtual string_type do_get_unit(duration_style_type style, ratio<1> u, std::size_t pf) const;
+
+__params
+
+* [param style] the duration style.
+* [param period] the period associated to the duration hours.
+* [param pf] the requested plural form.
+
+__returns if style is symbol returns "s", otherwise if pf is 0 return "second", if pf is 1 "seconds"
+
+[endsect]
+
+[section:do_get_unit_minutes Protected Member Function `do_get_unit(duration_style_type style,ratio<60>,std::size_t)`]
+
+ virtual string_type do_get_unit(duration_style_type style, ratio<60> u, std::size_t pf) const;
+
+__params
+
+* [param style] the duration style.
+* [param period] the period associated to the duration hours.
+* [param pf] the requested plural form.
+
+__returns if style is symbol returns "min", otherwise if pf is 0 return "minute", if pf is 1 "minutes"
+
+[endsect]
+
+[section:do_get_unit_hours Protected Member Function `do_get_unit(duration_style_type,ratio<3600>,std::size_t)`]
+
+ virtual string_type do_get_unit(duration_style_type style, ratio<3600> u, std::size_t pf) const;
+
+__params
+
+* [param style] the duration style.
+* [param period] the period associated to the duration hours.
+* [param pf] the requested plural form.
+
+__returns if style is symbol returns "h", otherwise if pf is 0 return "hour", if pf is 1 "hours"
+
+[endsect]
+
+[section:do_get_unit_xxx Protected Member Function `do_get_unit(duration_style_type,Period,std::size_t)`]
+
+ virtual string_type do_get_unit(duration_style_type style, atto u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, femto u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, pico u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, nano u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, micro u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, milli u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, centi u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, deci u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, deca u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, hecto u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, kilo u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, mega u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, giga u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, tera u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, peta u, std::size_t pf) const;
+ virtual string_type do_get_unit(duration_style_type style, exa u, std::size_t pf) const;
+
+__params
+
+* [param style] the duration style.
+* [param u] the period tag atto.
+* [param pf] the requested plural form.
+
+__returns the concatenation of the prefix associated to period `u` + the one associated to seconds.
+
+[endsect]
+
+[section:do_get_ratio_prefix_xxx Protected Member Function `do_get_ratio_prefix(duration_style_type, Period)`]
+
+ virtual string_type do_get_ratio_prefix(duration_style_type style, atto u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, femto u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, pico u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, nano u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, micro u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, milli u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, centi u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, deci u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, deca u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, hecto u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, kilo u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, mega u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, giga u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, tera u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, peta u) const;
+ virtual string_type do_get_ratio_prefix(duration_style_type style, exa u) const;
+
+__params
+
+* [param style] the duration style.
+* [param u] the period tag atto.
+
+__returns depending on the value of `style` return the ratio_string symbol or prefix.
+
+[endsect]
+
+
+[endsect] [/section:duration_units_default]
+
+[endsect] [/section:duration_units_hpp]
+
+[/==================================================================]
+[section:duration_io_hpp Header `<boost/chrono/io/duration_io.hpp>`]
+[/==================================================================]
+
+ namespace boost {
+ namespace chrono {
+
+ // manipulators
+
+ std::ios_base& __symbol_format(ios_base& ios);
+ std::ios_base& __name_format(ios_base& ios);
+ class __duration_fmt;
+ template<class CharT, class Traits>
+ std::basic_ostream<CharT, Traits>&
+ __duration_fmt__op_out(std::basic_ostream<CharT, Traits>& os, duration_fmt d);
+
+ template<class CharT, class Traits>
+ std::basic_istream<CharT, Traits>&
+ __duration_fmt__op_in(std::basic_istream<CharT, Traits>& is, duration_fmt d);
+
+
+ // duration I/O
+
+ template <class CharT, class Traits, class Rep, class Period>
+ std::basic_ostream<CharT, Traits>&
+ __duration__op_out(std::basic_ostream<CharT, Traits>& os, const __duration<Rep, Period>& d);
+
+ template <class CharT, class Traits, class Rep, class Period>
+ std::basic_istream<CharT, Traits>&
+ __duration__op_in(std::basic_istream<CharT, Traits>& is, __duration<Rep, Period>& d)
+
+ }
+ }
+
+
+[section:manipulators I/O Manipulators]
+
+There is a parameterized manimulator that takes the duration_style as parameter.
+The symbol or name format can be easily chosen by streaming a `symbol_format` or `name_format` manipulators respectively.
+
+[section:duration_fmt Template Class `duration_fmt`]
+
+ class duration_fmt
+ {
+ public:
+
+ explicit __duration_fmt__c1(__duration_style style) noexcept;
+
+ #ifndef BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
+ explicit
+ __duration_fmt__op_duration_style() const noexcept;
+ #endif
+ __duration_style __duration_fmt__get_duration_style() const noexcept;
+ };
+
+ template<class CharT, class Traits>
+ std::basic_ostream<CharT, Traits>&
+ __duration_fmt__op_out(std::basic_ostream<CharT, Traits>& os, duration_fmt d);
+
+ template<class CharT, class Traits>
+ std::basic_istream<CharT, Traits>&
+ __duration_fmt__op_in(std::basic_istream<CharT, Traits>& is, duration_fmt d);
+
+
+[section:c1 Constructor `duration_fmt(duration_style_type)`]
+
+ explicit duration_fmt(duration_style_type f) noexcept;
+
+__effects Constructs a __duration_fmt by storing `f`.
+
+__postcondition `static_cast<duration_style>(*this) == f`.
+
+[endsect]
+[section:op_duration_style Member Function `operator duration_style()`]
+
+ explicit operator duration_style() const noexcept;
duration_style_type get_duration_style() const noexcept;
-__returns: The stored __duration_fmt `f`.
+__returns: The stored __duration_fmt `f`.
+
+[endsect]
+[section:op_out Member Function `operator <<(basic_ostream<>&, duration_fmt)`]
+
+ template<class CharT, class Traits>
+ basic_ostream<CharT, Traits>&
+ operator<<(basic_ostream<CharT, Traits>& s, duration_fmt d);
+
+__effects: `__set_duration_style(s, static_cast<__duration_style>(d))))`.
+
+__returns: `s`.
+
+[endsect]
+[section:op_in Member Function `operator >>(basic_istream<>&, duration_fmt)`]
+
+ template<class CharT, class Traits>
+ basic_istream<CharT, Traits>&
+ operator>>(basic_istream<CharT, Traits>& s, duration_fmt d);
+
+__effects: `__set_duration_style(s, static_cast<__duration_style>(d))))`.
+
+__returns: `s`.
+
+[endsect]
+[endsect]
+
+[section:symbol_format Non Member Function `symbol_format(ios_base&)`]
+
+ std::ios_base& __symbol_format(ios_base& ios);
+
+__effects: `__set_duration_style(s, __duration_style::symbol)`.
+
+__returns `ios`
+
+[endsect]
+[section:name_format Non Member Function `name_format(ios_base&)`]
+
+ std::ios_base& __name_format(ios_base& ios);
+
+__effects: `__set_duration_style(s, __duration_style::prefix)`.
+
+__returns `ios`
+
+
+[endsect]
+[endsect]
+
+
+[section:streams I/O Streams Operations]
+
+[section:duration__op_out Member Function `operator <<(basic_ostream<>&, const duration<>& d)`]
+
+Any __duration can be streamed out to a `basic_ostream`.
+The run-time value of the __duration is formatted according to the rules and current format settings for __duration`::rep` and the __duration_units facet.
+
+
+ template <class CharT, class Traits, class Rep, class Period>
+ std::basic_ostream<CharT, Traits>&
+ operator<<(std::basic_ostream<CharT, Traits>& os, const duration<Rep, Period>& d);
+
+__effects Behaves as a formatted output function.
+After constructing a sentry object, if the sentry converts to true,
+calls to `facet.__duration_put_put(os,os,os.fill(),d)` where `facet` is the `__duration_put<CharT>`
+facet associated to `os` or a new created instance of the default `__duration_put<CharT>` facet.
+
+__returns `os`.
+
+[endsect]
+[section:duration__op_in Member Function `operator <<(basic_istream<>&, const duration<>& d)`]
+
+ template <class CharT, class Traits, class Rep, class Period>
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, duration<Rep, Period>& d)
+
+__effects Behaves as a formatted input function. After constructing a `sentry` object, if the `sentry`
+converts to `true`, calls to `facet.__duration_get_get(is,std::istreambuf_iterator<CharT, Traits>(), is, err, d)` where `facet` is the `__duration_get<CharT>`
+facet associated to `is` or a new created instance of the default `__duration_get<CharT>` facet.
+
+If any step fails, calls `os.setstate(std::ios_base::failbit | std::ios_base::badbit)`.
+
+__returns `is`
+[endsect]
+
+[endsect]
+
+
+[endsect] [/section:duration_io_hpp Header `<boost/chrono/io/duration_io.hpp>`]
+
+[/==================================================================]
+[section:time_point_get_hpp Header `<boost/chrono/io/time_point_get.hpp>`]
+[/==================================================================]
+
+ namespace boost {
+ namespace chrono {
+ template <class CharT, class InputIterator = std::istreambuf_iterator<CharT> >
+ class time_point_get;
+ }
+ }
+
+[section:time_point_get Template Class `time_point_get`]
+
+ template <class CharT, class InputIterator = std::istreambuf_iterator<CharT> >
+ class time_point_get: public std::locale::facet
+ {
+ public:
+ typedef CharT char_type; // Type of character the facet is instantiated on.
+ typedef InputIterator iter_type; // Type of iterator used to scan the character buffer.
+
+ explicit __time_point_get_c(size_t refs = 0);
+
+ template <class Clock, class Duration>
+ iter_type __time_point_get_get(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err,
+ time_point<Clock, Duration> &tp, const char_type *pattern, const char_type *pat_end) const;
+
+ template <class Clock, class Duration>
+ iter_type __time_point_get_get2(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err,
+ time_point<Clock, Duration> &tp) const;
+
+ template <typename Rep, typename Period>
+ iter_type __time_point_get_get_duration(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err,
+ duration<Rep, Period>& d) const;
+
+ template <class Clock>
+ iter_type __time_point_get_get_epoch(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err) const;
+
+ static std::locale::id id; // Unique identifier for this type of facet.
+
+ __time_point_get_d();
+ };
+
+
+`time_point_get` is used to parse a character sequence, extracting
+the duration and the epoch into a class `time_point`.
+
+The pattern can contain the format specifiers `%d` and `%e` in any order.
+
+User confirmation is required for reliable parsing of
+user-entered durations, but machine-generated formats can be parsed
+reliably. This allows parsers to be aggressive about interpreting user
+variations on standard formats.
+
+If the end iterator is reached during parsing the member function sets `std::ios_base::eofbit` in `err`.
+
+[section:c Constructor `time_point_get(size_t)`]
+
+ explicit time_point_get(size_t refs);
+
+Constructs a __time_point_get facet.
+
+__params
+
+* [param refs] references
+
+__effects Constructs a __duration_put facet.
+If the `refs` argument is `0` then destruction of the object is
+delegated to the locale, or locales, containing it. This allows
+the user to ignore lifetime management issues. On the other had,
+if `refs` is `1` then the object must be explicitly deleted;
+`locale` will not do so. In this case, the object can be
+maintained across the lifetime of multiple locales.
+
+[endsect]
+
+[section:d Destructor `~time_point_get()`]
+
+ ~time_point_get();
+
+__effects Destroy the facet.
+
+[endsect]
+[section:get Template Member Function `get(iter_type,iter_type,std::ios_base&,std::ios_base::iostate&,time_point<Clock, Duration>&,const CharT*,const CharT*)`]
+
+ template <class Clock, class Duration>
+ iter_type get(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err,
+ time_point<Clock, Duration> &tp, const char_type *pattern, const char_type *pat_end) const;
+
+__params
+
+* [param s] start input stream iterator
+* [param end] end input stream iterator
+* [param ios] a reference to a `ios_base`
+* [param err] the `ios_base::iostate`
+* [param tp] the __time_point
+* [param pattern] begin of the formatting pattern
+* [param pat_end] end of the formatting pattern
+
+__requires `[pattern,pat_end)` must be a valid range.
+
+__effects: The function starts by evaluating `err = std::ios_base::goodbit`.
+It then enters a loop, reading zero or more characters from `s` at
+each iteration. Unless otherwise specified below, the loop
+terminates when the first of the following conditions holds:
+
+* The expression `pattern == pat_end` evaluates to `true`.
+* The expression `err == std::ios_base::goodbit` evaluates to `false`.
+* The expression `s == end` evaluates to `true`, in which case the
+function evaluates `err = std::ios_base::eofbit | std::ios_base::failbit`.
+* The next element of pattern is equal to `'%'`, followed by a conversion
+specifier character, the functions `get_duration` or `get_epoch` are called depending on
+whether the format is `'d'` or `'e'`.
+If the number of elements in the range `[pattern,pat_end)` is not
+sufficient to unambiguously determine whether the conversion
+specification is complete and valid, the function evaluates
+`err |= std::ios_base::failbit`. Otherwise, the function evaluates
+`s = do_get(s, end, ios, err, d)`. If `err == std::ios_base::goodbit` holds after
+the evaluation of the expression, the function increments pattern to
+point just past the end of the conversion specification and continues
+looping.
+* The expression `isspace(*pattern, ios.getloc())` evaluates to `true`, in
+which case the function first increments `pattern` until
+`pattern == pat_end || !isspace(*pattern, ios.getloc())` evaluates to `true`,
+then advances `s` until `s == end || !isspace(*s, ios.getloc())` is `true`,
+and finally resumes looping.
+* The next character read from `s` matches the element pointed to by
+pattern in a case-insensitive comparison, in which case the function
+evaluates `++pattern`, `++s` and continues looping. Otherwise, the function
+evaluates `err = std::ios_base::failbit`.
+
+__returns An iterator pointing just beyond the last character that can be determined to be part of a valid time_point.
+
+
+[endsect]
+[section:get2 Template Member Function `get(iter_type,iter_type,std::ios_base&,std::ios_base::iostate&,time_point<Clock,Duration>&)`]
+
+ template <class Clock, class Duration>
+ iter_type get(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err,
+ time_point<Clock, Duration> &tp) const;
+
+__params
+
+* [param s] start input stream iterator
+* [param end] end input stream iterator
+* [param ios] a reference to a `ios_base`
+* [param err] the `ios_base::iostate`
+* [param tp] the __time_point
+
+__effects Stores the duration pattern from the `duration_unit` facet in let say `str`. Last as if
+
+ return get(s, end, ios, err, ios, d, str.data(), str.data() + str.size());
+
+__returns An iterator pointing just beyond the last character that can be determined to be part of a valid name.
+
+[endsect]
+[section:get_duration Template Member Function `get_duration(iter_type,iter_type,std::ios_base&,std::ios_base::iostate&,duration<Rep,Period>&)`]
+
+ template <typename Rep, typename Period>
+ iter_type get_duration(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err,
+ duration<Rep, Period>& d) const;
+
+__effects As if
+
+ return facet.get(s, end, ios, err, d);
+
+where `facet` is either the `duration_get` facet associated to the `ios` or an instance of the default `duration_get` facet.
+
+__returns An iterator pointing just beyond the last character that can be determined to be part of a valid duration.
+
+[endsect]
+[section:get_epoch Template Member Function `get_epoch(iter_type,iter_type,std::ios_base&,std::ios_base::iostate&)`]
+
+ template <class Clock>
+ iter_type get_epoch(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err) const;
+
+__effects Let `facet` be the __time_point_units facet associated to `ios` or a new instance of the default __time_point_units_default facet.
+Let `epoch` be the epoch string associated to the `Clock` using this facet.
+Scans `s` to match `epoch` or `end` is reached.
+
+If not match before the `end` is reached `std::ios_base::failbit` is set in `err`.
+If `end` is reached `std::ios_base::failbit` is set in `err`.
+
+__returns An iterator pointing just beyond the last character that can be determined to be part of a epoch.
+
+[endsect]
+
+[endsect] [/section:time_point_get]
+
+
+[endsect] [/section:time_point_get_hpp]
+
+[/==================================================================]
+[section:time_point_put_hpp Header `<boost/chrono/io/time_point_put.hpp>`]
+[/==================================================================]
+
+ namespace boost {
+ namespace chrono {
+ template <class CharT, class OutputIterator = std::ostreambuf_iterator<CharT> >
+ class time_point_put;
+ }
+ }
+
+
+[section:time_point_put Template Class `time_point_put`]
+
+
+The __time_point_put facet provides facilities for formatted output of __time_point values.
+The member function of __time_point_put take a __time_point and format it into character string representation.
+
+tparam ChatT a character type
+tparam OutputIterator a model of `OutputIterator`
+
+
+ template <class CharT, class OutputIterator = std::ostreambuf_iterator<CharT> >
+ class time_point_put: public std::locale::facet
+ {
+ public:
+ typedef CharT char_type; // Type of character the facet is instantiated on.
+ typedef std::basic_string<CharT> string_type; // Type of character string passed to member functions.
+ typedef OutputIterator iter_type; // Type of iterator used to write in the character buffer.
+
+ explicit time_point_put(size_t refs = 0);
+ ~time_point_put();
+
+ template <class Clock, class Duration>
+ iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point<Clock, Duration> const& tp, const CharT* pattern,
+ const CharT* pat_end) const;
+ template <class Clock, class Duration>
+ iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point<Clock, Duration> const& tp) const;
+ template <typename Rep, typename Period>
+ iter_type put_duration(iter_type i, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
+ template <typename Clock>
+ iter_type put_epoch(iter_type i, std::ios_base& os) const;
+
+ static std::locale::id id; // Unique identifier for this type of facet.
+
+
+ };
+
+
+[section:c Constructor `time_point_get(size_t)`]
+
+ explicit time_point_put(size_t refs = 0);
+
+
+Construct a time_point_put facet.
+
+__effects Construct a time_point_put facet.
+If the `refs` argument is `0` then destruction of the object is
+delegated to the locale, or locales, containing it. This allows
+the user to ignore lifetime management issues. On the other had,
+if `refs` is `1` then the object must be explicitly deleted;
+the locale will not do so. In this case, the object can be
+maintained across the lifetime of multiple locales.
+
+__params
+
+* [param refs] references
+
+[endsect]
+
+[section:put1 Member Function `put()`]
+
+ template <class Clock, class Duration>
+ iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point<Clock, Duration> const& tp, const CharT* pattern,
+ const CharT* pat_end) const;
+
+
+__params
+
+* [param i] an output stream iterator
+* [param ios] a reference to a ios_base
+* [param fill] the character used as filler
+* [param tp] the __time_point
+* [param pattern] begin of the formatting pattern
+* [param pat_end] end of the formatting pattern
+
+__effects Steps through the sequence from `pattern` to `pat_end`,
+identifying characters that are part of a pattern sequence. Each character
+that is not part of a pattern sequence is written to `s` immediately, and
+each pattern sequence, as it is identified, results in a call to
+__put_duration or __put_epoch;
+thus, pattern elements and other characters are interleaved in the output
+in the order in which they appear in the pattern. Pattern sequences are
+identified by converting each character `c` to a `char` value as if by
+`ct.narrow(c,0)`, where `ct` is a reference to `ctype<charT>` obtained from
+`ios.getloc()`. The first character of each sequence is equal to `'%'`,
+followed by a pattern specifier character spec, which can be `'d'` for
+the duration value or `'e'` for the epoch.
+For each valid pattern sequence identified, calls
+`put_duration(s, ios, fill, tp.time_since_epoch())` or `put_epoch(s, ios)`.
+
+__returns An iterator pointing immediately after the last character produced.
+
+[endsect]
+
+[section:put2 Member Function `put()`]
+
+ template <class Clock, class Duration>
+ iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point<Clock, Duration> const& tp) const;
+
+__params
+
+* [param i] an output stream iterator
+* [param ios] a reference to a ios_base
+* [param fill] the character used as filler
+* [param tp] the __time_point
+* [param tern] begin of the formatting pattern
+* [param pat_end] end of the formatting pattern
+
+__effects Stores the time_point pattern from the __time_point_unit facet in let say `str`. Last as if
+
+ return put(s, ios, fill, tp, str.data(), str.data() + str.size());
+
+__returns An iterator pointing immediately after the last character produced.
+
+[endsect]
+
+[section:put_duration Member Function `put_duration()`]
+
+ template <typename Rep, typename Period>
+ iter_type put_duration(iter_type i, std::ios_base& ios, char_type fill, duration<Rep, Period> const& d) const;
+
+__params
+
+* [param i] an output stream iterator
+* [param ios] a reference to a ios_base
+* [param fill] the character used as filler
+* [param d] the __duration
+
+__effects As if `facet.put(s, ios, fill, d)` where facet is the `__duration_put<CharT>` facet associated
+to the `ios` or a new instance of `__duration_put<CharT>`.
+
+__returns An iterator pointing immediately after the last character produced.
+
+[endsect]
+
+[section:put_epoch Member Function `put_epoch()`]
+
+ template <typename Clock>
+ iter_type put_epoch(iter_type i, std::ios_base& os) const;
+
+__params
+
+* [param i] an output stream iterator
+* [param ios] a reference to a ios_base
+
+__effects As if
+
+ string_type str = facet.template get_epoch<Clock>();
+ s=std::copy(str.begin(), str.end(), s);
+
+
+where facet is the `__time_point_units<CharT>` facet associated
+to the `ios` or a new instance of `__time_point_units_default<CharT>`.
+
+__returns s, iterator pointing immediately after the last character produced.
+
+[endsect]
+
+[endsect]
+
+[endsect] [/section:time_point_put_hpp]
+
+[/==================================================================]
+[section:time_point_units_hpp Header `<boost/chrono/io/time_point_units.hpp>`]
+[/==================================================================]
+
+ namespace boost {
+ namespace chrono {
+ template <typename CharT=char>
+ class time_point_units;
+ template <typename CharT=char>
+ class time_point_units_default,
+ }
+ }
-[endsect]
-[section:op_out Member Function `operator <<(basic_ostream<>&, duration_fmt)`]
+[section:time_point_units Template Class `time_point_units`]
- template<class CharT, class Traits>
- basic_ostream<CharT, Traits>&
- operator<<(basic_ostream<CharT, Traits>& s, duration_fmt d);
-__effects: `set_duration_style(s, static_cast<duration_style>(d))))`.
+__time_point_units facet gives useful information about the time_point pattern,
+the text associated to a time_point's epoch,
-__returns: `s`.
+ template <typename CharT=char>
+ class time_point_units: public std::locale::facet
+ {
+ public:
+ typedef CharT char_type; // Type of character the facet is instantiated on.
+ typedef std::basic_string<char_type> string_type; // Type of character string used by member functions.
+ static std::locale::id id; // Unique identifier for this type of facet.
-[endsect]
-[section:op_in Member Function `operator >>(basic_istream<>&, duration_fmt)`]
+ explicit time_point_units(size_t refs = 0);
- template<class CharT, class Traits>
- basic_istream<CharT, Traits>&
- operator>>(basic_istream<CharT, Traits>& s, duration_fmt d);
+ virtual string_type get_pattern() const =0;
+ template <typename Clock>
+ string_type get_epoch() const;
-__effects: `set_duration_style(s, static_cast<duration_style>(d))))`.
+ protected:
+ virtual ~time_point_units();
+ virtual string_type do_get_epoch(system_clock) const=0;
+ virtual string_type do_get_epoch(steady_clock) const=0;
+
+ #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+ virtual string_type do_get_epoch(process_real_cpu_clock) const=0;
+ virtual string_type do_get_epoch(process_user_cpu_clock) const=0;
+ virtual string_type do_get_epoch(process_system_cpu_clock) const=0;
+ virtual string_type do_get_epoch(process_cpu_clock) const=0;
+ #endif
+ #if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
+ virtual string_type do_get_epoch(thread_clock) const=0;
+ #endif
-__returns: `s`.
+ };
+
+
+[section:c Constructor `time_point_units()`]
-[endsect]
-[endsect]
+ explicit time_point_units(size_t refs = 0);
-[section:symbol_format Non Member Function `symbol_format(ios_base&`]
+Construct a __time_point_units facet.
- std::ios_base& __symbol_format(ios_base& ios);
+__params
-__effects: `set_duration_style(s, duration_style::symbol)`.
+* [param refs] references
-__returns `ios`
+__effects Construct a __time_point_units facet.
+If the `refs` argument is `0` then destruction of the object is
+delegated to the locale, or locales, containing it. This allows
+the user to ignore lifetime management issues. On the other had,
+if `refsv is `1` then the object must be explicitly deleted;
+the locale will not do so. In this case, the object can be
+maintained across the lifetime of multiple locales.
[endsect]
-[section:name_format Non Member Function `name_format(ios_base&`]
+
+[section:get_pattern Member Function `get_pattern()`]
- std::ios_base& __name_format(ios_base& ios);
+ virtual string_type get_pattern() const =0;
-__effects: `set_duration_style(s, duration_style::prefix)`.
+__returns the pattern to be used by default.
-__returns `ios`
+[endsect]
+
+[section:get_epoch Member Function `get_epoch()`]
+ template <typename Clock>
+ string_type get_epoch() const;
+
+__returns the epoch associated to the clock `Clock` calling `__do_get_epoch(Clock())`
[endsect]
-[endsect]
+
+[section:d Destructor `time_point_units()`]
+ virtual ~time_point_units();
-[section:streams I/O Streams Operations]
+Destroy the facet.
-[section:duration__op_out Member Function `operator <<(basic_ostream<>&, const duration<>& d)`]
+[endsect]
-Any __duration can be streamed out to a `basic_ostream`. The run-time value of the __duration is formatted according to the rules and current format settings for __duration`::rep`. This is followed by a single space and then the compile-time unit name of the __duration. This unit name is built on the string returned from `ratio_string<>` and the data used to construct the __duration_punct which was inserted into the stream's locale. If a __duration_punct has not been inserted into the stream's locale, a default constructed __duration_punct will be added to the stream's locale.
+[section:do_get_epoch_system_clock Member Function `do_get_epoch(system_clock)`]
+ virtual string_type do_get_epoch(system_clock) const=0;
- template <class CharT, class Traits, class Rep, class Period>
- std::basic_ostream<CharT, Traits>&
- operator<<(std::basic_ostream<CharT, Traits>& os, const duration<Rep, Period>& d);
+__params
-__effects Behaves as a formatted output function. After constructing a sentry object, if the sentry converts to true, sets a local variable `style` of type __duration_style to __prefix which serves as a default formatting style. If the stream's locale has a __duration_punct facet, then sets `style` to the value of the __duration_style stored within that facet.
+* [param c] a dummy instance of __system_clock.
-Next the translated unit is obtained using the __duration_unit_string function
+__returns The epoch string associated to the __system_clock.
-Finally, as if:
+[endsect]
- os << d.count() << ' ' << duration_unit_string<CharT>(f.is_prefix(), d);
+[section:do_get_epoch_steady_clock Member Function `do_get_epoch(steady_clock)`]
-__returns `os`.
+ virtual string_type do_get_epoch(steady_clock) const=0;
-[endsect]
-[section:duration__op_in Member Function `operator <<(basic_istream<>&, const duration<>& d)`]
+__params
- template <class CharT, class Traits, class Rep, class Period>
- std::basic_istream<CharT, Traits>&
- operator>>(std::basic_istream<CharT, Traits>& is, duration<Rep, Period>& d)
+* [param c] a dummy instance of __steady_clock.
-__effects Behaves as a formatted input function. After constructing a sentry object, if the sentry converts to true,
-computes an intermediate representation based on `Rep` according to the following rules:
+__returns The epoch string associated to the __steady_clock.
-* If `Rep` is a floating point type, the intermediate representation is `long double`.
-* Else if `Rep` is a signed integral type, the intermediate representation is `long long`.
-* Else if `Rep` is an unsigned integral type, the intermediate representation is unsigned long long.
-* Else intermediate representation is `Rep`.
+[endsect]
-Next a local variable `ir` of type intermediate representation is default constructed and extracted from the stream as if by:
+[section:do_get_epoch_process_real_cpu_clock Member Function `do_get_epoch(process_real_cpu_clock)`]
- IR ir;
- is >> ir;
+ #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+ virtual string_type do_get_epoch(process_real_cpu_clock) const=0;
+ #endif
+
+__params
-If the extraction is successful, then an attempt is made to consume a space character. If this fails, `is.setstate(ios::failbit)` is called.
+* [param c] a dummy instance of __process_real_cpu_clock.
-Otherwise if the next character is `'['`, an attempt is made to consume a pattern of the form `"[N/D]s"`, `"[N/D]second"` or `"[N/D]seconds"` (whichever is longest) where `N` and `D` have type `unsigned long long`. If successful, local variables record the values of `N` and `D`, otherwise `is.setstate(ios::failbit)` is called.
+__returns The epoch string associated to the __process_real_cpu_clock.
+
+[endsect]
-Otherwise the next character is not `'['`. An attempt is made to parse the longest string possible matching one of the `ratio_string` SI prefixes or symbols. If successful, local variables record the `unsigned long long` numerator and denominator associated with the parsed string. If unsuccessful, `is.setstate(ios::failbit)` is called.
+[section:do_get_epoch_process_user_cpu_clock Member Function `do_get_epoch(process_user_cpu_clock)`]
-If a unit specifier has successfully been parsed, assume it has been stored as local `unsigned long long` variables `num` and `den`. And in this case compute `(num/den)/(Period::num/Period::den)` reduced to lowest terms. If this ratio can not be stored without overflow, call `is.setstate(ios::failbit)`. Otherwise store the result of this division in `num` and `den`.
+ #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+ virtual string_type do_get_epoch(process_user_cpu_clock) const=0;
+ #endif
+
+__params
-If the division did not result in overflow, then compute `r * num / den` in such a way as to avoid intermediate overflow. If `r` has integral type and this computation would not be exact, `is.setstate(ios::failbit)` is called. If the result of the computation would overflow `Rep`, `is.setstate(ios::failbit)` is called. Otherwise the result of `r * num / den` is used to construct a `duration<Rep, Period>` which is assigned to `d`.
+* [param c] a dummy instance of __process_real_cpu_clock.
-If at any time end-of-stream is detected, the algorithm calls `is.setstate(ios::eofbit)`.
+__returns The epoch string associated to the process_user_cpu_clock.
-__returns `is`
[endsect]
-[endsect]
+[section:do_get_epoch_process_system_cpu_clock Member Function `do_get_epoch(process_system_cpu_clock)`]
+ #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+ virtual string_type do_get_epoch(process_system_cpu_clock) const=0;
+ #endif
+
+__params
-[endsect] [/section:duration_io_hpp Header `<boost/chrono/io/duration_io.hpp>`]
+* [param c] a dummy instance of __process_system_cpu_clock.
-[/==================================================================]
-[section:time_point_get_hpp Header `<boost/chrono/io/time_point_get.hpp>`]
-[/==================================================================]
+__returns The epoch string associated to the process_user_cpu_clock.
- namespace boost {
- namespace chrono {
+[endsect]
+[section:do_get_epoch_process_process_cpu_clock Member Function `do_get_epoch(process_cpu_clock)`]
- }
- }
+ #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+ virtual string_type do_get_epoch(process_cpu_clock) const=0;
+ #endif
+
+__params
+* [param c] a dummy instance of __process_cpu_clock.
-[endsect] [/section:time_point_get_hpp]
+__returns The epoch string associated to the process_cpu_clock.
-[/==================================================================]
-[section:time_point_put_hpp Header `<boost/chrono/io/time_point_put.hpp>`]
-[/==================================================================]
+[endsect]
- namespace boost {
- namespace chrono {
+[section:do_get_epoch_process_thread_clock Member Function `do_get_epoch(thread_clock)`]
+ #if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
+ virtual string_type do_get_epoch(thread_clock) const=0;
+ #endif
+
+__params
- }
- }
+* [param c] a dummy instance of __thread_clock.
+__returns The epoch string associated to the __thread_clock.
-[endsect] [/section:time_point_put_hpp]
+[endsect]
-[/==================================================================]
-[section:time_point_units_hpp Header `<boost/chrono/io/time_point_units.hpp>`]
-[/==================================================================]
- namespace boost {
- namespace chrono {
+[endsect]
+[section:time_point_units_default Template Class `time_point_units_default`]
+ // This class is used to define the strings for the default English
+ template <typename CharT=char>
+ class time_point_units_default: public time_point_units<CharT>
+ {
+ public:
+ typedef CharT char_type; // Type of character the facet is instantiated on.
+ typedef std::basic_string<char_type> string_type; // Type of character string used by member functions.
- }
- }
+ explicit time_point_units_default(size_t refs = 0);
+ ~time_point_units_default();
+ /**
+ * __returns the default pattern "%d%e".
+ */
+ string_type get_pattern() const;
+
+ protected:
+ /**
+ * [param c a dummy instance of __system_clock.
+ * __returns The epoch string returned by `clock_string<system_clock,CharT>::since()`.
+ */
+ string_type do_get_epoch(system_clock ) const;
+ /**
+ * [param c a dummy instance of __steady_clock.
+ * __returns The epoch string returned by `clock_string<steady_clock,CharT>::since()`.
+ */
+ string_type do_get_epoch(steady_clock ) const;
+ #if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+ /**
+ * [param c a dummy instance of __process_real_cpu_clock.
+ * __returns The epoch string returned by `clock_string<process_real_cpu_clock,CharT>::since()`.
+ */
+ string_type do_get_epoch(process_real_cpu_clock ) const;
+ /**
+ * [param c a dummy instance of __process_user_cpu_clock.
+ * __returns The epoch string returned by `clock_string<process_user_cpu_clock,CharT>::since()`.
+ */
+ string_type do_get_epoch(process_user_cpu_clock ) const;
+ /**
+ * [param c a dummy instance of __process_system_cpu_clock.
+ * __returns The epoch string returned by `clock_string<process_system_cpu_clock,CharT>::since()`.
+ */
+ string_type do_get_epoch(process_system_cpu_clock ) const;
+ /**
+ * [param c a dummy instance of __process_cpu_clock.
+ * __returns The epoch string returned by `clock_string<process_cpu_clock,CharT>::since()`.
+ */
+ string_type do_get_epoch(process_cpu_clock ) const;
+
+ #endif
+ #if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
+ /**
+ * [param c a dummy instance of __thread_clock.
+ * __returns The epoch string returned by `clock_string<thread_clock,CharT>::since()`.
+ */
+ string_type do_get_epoch(thread_clock ) const;
+ #endif
+
+ };
+[endsect]
[endsect] [/section:time_point_units_hpp]
@@ -4956,7 +6385,7 @@
__returns: An unspecified object that when streamed to a `basic_ostream<CharT, Traits>` or `basic_istream<CharT, Traits>` `s` will have the effects of:
- set_timezone(s, tz);
+ __set_timezone(s, tz);
[endsect]
@@ -4969,129 +6398,8 @@
__returns: An unspecified object that when streamed to a `basic_ostream<CharT, Traits>` or `basic_istream<CharT, Traits>` `s` will have the effects of:
- set_timezone(s, tz);
- set_time_fmt<CharT>(s, f);
-
-[endsect]
-[endsect]
-
-[section:ioss I/O State Savers]
-[section:timezone_io_saver Template Class `timezone_io_saver<>`]
-
-
- template<typename CharT = char, typename Traits = std::char_traits<CharT> >
- struct __timezone_io_saver
- {
- typedef std::basic_ios<CharT, Traits> state_type;
- typedef __timezone aspect_type;
-
- explicit __timezone_io_saver__c1(state_type &s);
- __timezone_io_saver__c2(state_type &s, aspect_type new_value);
- __timezone_io_saver__d();
- void timezone_io_saver__restore();
- };
-
-
-The `state_type` is a version of the IOStreams base class template `std::basic_ios<CharT, Traits>`, where `CharT` is a character type and `Traits` is a character traits class. The user would usually place an actual input, output, or combined stream object for the state-type parameter, and not a base class object.
-
-[section:c1 Constructor `timezone_io_saver(state_type&)`]
-
-The first constructor takes a stream object and saves a reference to the stream and the current value of a particular stream attribute.
-
- explicit timezone_io_saver(state_type &s);
-
-__effects Constructs a __timezone_io_saver by storing `s`.
-
-[endsect]
-
-[section:c2 Constructor `timezone_io_saver(state_type, aspect_type)`]
-
-The second constructor works like the first, and uses its second argument to change the stream's attribute to the new aspect_type value given.
-
- explicit timezone_io_saver(state_type &s, aspect_type new_value);
-
-__effects Constructs a __timezone_io_saver by storing `s`.
-
-
-[endsect]
-
-[section:d Destructor `~timezone_io_saver()`]
-
-The destructor restores the stream's attribute to the saved value.
-
- ~timezone_io_saver();
-
-__effects As if __timezone_io_saver__restore().
-
-[endsect]
-[section:restore Member Function `restore()`]
-
-The restoration can be activated early (and often) with the restore member function.
-
- void restore();
-
-__effects Restores the stream's __timezone attribute to the saved value.
-
-[endsect]
-
-
-[endsect]
-
-[section:time_fmt_io_saver Template Class `time_fmt_io_saver<>`]
-
- template<typename CharT = char, typename Traits = std::char_traits<CharT> >
- struct __time_fmt_io_saver
- {
- typedef std::basic_ios<CharT, Traits> state_type;
-
- explicit __time_fmt_io_saver__c1(state_type &s);
- __time_fmt_io_saver__c2(state_type &s, basic_string<CharT> const& new_value);
- __time_fmt_io_saver__d();
- void __time_fmt_io_saver__restore();
- };
-
-
-The `state_type` is a version of the IOStreams base class template `std::basic_ios<CharT, Traits>`, where `CharT` is a character type and `Traits` is a character traits class. The user would usually place an actual input, output, or combined stream object for the state-type parameter, and not a base class object.
-
-[section:c1 Constructor `time_fmt_io_saver(state_type&)`]
-
-The first constructor takes a stream object and saves a reference to the stream and the current value of a particular stream attribute.
-
- explicit time_fmt_io_saver(state_type &s);
-
-__effects Constructs a __time_fmt_io_saver by storing `s`.
-
-[endsect]
-
-[section:c2 Constructor `time_fmt_io_saver(state_type, aspect_type)`]
-
-The second constructor works like the first, and uses its second argument to change the stream's attribute to the new aspect_type value given.
-
- explicit time_fmt_io_saver(state_type &s, aspect_type new_value);
-
-__effects Constructs a __time_fmt_io_saver by storing `s`.
-
-
-[endsect]
-
-[section:d Destructor `~time_fmt_io_saver()`]
-
-The destructor restores the stream's attribute to the saved value.
-
- ~time_fmt_io_saver();
-
-__effects As if __time_fmt_io_saver__restore().
-
-[endsect]
-[section:restore Member Function `restore()`]
-
-The restoration can be activated early (and often) with the restore member function.
-
- void restore();
-
-__effects Restores the stream's time format attribute to the saved value.
-
-[endsect]
+ __set_timezone(s, tz);
+ __set_time_fmt<CharT>(s, f);
[endsect]
[endsect]
@@ -5137,19 +6445,18 @@
[endsect]
[section:op_in Non Member Function `operator>>()`]
- template <class CharT, class Traits, class __Clock, class __Duration>
+ template <class CharT, class Traits, class __Duration>
std::basic_istream<CharT, Traits>&
operator>>(std::basic_istream<CharT, Traits>& is,
- time_point<__Clock, __Duration>& tp);
+ time_point<system_clock, __Duration>& tp);
__effects Behaves as a formatted input function. After constructing a sentry object, if the sentry converts to true,
obtains a `std::time_get` facet from `is`, and obtains a formatting string in the same manner as described for
insertion operator. Extract a `tm` using the supplied formatting string, or if empty, defaulted as described for the
-insertion operator. Note that extraction does not use the __timezone data stored in the time_punct facet for the
+insertion operator. Note that extraction does not use the __timezone data stored in the `is` for the
defaulted string as the __timezone information is stored in the stream.
-Given any __time_punct imbued on a `basic_iostream`, or if the `basic_iostream` does not have an imbued __time_punct,
-any `time_point<system_clock, __Duration>` inserted, and then extracted should result in an equal
+Any `time_point<system_clock, __Duration>` inserted, and then extracted should result in an equal
`time_point<system_clock, __Duration>`, excepting any precision that did not get inserted.
__example
@@ -5179,27 +6486,16 @@
operator<<(std::basic_ostream<CharT, Traits>& os,
const time_point<__Clock, __Duration>& tp);
-__effects Formats a `tp` to the stream `os`.
-
-A __time_point is formatted by outputting its internal __duration. Next follows the possible translation of string that
-describes the `__time_point::clock` epoch.
-
-This string will vary for each distinct clock, and for each implementation
-of the supplied clocks as described in __clock_string.
-The translation is done by the time_point_units facet allowing to adapt the English string to different locales.
-
-The resulting string must be readable by the extraction operator and result in an equal value and should make the form
-interpretable by a human reader.
+__effects Behaves as a formatted output function. After constructing a `sentry` object, if the `sentry`
+converts to `true`, calls to `facet.put(os,os,os.fill(),tp)` where `facet` is the `time_point_put<CharT>`
+facet associated to `os` or a new created instance of the default `time_point_put<CharT>` facet.
-Resuming as if
-
- return os << tp.__time_since_epoch() << __epoch_translate(__clock_string<__Clock, CharT>::__since());
+__returns `os`.
__example
22644271279698 nanoseconds since boot
-__returns `os`.
[endsect]
[section:op_in Non Member Function `operator>>()`]
@@ -5209,11 +6505,11 @@
operator>>(std::basic_istream<CharT, Traits>& is,
time_point<__Clock, __Duration>& tp);
-__effects Extracts `tp` from the stream `is`.
-
-First a duration is extracted.
+Extracts `tp` from the stream `is`.
-Then if if no error occurred the string __epoch_translate(__clock_string<__Clock>::since()) must match the extracted input.
+__effects Behaves as a formatted input function. After constructing a `sentry` object, if the `sentry`
+converts to `true`, calls to `facet.get(is,std::istreambuf_iterator<CharT, Traits>(), is, err, tp)` where `facet` is the `time_point_get<CharT>`
+facet associated to `is` or a new created instance of the default `time_point_get<CharT>` facet.
If any step fails, calls `os.setstate(std::ios_base::failbit | std::ios_base::badbit)`.
@@ -5230,7 +6526,7 @@
-
+[/
[/==================================================================]
[section:duration_unit_string_hpp Header `<boost/chrono/io/duration_unit_string.hpp>`]
[/==================================================================]
@@ -5360,7 +6656,7 @@
[endsect]
[endsect] [/section:translate_hpp Header `<boost/chrono/io/translate.hpp>`]
-
+]
[endsect] [/section:io Chrono I/O]
@@ -6293,10 +7589,9 @@
* [@http://svn.boost.org/trac/boost/ticket/5980 #5980] Take care of the Howard Hinnant [@http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html proposal] which has the advantage to provide I/O for system clocks using the Gregorian Calendar.
* [@http://svn.boost.org/trac/boost/ticket/5981 #5981] Added i/o state savers.
-
[*Deprecated:]
-* The chrono i/o version included in Boost.Chrono 1.2.0 has been completmly refactored in version 2.0.0
+* The chrono i/o version included in Boost.Chrono 1.2.x has been completmly refactored in version 2.0.0
* chrono I/O: The manipulators __duration_short, __duration_long are depreceated. You should use the parameterized form __duration_fmt or the renamed manipulators __duration_symbol and __duration_prefix instead.
* chrono I/O: The duraction_punc<> facet is depreceated. You should use the __get_duration_style free function to get the informations and use the duration_units facet for localization purposes.
@@ -6304,16 +7599,26 @@
[*Fixes:]
+* [@http://svn.boost.org/trac/boost/ticket/6241 #6241] boost::chrono compilation problems without std::wstring support.
+
+[/* [@http://svn.boost.org/trac/boost/ticket/6094 #6094] 1 secondALPHA should be an invalid input for a duration.]
+
+[endsect] [/section [*Version 2.0.0] ]
+
+[section [*Version 1.2.1, February 1, 2012 - 1.49] ]
+
+[*Fixes:]
+
* [@http://svn.boost.org/trac/boost/ticket/6092 #6092] Input from non integral durations makes the compiler fail.
* [@http://svn.boost.org/trac/boost/ticket/6093 #6093] [1/3]second fails as valid duration input.
* [@http://svn.boost.org/trac/boost/ticket/6113 #6113] duplicate symbol when BOOST_CHRONO_HEADER_ONLY is defined.
+* [@http://svn.boost.org/trac/boost/ticket/6243 #6243] Sandia-pgi-11.9: more than one instance of overloaded function "min" matches.
+* [@http://svn.boost.org/trac/boost/ticket/6257 #6257] process_cpu_clock::now() on linux gives time_points 1/1000 times.
-[/* [@http://svn.boost.org/trac/boost/ticket/6094 #6094] 1 secondALPHA should be an invalid input for a duration.]
+[endsect] [/section [*Version 1.2.1] ]
-[endsect] [/section [*Version 2.0.0] ]
[section [*Version 1.2.0, October 17, 2011] ]
-
[*New Features:]
* [@http://svn.boost.org/trac/boost/ticket/5979 #5979] Added chrono rounding utilities as defined By Howard Hinnant [@http://home.roadrunner.com/~hinnant/duration_io/chrono_util.html here].
Modified: branches/quickbook-dev/libs/config/doc/configuring_boost.qbk
==============================================================================
--- branches/quickbook-dev/libs/config/doc/configuring_boost.qbk (original)
+++ branches/quickbook-dev/libs/config/doc/configuring_boost.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -111,7 +111,7 @@
the default user.hpp provided by boost. This option allows only one
configure-generated setup; boost developers should avoid this option,
as it incurs the danger of accidentally committing a configure-modified
-__BOOST_CONFIG_USER_HEADER__ to the cvs repository (something you will not
+__BOOST_CONFIG_USER_HEADER__ to the svn repository (something you will not
be thanked for!).
* [*Option 2:] give the header a more memorable name, and place it somewhere
@@ -237,7 +237,7 @@
to look for in a dll rather than in a static library).
Note that there may be some libraries that can only be statically linked
(Boost.Test for example) and others which may only be dynamically linked
-(Boost.Threads for example), in these cases this macro has no effect.
+(Boost.Thread for example), in these cases this macro has no effect.
]]
[[`BOOST_`['WHATEVER]`_DYN_LINK`][
Forces library "whatever" to be linked as a dll rather than a static library
@@ -248,7 +248,7 @@
which symbols to look for in a dll rather than in a static library).
Note that there may be some libraries that can only be statically linked
(Boost.Test for example) and others which may only be dynamically linked
-(Boost.Threads for example), in these cases this macro is unsupported.
+(Boost.Thread for example), in these cases this macro is unsupported.
]]
[[`BOOST_ALL_NO_LIB`][
Tells the config system not to automatically select which libraries to link
@@ -307,7 +307,7 @@
The following usage examples represent just a few of the possibilities:
-[section Example 1, creating our own frozen configuration]
+[section Example 1: creating our own frozen configuration]
Lets suppose that we're building boost with Visual C++ 6, and STLport 4.0. Lets
suppose also that we don't intend to update our compiler or standard library
@@ -346,8 +346,8 @@
`BOOST_NO_COMPILER_CONFIG` either on the command line, or in __BOOST_CONFIG_USER_HEADER__,
and miss out the compiler configuration header altogether (actually you miss out
two headers, one which works out what the compiler is, and one that configures
-boost for it). This has two consequences: the first is that less code has to be c
-ompiled, and the second that you have removed a dependency on two boost headers.
+boost for it). This has two consequences: the first is that less code has to be
+compiled, and the second that you have removed a dependency on two boost headers.
[endsect]
Modified: branches/quickbook-dev/libs/config/doc/guidelines.qbk
==============================================================================
--- branches/quickbook-dev/libs/config/doc/guidelines.qbk (original)
+++ branches/quickbook-dev/libs/config/doc/guidelines.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -62,7 +62,7 @@
[section:warnings Disabling Compiler Warnings]
The header `<boost/config/warning_disable.hpp>` can be used to disable
-certain compiler warings that are hard or impossible to otherwise remove.
+certain compiler warnings that are hard or impossible to otherwise remove.
Note that:
Modified: branches/quickbook-dev/libs/config/doc/html/boost_config/acknowledgements.html
==============================================================================
--- branches/quickbook-dev/libs/config/doc/html/boost_config/acknowledgements.html (original)
+++ branches/quickbook-dev/libs/config/doc/html/boost_config/acknowledgements.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -21,7 +21,7 @@
<div class="spirit-nav">
<a accesskey="p" href="rationale.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a>
</div>
-<div class="section">
+<div class="section boost_config_acknowledgements">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_config.acknowledgements"></a><a class="link" href="acknowledgements.html" title="Acknowledgements">Acknowledgements</a>
</h2></div></div></div>
Modified: branches/quickbook-dev/libs/config/doc/html/boost_config/boost_macro_reference.html
==============================================================================
--- branches/quickbook-dev/libs/config/doc/html/boost_config/boost_macro_reference.html (original)
+++ branches/quickbook-dev/libs/config/doc/html/boost_config/boost_macro_reference.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,7 +22,7 @@
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="guidelines_for_boost_authors.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_config.boost_macro_reference"></a><a class="link" href="boost_macro_reference.html" title="Boost Macro Reference">Boost Macro Reference</a>
</h2></div></div></div>
@@ -41,10 +41,12 @@
Helper Macros</a></span></dt>
<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros">Boost
Informational Macros</a></span></dt>
+<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros">Boost
+ Deprecated Macros</a></span></dt>
<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code">Macros
for libraries with separate source code</a></span></dt>
</dl></div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_macros_that_describe_c__03_defects">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.boost_macro_reference.macros_that_describe_c__03_defects"></a><a name="config_defects"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects" title="Macros that describe C++03 defects">Macros
that describe C++03 defects</a>
@@ -315,7 +317,7 @@
<td>
<p>
The compiler fails to compile a nested class that has a dependent
- base class:
+ base class:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">:</span> <span class="special">{</span>
@@ -341,9 +343,8 @@
<td>
<p>
Template value parameters cannot have a dependent type, for example:
-
</p>
-<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">></span>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">></span>
<span class="keyword">class</span> <span class="identifier">X</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
</pre>
<p>
@@ -422,7 +423,7 @@
<td>
<p>
The compiler does not perform function template ordering or its
- function template ordering is incorrect.
+ function template ordering is incorrect.
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="comment">// #1</span>
<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">);</span>
@@ -1314,7 +1315,7 @@
<td>
<p>
The compiler does not allow a void function to return the result
- of calling another void function.
+ of calling another void function.
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{}</span>
<span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">();</span> <span class="special">}</span>
@@ -1326,7 +1327,7 @@
</tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_macros_that_describe_optional_features">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.boost_macro_reference.macros_that_describe_optional_features"></a><a name="config_features"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features" title="Macros that describe optional features">Macros
that describe optional features</a>
@@ -2235,7 +2236,7 @@
</tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_macros_that_describe_possible_c___future_features">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features" title="Macros that describe possible C++ future features">Macros
that describe possible C++ future features</a>
@@ -2275,7 +2276,7 @@
</tr></tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_macros_that_describe_c__11_features_not_supported">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported" title="Macros that describe C++11 features not supported">Macros
that describe C++11 features not supported</a>
@@ -2305,7 +2306,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_ARRAY</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code>
</p>
</td>
<td>
@@ -2317,7 +2318,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CHRONO</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code>
</p>
</td>
<td>
@@ -2329,7 +2330,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CODECVT</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code>
</p>
</td>
<td>
@@ -2341,7 +2342,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CONDITION_VARIABLE</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code>
</p>
</td>
<td>
@@ -2353,7 +2354,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FORWARD_LIST</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code>
</p>
</td>
<td>
@@ -2365,7 +2366,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FUTURE</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code>
</p>
</td>
<td>
@@ -2377,7 +2378,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_INITIALIZER_LIST</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
</p>
</td>
<td>
@@ -2389,7 +2390,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_MUTEX</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code>
</p>
</td>
<td>
@@ -2401,7 +2402,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RANDOM</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code>
</p>
</td>
<td>
@@ -2413,7 +2414,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RATIO</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code>
</p>
</td>
<td>
@@ -2425,7 +2426,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_REGEX</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code>
</p>
</td>
<td>
@@ -2437,7 +2438,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_SYSTEM_ERROR</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code>
</p>
</td>
<td>
@@ -2449,7 +2450,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_THREAD</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code>
</p>
</td>
<td>
@@ -2461,7 +2462,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TUPLE</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code>
</p>
</td>
<td>
@@ -2473,7 +2474,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPEINDEX</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code>
</p>
</td>
<td>
@@ -2485,7 +2486,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPE_TRAITS</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code>
</p>
</td>
<td>
@@ -2497,7 +2498,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_MAP</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code>
</p>
</td>
<td>
@@ -2509,7 +2510,7 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_SET</span></code>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
</p>
</td>
<td>
@@ -2692,18 +2693,6 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_INITIALIZER_LISTS</span></code>
- </p>
- </td>
-<td>
- <p>
- The C++ compiler does not support C++0x initializer lists.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
<code class="computeroutput"><span class="identifier">BOOST_NO_LAMBDAS</span></code>
</p>
</td>
@@ -2876,7 +2865,7 @@
</tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_macros_that_allow_use_of_c__11_features_with_c__03_compilers">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers"></a><a name="config_11_for_03"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers" title="Macros that allow use of C++11 features with C++03 compilers">Macros
that allow use of C++11 features with C++03 compilers</a>
@@ -2898,11 +2887,6 @@
</th>
<th>
<p>
- Section
- </p>
- </th>
-<th>
- <p>
Description
</p>
</th>
@@ -2918,12 +2902,12 @@
<p>
Some compilers don't support the use of <code class="computeroutput"><span class="identifier">constexpr</span></code>.
This macro expands to nothing on those compilers, and <code class="computeroutput"><span class="identifier">constexpr</span></code> elsewhere. For example,
- when defining a constexpr function or constructor replace:
+ when defining a constexpr function or constructor replace:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">constexpr</span> <span class="identifier">tuple</span><span class="special">();</span>
</pre>
<p>
- with:
+ with:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_CONSTEXPR</span> <span class="identifier">tuple</span><span class="special">();</span>
</pre>
@@ -2943,12 +2927,11 @@
This macro expands to <code class="computeroutput"><span class="keyword">const</span></code>
on those compilers, and <code class="computeroutput"><span class="identifier">constexpr</span></code>
elsewhere. For example, when defining const expr variables replace:
-
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="identifier">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
</pre>
<p>
- with:
+ with:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
</pre>
@@ -2965,13 +2948,13 @@
<td>
<p>
This is a shortcut for <code class="computeroutput"><span class="keyword">static</span>
- <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>For
- example, when defining const expr variables replace:
+ <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>.
+ For example, when defining const expr variables replace:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="identifier">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
</pre>
<p>
- with:
+ with:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_STATIC_CONSTEXPR</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
</pre>
@@ -2982,7 +2965,6 @@
<tr>
<td>
<p>
-
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOEXCEPT</span>
<span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span>
@@ -2999,7 +2981,6 @@
</p>
<div class="blockquote"><blockquote class="blockquote">
<p>
-
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span>
<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span>
@@ -3015,7 +2996,6 @@
</p>
<div class="blockquote"><blockquote class="blockquote">
<p>
-
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span> <span class="identifier">noexcept</span>
<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">((</span><span class="identifier">Predicate</span><span class="special">))</span>
@@ -3029,7 +3009,7 @@
</tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_boost_helper_macros">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.boost_macro_reference.boost_helper_macros"></a><a name="config_helpers"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros" title="Boost Helper Macros">Boost
Helper Macros</a>
@@ -3066,12 +3046,12 @@
<p>
This macro is used where a compiler specific workaround is required
that is not otherwise described by one of the other Boost.Config
- macros. To use the macro you must first
+ macros. To use the macro you must first
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">workaround</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
</pre>
<p>
- usage is then:
+ usage is then:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#if</span> <span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">MACRONAME</span><span class="special">,</span> <span class="identifier">CONDITION</span><span class="special">)</span>
<span class="comment">// workaround code goes here...</span>
@@ -3114,12 +3094,12 @@
Sometimes you have a function name with the same name as a C macro,
for example "min" and "max" member functions,
in which case one can prevent the function being expanded as a
- macro using:
+ macro using:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">min</span> <span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
</pre>
<p>
- The following also works in most, but not all, contexts:
+ The following also works in most, but not all, contexts:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">(</span><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">max</span><span class="special">)(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
</pre>
@@ -3214,14 +3194,14 @@
integral constant members, we must use enums as a workaround if
we want the constants to be available at compile-time. This macro
gives us a convenient way to declare such constants. For example
- instead of:
+ instead of:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span>
<span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
<span class="special">};</span>
</pre>
<p>
- use:
+ use:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span>
<span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span>
@@ -3254,7 +3234,7 @@
<p>
Some compilers silently "fold" different function template
instantiations if some of the template parameters don't appear
- in the function parameter list. For instance:
+ in the function parameter list. For instance:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">ostream</span><span class="special">></span>
@@ -3278,7 +3258,7 @@
incorrectly outputs <code class="literal">2 2 double double</code> on VC++
6. These macros, to be used in the function parameter list, fix
the problem without effects on the calling syntax. For instance,
- in the case above write:
+ in the case above write:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">></span>
<span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">n</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span>
@@ -3313,7 +3293,7 @@
</td>
<td>
<p>
- When the standard library does not have a comforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code> there are various workarounds
+ When the standard library does not have a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code> there are various workarounds
available, but they differ from library to library. This macro
provides a consistent way to access a locale's facets. For example,
replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span><span class="special"><</span><span class="identifier">Type</span><span class="special">>(</span><span class="identifier">loc</span><span class="special">);</span></code>
@@ -3404,7 +3384,7 @@
techniques.
</p>
<p>
- Usage example:
+ Usage example:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
<span class="identifier">BOOST_FORCEINLINE</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">&</span> <span class="identifier">t</span><span class="special">)</span>
@@ -3425,7 +3405,7 @@
</tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_boost_informational_macros">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.boost_macro_reference.boost_informational_macros"></a><a name="config_info_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros" title="Boost Informational Macros">Boost
Informational Macros</a>
@@ -3703,7 +3683,429 @@
</tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_boost_deprecated_macros">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_config.boost_macro_reference.boost_deprecated_macros"></a><a name="deprecated_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros" title="Boost Deprecated Macros">Boost
+ Deprecated Macros</a>
+</h3></div></div></div>
+<p>
+ The following have been deprecated; please use the replacements instead.
+ They will be removed in a future version of boost.
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Deprecated Macro
+ </p>
+ </th>
+<th>
+ <p>
+ Replacement
+ </p>
+ </th>
+<th>
+ <p>
+ When deprecated
+ </p>
+ </th>
+<th>
+ <p>
+ When removed
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_ARRAY</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CHRONO</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CODECVT</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CONDITION_VARIABLE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FORWARD_LIST</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FUTURE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_INITIALIZER_LIST</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_INITIALIZER_LISTS</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_MUTEX</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RANDOM</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RATIO</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_REGEX</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_SYSTEM_ERROR</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_THREAD</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TUPLE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPE_TRAITS</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPEINDEX</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_SET</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_MAP</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Boost 1.50
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section boost_config_boost_macro_reference_macros_for_libraries_with_separate_source_code">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code" title="Macros for libraries with separate source code">Macros
for libraries with separate source code</a>
@@ -3736,7 +4138,7 @@
See <a href="http://svn.boost.org/trac/boost/wiki/Guidelines/Separate" target="_top">Guidelines
for Authors of Boost Libraries Containing Separate Source</a>
</p>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_macros_for_libraries_with_separate_source_code_macros_controlling_shared_library_symbol_visibility">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility" title="Macros controlling shared library symbol visibility">Macros
controlling shared library symbol visibility</a>
@@ -3822,7 +4224,7 @@
RTTI. Examples include class for objects that will be thrown
as exceptions or used in dynamic_casts, across shared library
boundaries. For example, a header-only exception class might
- look like this:
+ look like this:
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">class</span> <span class="identifier">BOOST_SYMBOL_VISIBLE</span> <span class="identifier">my_exception</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
</pre>
@@ -3860,7 +4262,7 @@
<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_DYN_LINK</span><span class="special">)</span> <span class="special">||</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_DYN_LINK</span><span class="special">)</span>
<span class="preprocessor"># if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_SOURCE</span><span class="special">)</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_EXPORT</span>
-<span class="preprocessor"># else</span>
+<span class="preprocessor"># else</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_IMPORT</span>
<span class="preprocessor"># endif</span>
<span class="preprocessor">#else</span>
@@ -3882,7 +4284,7 @@
<span class="bold"><strong>boost/libs/foo/src/foo.cpp</strong></span>
</p>
<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_FOO_SOURCE</span>
-<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foo</span><span class="special">/</span><span class="identifier">foo</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foo</span><span class="special">/</span><span class="identifier">foo</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="special">...</span>
<span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">()</span>
<span class="special">{</span>
@@ -3891,7 +4293,7 @@
<span class="special">...</span>
</pre>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_macros_for_libraries_with_separate_source_code_abi_fixing">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing" title="ABI Fixing">ABI
Fixing</a>
@@ -3949,7 +4351,7 @@
to point to their own prefix/suffix headers if they so wish.
</p>
</div>
-<div class="section">
+<div class="section boost_config_boost_macro_reference_macros_for_libraries_with_separate_source_code_automatic_library_selection">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection" title="Automatic library selection">Automatic
library selection</a>
Modified: branches/quickbook-dev/libs/config/doc/html/boost_config/guidelines_for_boost_authors.html
==============================================================================
--- branches/quickbook-dev/libs/config/doc/html/boost_config/guidelines_for_boost_authors.html (original)
+++ branches/quickbook-dev/libs/config/doc/html/boost_config/guidelines_for_boost_authors.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,7 +22,7 @@
<div class="spirit-nav">
<a accesskey="p" href="boost_macro_reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
-<div class="section">
+<div class="section boost_config_guidelines_for_boost_authors">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_config.guidelines_for_boost_authors"></a><a class="link" href="guidelines_for_boost_authors.html" title="Guidelines for Boost Authors">Guidelines for
Boost Authors</a>
@@ -103,14 +103,14 @@
the majority of compilers, such as namespaces, exceptions, RTTI, or templates.
</li>
</ul></div>
-<div class="section">
+<div class="section boost_config_guidelines_for_boost_authors_warnings">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.guidelines_for_boost_authors.warnings"></a><a class="link" href="guidelines_for_boost_authors.html#boost_config.guidelines_for_boost_authors.warnings" title="Disabling Compiler Warnings">Disabling
Compiler Warnings</a>
</h3></div></div></div>
<p>
The header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">warning_disable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- can be used to disable certain compiler warings that are hard or impossible
+ can be used to disable certain compiler warnings that are hard or impossible
to otherwise remove.
</p>
<p>
@@ -182,7 +182,7 @@
</tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_guidelines_for_boost_authors_adding_new_defect_macros">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.guidelines_for_boost_authors.adding_new_defect_macros"></a><a class="link" href="guidelines_for_boost_authors.html#boost_config.guidelines_for_boost_authors.adding_new_defect_macros" title="Adding New Defect Macros">Adding
New Defect Macros</a>
@@ -285,7 +285,7 @@
</li>
</ul></div>
</div>
-<div class="section">
+<div class="section boost_config_guidelines_for_boost_authors_adding_new_feature_test_macros">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.guidelines_for_boost_authors.adding_new_feature_test_macros"></a><a class="link" href="guidelines_for_boost_authors.html#boost_config.guidelines_for_boost_authors.adding_new_feature_test_macros" title="Adding New Feature Test Macros">Adding
New Feature Test Macros</a>
@@ -309,7 +309,7 @@
<code class="computeroutput"><span class="special"><</span><span class="identifier">unistd</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>).
</p>
</div>
-<div class="section">
+<div class="section boost_config_guidelines_for_boost_authors_modifying_the_boost_configuration_headers">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.guidelines_for_boost_authors.modifying_the_boost_configuration_headers"></a><a class="link" href="guidelines_for_boost_authors.html#boost_config.guidelines_for_boost_authors.modifying_the_boost_configuration_headers" title="Modifying the Boost Configuration Headers">Modifying
the Boost Configuration Headers</a>
Modified: branches/quickbook-dev/libs/config/doc/html/boost_config/rationale.html
==============================================================================
--- branches/quickbook-dev/libs/config/doc/html/boost_config/rationale.html (original)
+++ branches/quickbook-dev/libs/config/doc/html/boost_config/rationale.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,7 +22,7 @@
<div class="spirit-nav">
<a accesskey="p" href="guidelines_for_boost_authors.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
-<div class="section">
+<div class="section boost_config_rationale">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_config.rationale"></a><a class="link" href="rationale.html" title="Rationale">Rationale</a>
</h2></div></div></div>
@@ -39,7 +39,7 @@
principles from the <a href="http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf" target="_top">following
article</a>.
</p>
-<div class="section">
+<div class="section boost_config_rationale_the_problem">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.rationale.the_problem"></a><a class="link" href="rationale.html#boost_config.rationale.the_problem" title="The problem">The problem</a>
</h3></div></div></div>
@@ -90,7 +90,7 @@
code must be provided.
</p>
</div>
-<div class="section">
+<div class="section boost_config_rationale_the_solution">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.rationale.the_solution"></a><a class="link" href="rationale.html#boost_config.rationale.the_solution" title="The solution">The solution</a>
</h3></div></div></div>
Modified: branches/quickbook-dev/libs/config/doc/html/index.html
==============================================================================
--- branches/quickbook-dev/libs/config/doc/html/index.html (original)
+++ branches/quickbook-dev/libs/config/doc/html/index.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -29,7 +29,7 @@
<div><p class="copyright">Copyright © 2001-2007 Beman Dawes, Vesa Karvonen, John
Maddock</p></div>
<div><div class="legalnotice">
-<a name="id988561"></a><p>
+<a name="config.legal"></a><p>
Distributed under 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)
</p>
@@ -72,6 +72,8 @@
Helper Macros</a></span></dt>
<dt><span class="section"><a href="boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros">Boost
Informational Macros</a></span></dt>
+<dt><span class="section"><a href="boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros">Boost
+ Deprecated Macros</a></span></dt>
<dt><span class="section"><a href="boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code">Macros
for libraries with separate source code</a></span></dt>
</dl></dd>
@@ -95,7 +97,7 @@
<dt><span class="section">Acknowledgements</span></dt>
</dl>
</div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_config.configuring_boost_for_your_platform"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform" title="Configuring Boost for Your Platform">Configuring
Boost for Your Platform</a>
@@ -114,7 +116,7 @@
<dt><span class="section"><a href="index.html#boost_config.configuring_boost_for_your_platform.testing_the_boost_configuration">Testing
the boost configuration</a></span></dt>
</dl></div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_using_the_default_boost_configuration">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.configuring_boost_for_your_platform.using_the_default_boost_configuration"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.using_the_default_boost_configuration" title="Using the default boost configuration">Using
the default boost configuration</a>
@@ -138,7 +140,7 @@
and submitting a support request.
</p>
</div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_the__boost_config_hpp__header">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.configuring_boost_for_your_platform.the__boost_config_hpp__header"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.the__boost_config_hpp__header" title="The <boost/config.hpp> header">The
<boost/config.hpp> header</a>
@@ -169,7 +171,7 @@
developers list.
</p>
</div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_using_the_configure_script">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.configuring_boost_for_your_platform.using_the_configure_script"></a><a name="config_config_script"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.using_the_configure_script" title="Using the configure script">Using
the configure script</a>
@@ -277,7 +279,7 @@
<span class="keyword">export</span> <span class="identifier">CXXFLAGS</span><span class="special">=</span><span class="string">"-Aa -DAportable -D__HPACC_THREAD_SAFE_RB_TREE \
-DRWSTD_MULTI_THREAD -DRW_MULTI_THREAD -D_REENTRANT -D_THREAD_SAFE"</span>
<span class="keyword">export</span> <span class="identifier">LDFLAGS</span><span class="special">=</span><span class="string">"-DAportable"</span>
-<span class="keyword">export</span> <span class="identifier">LIBS</span><span class="special">=</span><span class="string">"-lpthread"</span>
+<span class="keyword">export</span> <span class="identifier">LIBS</span><span class="special">=</span><span class="string">"-lpthread"</span>
<span class="identifier">sh</span> <span class="special">./</span><span class="identifier">configure</span>
</pre>
<p>
@@ -296,7 +298,7 @@
provided by boost. This option allows only one configure-generated setup;
boost developers should avoid this option, as it incurs the danger of
accidentally committing a configure-modified <boost/config/user.hpp>
- to the cvs repository (something you will not be thanked for!).
+ to the svn repository (something you will not be thanked for!).
</li>
<li class="listitem">
<span class="bold"><strong>Option 2:</strong></span> give the header a more memorable
@@ -311,7 +313,7 @@
</li>
</ul></div>
</div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_user_settable_options">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.configuring_boost_for_your_platform.user_settable_options"></a><a name="config_user_settable"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.user_settable_options" title="User settable options">User
settable options</a>
@@ -585,7 +587,7 @@
knows which symbols to look for in a dll rather than in a static
library). Note that there may be some libraries that can only be
statically linked (Boost.Test for example) and others which may
- only be dynamically linked (Boost.Threads for example), in these
+ only be dynamically linked (Boost.Thread for example), in these
cases this macro has no effect.
</p>
</td>
@@ -607,7 +609,7 @@
knows which symbols to look for in a dll rather than in a static
library). Note that there may be some libraries that can only be
statically linked (Boost.Test for example) and others which may
- only be dynamically linked (Boost.Threads for example), in these
+ only be dynamically linked (Boost.Thread for example), in these
cases this macro is unsupported.
</p>
</td>
@@ -677,14 +679,14 @@
</tbody>
</table></div>
</div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_advanced_configuration_usage">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.configuring_boost_for_your_platform.advanced_configuration_usage"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.advanced_configuration_usage" title="Advanced configuration usage">Advanced
configuration usage</a>
</h3></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="index.html#boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_1__creating_our_own_frozen_configuration">Example
- 1, creating our own frozen configuration</a></span></dt>
+ 1: creating our own frozen configuration</a></span></dt>
<dt><span class="section"><a href="index.html#boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_2__skipping_files_that_you_don_t_need">Example
2: skipping files that you don't need</a></span></dt>
<dt><span class="section"><a href="index.html#boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_3__using_configure_script_to_freeze_the_boost_configuration">Example
@@ -721,10 +723,10 @@
<p>
The following usage examples represent just a few of the possibilities:
</p>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_advanced_configuration_usage_example_1__creating_our_own_frozen_configuration">
<div class="titlepage"><div><div><h4 class="title">
-<a name="boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_1__creating_our_own_frozen_configuration"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_1__creating_our_own_frozen_configuration" title="Example 1, creating our own frozen configuration">Example
- 1, creating our own frozen configuration</a>
+<a name="boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_1__creating_our_own_frozen_configuration"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_1__creating_our_own_frozen_configuration" title="Example 1: creating our own frozen configuration">Example
+ 1: creating our own frozen configuration</a>
</h4></div></div></div>
<p>
Lets suppose that we're building boost with Visual C++ 6, and STLport 4.0.
@@ -753,7 +755,7 @@
yet supported by boost.
</p>
</div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_advanced_configuration_usage_example_2__skipping_files_that_you_don_t_need">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_2__skipping_files_that_you_don_t_need"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_2__skipping_files_that_you_don_t_need" title="Example 2: skipping files that you don't need">Example
2: skipping files that you don't need</a>
@@ -768,11 +770,11 @@
and miss out the compiler configuration header altogether (actually you
miss out two headers, one which works out what the compiler is, and one
that configures boost for it). This has two consequences: the first is
- that less code has to be c ompiled, and the second that you have removed
+ that less code has to be compiled, and the second that you have removed
a dependency on two boost headers.
</p>
</div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_advanced_configuration_usage_example_3__using_configure_script_to_freeze_the_boost_configuration">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_3__using_configure_script_to_freeze_the_boost_configuration"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.advanced_configuration_usage.example_3__using_configure_script_to_freeze_the_boost_configuration" title="Example 3: using configure script to freeze the boost configuration">Example
3: using configure script to freeze the boost configuration</a>
@@ -785,7 +787,7 @@
</p>
</div>
</div>
-<div class="section">
+<div class="section boost_config_configuring_boost_for_your_platform_testing_the_boost_configuration">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_config.configuring_boost_for_your_platform.testing_the_boost_configuration"></a><a class="link" href="index.html#boost_config.configuring_boost_for_your_platform.testing_the_boost_configuration" title="Testing the boost configuration">Testing
the boost configuration</a>
@@ -949,7 +951,7 @@
</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: October 11, 2011 at 17:21:29 GMT</small></p></td>
+<td align="left"><p><small>Last revised: March 12, 2012 at 00:24:44 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
Modified: branches/quickbook-dev/libs/config/doc/macro_reference.qbk
==============================================================================
--- branches/quickbook-dev/libs/config/doc/macro_reference.qbk (original)
+++ branches/quickbook-dev/libs/config/doc/macro_reference.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -538,24 +538,24 @@
[table
[[Macro ][Description ]]
-[[`BOOST_NO_0X_HDR_ARRAY`][The standard library does not provide header <array>.]]
-[[`BOOST_NO_0X_HDR_CHRONO`][The standard library does not provide header <chrono>.]]
-[[`BOOST_NO_0X_HDR_CODECVT`][The standard library does not provide header <codecvt>.]]
-[[`BOOST_NO_0X_HDR_CONDITION_VARIABLE`][The standard library does not provide header <condition_variable>.]]
-[[`BOOST_NO_0X_HDR_FORWARD_LIST`][The standard library does not provide header <forward_list>.]]
-[[`BOOST_NO_0X_HDR_FUTURE`][The standard library does not provide header <future>.]]
-[[`BOOST_NO_0X_HDR_INITIALIZER_LIST`][The standard library does not provide header <initializer_list>.]]
-[[`BOOST_NO_0X_HDR_MUTEX`][The standard library does not provide header <mutex>.]]
-[[`BOOST_NO_0X_HDR_RANDOM`][The standard library does not provide header <random>.]]
-[[`BOOST_NO_0X_HDR_RATIO`][The standard library does not provide header <ratio>.]]
-[[`BOOST_NO_0X_HDR_REGEX`][The standard library does not provide header <regex>.]]
-[[`BOOST_NO_0X_HDR_SYSTEM_ERROR`][The standard library does not provide header <system_error>.]]
-[[`BOOST_NO_0X_HDR_THREAD`][The standard library does not provide header <thread>.]]
-[[`BOOST_NO_0X_HDR_TUPLE`][The standard library does not provide header <tuple>.]]
-[[`BOOST_NO_0X_HDR_TYPEINDEX`][The standard library does not provide header <typeindex>.]]
-[[`BOOST_NO_0X_HDR_TYPE_TRAITS`][The standard library does not provide header <type_traits>.]]
-[[`BOOST_NO_0X_HDR_UNORDERED_MAP`][The standard library does not provide header <unordered_map>.]]
-[[`BOOST_NO_0X_HDR_UNORDERED_SET`][The standard library does not provide header <unordered_set>.]]
+[[`BOOST_NO_CXX11_HDR_ARRAY`][The standard library does not provide header <array>.]]
+[[`BOOST_NO_CXX11_HDR_CHRONO`][The standard library does not provide header <chrono>.]]
+[[`BOOST_NO_CXX11_HDR_CODECVT`][The standard library does not provide header <codecvt>.]]
+[[`BOOST_NO_CXX11_HDR_CONDITION_VARIABLE`][The standard library does not provide header <condition_variable>.]]
+[[`BOOST_NO_CXX11_HDR_FORWARD_LIST`][The standard library does not provide header <forward_list>.]]
+[[`BOOST_NO_CXX11_HDR_FUTURE`][The standard library does not provide header <future>.]]
+[[`BOOST_NO_CXX11_HDR_INITIALIZER_LIST`][The standard library does not provide header <initializer_list>.]]
+[[`BOOST_NO_CXX11_HDR_MUTEX`][The standard library does not provide header <mutex>.]]
+[[`BOOST_NO_CXX11_HDR_RANDOM`][The standard library does not provide header <random>.]]
+[[`BOOST_NO_CXX11_HDR_RATIO`][The standard library does not provide header <ratio>.]]
+[[`BOOST_NO_CXX11_HDR_REGEX`][The standard library does not provide header <regex>.]]
+[[`BOOST_NO_CXX11_HDR_SYSTEM_ERROR`][The standard library does not provide header <system_error>.]]
+[[`BOOST_NO_CXX11_HDR_THREAD`][The standard library does not provide header <thread>.]]
+[[`BOOST_NO_CXX11_HDR_TUPLE`][The standard library does not provide header <tuple>.]]
+[[`BOOST_NO_CXX11_HDR_TYPEINDEX`][The standard library does not provide header <typeindex>.]]
+[[`BOOST_NO_CXX11_HDR_TYPE_TRAITS`][The standard library does not provide header <type_traits>.]]
+[[`BOOST_NO_CXX11_HDR_UNORDERED_MAP`][The standard library does not provide header <unordered_map>.]]
+[[`BOOST_NO_CXX11_HDR_UNORDERED_SET`][The standard library does not provide header <unordered_set>.]]
[[`BOOST_NO_AUTO_DECLARATIONS`][The compiler does not support
type deduction for variables declared with the `auto` keyword (`auto var = ...;`).
@@ -596,9 +596,6 @@
[[`BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS`][The compiler does not support
default template arguments for function templates.
]]
-[[`BOOST_NO_INITIALIZER_LISTS`][
-The C++ compiler does not support C++0x initializer lists.
-]]
[[`BOOST_NO_LAMBDAS`][The compiler does not support Lambdas.
]]
[[`BOOST_NO_LONG_LONG`][The compiler does not support `long long`.
@@ -648,7 +645,7 @@
provide compliant C++11 support.
[table
-[[Macro ][Section ][ Description ]]
+[[Macro ][ Description ]]
[[`BOOST_CONSTEXPR`][
Some compilers don't support the use of `constexpr`. This macro expands to nothing on those compilers, and `constexpr`
@@ -673,7 +670,7 @@
``
]]
[[`BOOST_STATIC_CONSTEXPR`][
-This is a shortcut for `static BOOST_CONSTEXPR_OR_CONST`For example, when defining const expr variables replace:
+This is a shortcut for `static BOOST_CONSTEXPR_OR_CONST`. For example, when defining const expr variables replace:
``
static constexpr UIntType xor_mask = a;
``
@@ -853,7 +850,7 @@
declaration or after the invocation of another macro of this same group.
]]
[[`BOOST_USE_FACET(Type, loc)`][
-When the standard library does not have a comforming `std::use_facet` there
+When the standard library does not have a conforming `std::use_facet` there
are various workarounds available, but they differ from library to library.
This macro provides a consistent way to access a locale's facets. For example,
replace:
@@ -980,6 +977,41 @@
[endsect]
+[#deprecated_macros]
+
+[section Boost Deprecated Macros]
+
+The following have been deprecated; please use the replacements instead.
+They will be removed in a future version of boost.
+
+[table
+
+[[Deprecated Macro][Replacement][When deprecated][When removed]]
+
+[[`BOOST_NO_0X_HDR_ARRAY`][`BOOST_NO_CXX11_HDR_ARRAY`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_CHRONO`][`BOOST_NO_CXX11_HDR_CHRONO`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_CODECVT`][`BOOST_NO_CXX11_HDR_CODECVT`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_CONDITION_VARIABLE`][`BOOST_NO_CXX11_HDR_CONDITION_VARIABLE`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_FORWARD_LIST`][`BOOST_NO_CXX11_HDR_FORWARD_LIST`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_FUTURE`][`BOOST_NO_CXX11_HDR_FUTURE`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_INITIALIZER_LIST`][`BOOST_NO_CXX11_HDR_INITIALIZER_LIST`][Boost 1.50][]]
+[[`BOOST_NO_INITIALIZER_LISTS`][`BOOST_NO_CXX11_HDR_INITIALIZER_LIST`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_MUTEX`][`BOOST_NO_CXX11_HDR_MUTEX`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_RANDOM`][`BOOST_NO_CXX11_HDR_RANDOM`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_RATIO`][`BOOST_NO_CXX11_HDR_RATIO`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_REGEX`][`BOOST_NO_CXX11_HDR_REGEX`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_SYSTEM_ERROR`][`BOOST_NO_CXX11_HDR_SYSTEM_ERROR`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_THREAD`][`BOOST_NO_CXX11_HDR_THREAD`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_TUPLE`][`BOOST_NO_CXX11_HDR_TUPLE`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_TYPE_TRAITS`][`BOOST_NO_CXX11_HDR_TYPE_TRAITS`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_TYPEINDEX`][`BOOST_NO_CXX11_HDR_TYPEINDEX`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_UNORDERED_SET`][`BOOST_NO_CXX11_HDR_UNORDERED_SET`][Boost 1.50][]]
+[[`BOOST_NO_0X_HDR_UNORDERED_MAP`][`BOOST_NO_CXX11_HDR_UNORDERED_MAP`][Boost 1.50][]]
+[[`BOOST_NO_STD_UNORDERED`][`BOOST_NO_CXX11_HDR_UNORDERED_SET`][Boost 1.50][]]
+]
+
+[endsect]
+
[section Macros for libraries with separate source code]
The following macros and helper headers are of use to authors whose libraries
Modified: branches/quickbook-dev/libs/config/test/all/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/config/test/all/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/config/test/all/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -175,60 +175,60 @@
test-suite "BOOST_HAS_WINTHREADS" :
[ run ../has_winthreads_pass.cpp ]
[ compile-fail ../has_winthreads_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_ARRAY" :
-[ run ../no_0x_hdr_array_pass.cpp ]
-[ compile-fail ../no_0x_hdr_array_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_CHRONO" :
-[ run ../no_0x_hdr_chrono_pass.cpp ]
-[ compile-fail ../no_0x_hdr_chrono_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_CODECVT" :
-[ run ../no_0x_hdr_codecvt_pass.cpp ]
-[ compile-fail ../no_0x_hdr_codecvt_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_CONDITION_VARIABLE" :
-[ run ../no_0x_hdr_condition_variable_pass.cpp ]
-[ compile-fail ../no_0x_hdr_condition_variable_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_FORWARD_LIST" :
-[ run ../no_0x_hdr_forward_list_pass.cpp ]
-[ compile-fail ../no_0x_hdr_forward_list_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_FUTURE" :
-[ run ../no_0x_hdr_future_pass.cpp ]
-[ compile-fail ../no_0x_hdr_future_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_INITIALIZER_LIST" :
-[ run ../no_0x_hdr_initializer_list_pass.cpp ]
-[ compile-fail ../no_0x_hdr_initializer_list_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_MUTEX" :
-[ run ../no_0x_hdr_mutex_pass.cpp ]
-[ compile-fail ../no_0x_hdr_mutex_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_RANDOM" :
-[ run ../no_0x_hdr_random_pass.cpp ]
-[ compile-fail ../no_0x_hdr_random_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_RATIO" :
-[ run ../no_0x_hdr_ratio_pass.cpp ]
-[ compile-fail ../no_0x_hdr_ratio_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_REGEX" :
-[ run ../no_0x_hdr_regex_pass.cpp ]
-[ compile-fail ../no_0x_hdr_regex_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_SYSTEM_ERROR" :
-[ run ../no_0x_hdr_system_error_pass.cpp ]
-[ compile-fail ../no_0x_hdr_system_error_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_THREAD" :
-[ run ../no_0x_hdr_thread_pass.cpp ]
-[ compile-fail ../no_0x_hdr_thread_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_TUPLE" :
-[ run ../no_0x_hdr_tuple_pass.cpp ]
-[ compile-fail ../no_0x_hdr_tuple_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_TYPEINDEX" :
-[ run ../no_0x_hdr_typeindex_pass.cpp ]
-[ compile-fail ../no_0x_hdr_typeindex_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_TYPE_TRAITS" :
-[ run ../no_0x_hdr_type_traits_pass.cpp ]
-[ compile-fail ../no_0x_hdr_type_traits_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_UNORDERED_MAP" :
-[ run ../no_0x_hdr_unordered_map_pass.cpp ]
-[ compile-fail ../no_0x_hdr_unordered_map_fail.cpp ] ;
-test-suite "BOOST_NO_0X_HDR_UNORDERED_SET" :
-[ run ../no_0x_hdr_unordered_set_pass.cpp ]
-[ compile-fail ../no_0x_hdr_unordered_set_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_ARRAY" :
+[ run ../no_cxx11_hdr_array_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_array_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_CHRONO" :
+[ run ../no_cxx11_hdr_chrono_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_chrono_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_CODECVT" :
+[ run ../no_cxx11_hdr_codecvt_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_codecvt_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_CONDITION_VARIABLE" :
+[ run ../no_cxx11_hdr_condition_variable_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_condition_variable_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_FORWARD_LIST" :
+[ run ../no_cxx11_hdr_forward_list_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_forward_list_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_FUTURE" :
+[ run ../no_cxx11_hdr_future_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_future_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_INITIALIZER_LIST" :
+[ run ../no_cxx11_hdr_initializer_list_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_initializer_list_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_MUTEX" :
+[ run ../no_cxx11_hdr_mutex_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_mutex_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_RANDOM" :
+[ run ../no_cxx11_hdr_random_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_random_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_RATIO" :
+[ run ../no_cxx11_hdr_ratio_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_ratio_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_REGEX" :
+[ run ../no_cxx11_hdr_regex_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_regex_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_SYSTEM_ERROR" :
+[ run ../no_cxx11_hdr_system_error_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_system_error_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_THREAD" :
+[ run ../no_cxx11_hdr_thread_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_thread_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_TUPLE" :
+[ run ../no_cxx11_hdr_tuple_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_tuple_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_TYPEINDEX" :
+[ run ../no_cxx11_hdr_typeindex_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_typeindex_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_TYPE_TRAITS" :
+[ run ../no_cxx11_hdr_type_traits_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_type_traits_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_UNORDERED_MAP" :
+[ run ../no_cxx11_hdr_unordered_map_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_unordered_map_fail.cpp ] ;
+test-suite "BOOST_NO_CXX11_HDR_UNORDERED_SET" :
+[ run ../no_cxx11_hdr_unordered_set_pass.cpp ]
+[ compile-fail ../no_cxx11_hdr_unordered_set_fail.cpp ] ;
test-suite "BOOST_NO_ADL_BARRIER" :
[ run ../no_adl_barrier_pass.cpp ]
[ compile-fail ../no_adl_barrier_fail.cpp ] ;
@@ -328,9 +328,6 @@
test-suite "BOOST_NO_MS_INT64_NUMERIC_LIMITS" :
[ run ../no_i64_limits_pass.cpp ]
[ compile-fail ../no_i64_limits_fail.cpp ] ;
-test-suite "BOOST_NO_INITIALIZER_LISTS" :
-[ run ../no_initializer_lists_pass.cpp ]
-[ compile-fail ../no_initializer_lists_fail.cpp ] ;
test-suite "BOOST_NO_INCLASS_MEMBER_INITIALIZATION" :
[ run ../no_inline_memb_init_pass.cpp ]
[ compile-fail ../no_inline_memb_init_fail.cpp ] ;
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_array.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_array.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,23 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_ARRAY
-// TITLE: C++0x header <array> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <array>
-
-#include <array>
-
-namespace boost_no_0x_hdr_array {
-
-int test()
-{
- std::array<int, 3> a = { 1, 2, 3 };
- return a.size() == 3 ? 0 : 1;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_chrono.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_chrono.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,31 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_CHRONO
-// TITLE: C++0x header <chrono> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <chrono>
-
-#include <chrono>
-
-namespace boost_no_0x_hdr_chrono {
-
-int test()
-{
- using std::chrono::nanoseconds;
- using std::chrono::microseconds;
- using std::chrono::milliseconds;
- using std::chrono::seconds;
- using std::chrono::minutes;
- using std::chrono::hours;
- using std::chrono::system_clock;
- using std::chrono::monotonic_clock;
- using std::chrono::high_resolution_clock;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_codecvt.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_codecvt.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,25 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_CODECVT
-// TITLE: C++0x header <codecvt> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <codecvt>
-
-#include <codecvt>
-
-namespace boost_no_0x_hdr_codecvt {
-
-int test()
-{
- using std::codecvt_utf8;
- using std::codecvt_utf16;
- using std::codecvt_utf8_utf16;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_condition_variable.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_condition_variable.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,24 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_CONDITION_VARIABLE
-// TITLE: C++0x header <condition_variable> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <condition_variable>
-
-#include <condition_variable>
-
-namespace boost_no_0x_hdr_condition_variable {
-
-int test()
-{
- using std::condition_variable;
- using std::condition_variable_any;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_forward_list.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_forward_list.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,23 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_FORWARD_LIST
-// TITLE: C++0x header <forward_list> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <forward_list>
-
-#include <forward_list>
-
-namespace boost_no_0x_hdr_forward_list {
-
-int test()
-{
- std::forward_list<int> l(2u, 2);
- return *l.begin() == 2 ? 0 : 1;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_future.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_future.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,35 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_FUTURE
-// TITLE: C++0x header <future> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <future>
-
-#include <future>
-
-namespace boost_no_0x_hdr_future {
-
-int test()
-{
- using std::is_error_code_enum;
- using std::make_error_code;
- using std::make_error_condition;
- using std::future_category;
- using std::future_error;
- using std::promise;
- using std::promise;
- using std::promise;
- using std::future;
- using std::shared_future;
- using std::atomic_future;
- using std::packaged_task; // undefined
- using std::async;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_initializer_list.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_initializer_list.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_INITIALIZER_LIST
-// TITLE: C++0x header <initializer_list> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <initializer_list>
-
-#include <initializer_list>
-
-namespace boost_no_0x_hdr_initializer_list {
-
-void foo(const std::initializer_list<const char*>& l)
-{
-}
-
-int test()
-{
- foo( { "a", "b", "c" } );
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_mutex.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_mutex.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,26 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_MUTEX
-// TITLE: C++0x header <mutex> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <mutex>
-
-#include <mutex>
-
-namespace boost_no_0x_hdr_mutex {
-
-int test()
-{
- using std::mutex;
- using std::recursive_mutex;
- using std::timed_mutex;
- using std::recursive_timed_mutex;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_random.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_random.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,31 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_RANDOM
-// TITLE: C++0x header <random> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <random>
-
-#include <random>
-
-namespace boost_no_0x_hdr_random {
-
-int test()
-{
- using std::minstd_rand0;
- using std::mt19937;
- using std::mt19937_64;
- using std::ranlux24_base;
- using std::ranlux48_base;
- using std::ranlux24;
- using std::ranlux48;
- using std::knuth_b;
- using std::default_random_engine;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_ratio.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_ratio.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_RATIO
-// TITLE: C++0x header <ratio> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <ratio>
-
-#include <ratio>
-
-namespace boost_no_0x_hdr_ratio {
-
-int test()
-{
- using std::atto;
- using std::femto;
- using std::pico;
- using std::nano;
- using std::micro;
- using std::milli;
- using std::centi;
- using std::deci;
- using std::deca;
- using std::hecto;
- using std::kilo;
- using std::mega;
- using std::tera;
- using std::peta;
- using std::exa;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_regex.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_regex.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,24 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_REGEX
-// TITLE: C++0x header <regex> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <regex>
-
-#include <regex>
-
-namespace boost_no_0x_hdr_regex {
-
-int test()
-{
- using std::regex;
- using std::wregex;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_system_error.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_system_error.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,26 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_SYSTEM_ERROR
-// TITLE: C++0x header <system_error> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <system_error>
-
-#include <system_error>
-
-namespace boost_no_0x_hdr_system_error {
-
-int test()
-{
- using std::error_category;
- using std::error_code;
- using std::error_condition;
- using std::system_error;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_thread.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_thread.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,27 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_THREAD
-// TITLE: C++0x header <thread> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <thread>
-
-#include <thread>
-
-namespace boost_no_0x_hdr_thread {
-
-int test()
-{
- using std::thread;
- using std::this_thread::get_id;
- using std::this_thread::yield;
- using std::this_thread::sleep_until;
- using std::this_thread::sleep_for;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_tuple.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_tuple.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,23 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_TUPLE
-// TITLE: C++0x header <tuple> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <tuple>
-
-#include <tuple>
-
-namespace boost_no_0x_hdr_tuple {
-
-int test()
-{
- std::tuple<int, int, long> t(0, 1, 2);
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_type_traits.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_type_traits.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,106 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_TYPE_TRAITS
-// TITLE: C++0x header <type_traits> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <type_traits>
-
-#include <type_traits>
-
-namespace boost_no_0x_hdr_type_traits {
-
-int test()
-{
- using std::integral_constant;
- using std::true_type;
- using std::false_type;
- using std::is_void;
- using std::is_integral;
- using std::is_floating_point;
- using std::is_array;
- using std::is_pointer;
- using std::is_lvalue_reference;
- using std::is_rvalue_reference;
- using std::is_member_object_pointer;
- using std::is_member_function_pointer;
- using std::is_enum;
- using std::is_union;
- using std::is_class;
- using std::is_function;
- using std::is_reference;
- using std::is_arithmetic;
- using std::is_fundamental;
- using std::is_object;
- using std::is_scalar;
- using std::is_compound;
- using std::is_member_pointer;
- using std::is_const;
- using std::is_volatile;
- using std::is_trivial;
- using std::is_trivially_copyable;
- using std::is_standard_layout;
- using std::is_pod;
- using std::is_literal_type;
- using std::is_empty;
- using std::is_polymorphic;
- using std::is_abstract;
- using std::is_constructible;
- using std::is_nothrow_constructible;
- using std::has_default_constructor;
- using std::has_copy_constructor;
- using std::has_copy_assign;
- using std::has_move_constructor;
- using std::has_move_assign;
- using std::has_trivial_default_constructor;
- using std::has_trivial_copy_constructor;
- using std::has_trivial_move_constructor;
- using std::has_trivial_copy_assign;
- using std::has_trivial_move_assign;
- using std::has_trivial_destructor;
- using std::has_nothrow_default_constructor;
- using std::has_nothrow_copy_constructor;
- using std::has_nothrow_move_constructor;
- using std::has_nothrow_copy_assign;
- using std::has_nothrow_move_assign;
- using std::has_virtual_destructor;
- using std::is_signed;
- using std::is_unsigned;
- using std::alignment_of;
- using std::rank;
- using std::extent;
- using std::is_same;
- using std::is_base_of;
- using std::is_convertible;
- using std::is_explicitly_convertible;
- using std::remove_const;
- using std::remove_volatile;
- using std::remove_cv;
- using std::add_const;
- using std::add_volatile;
- using std::add_cv;
- using std::remove_reference;
- using std::add_lvalue_reference;
- using std::add_rvalue_reference;
- using std::make_signed;
- using std::make_unsigned;
- using std::remove_extent;
- using std::remove_all_extents;
- using std::remove_pointer;
- using std::add_pointer;
- using std::aligned_storage;
- using std::aligned_union;
- using std::decay;
- using std::enable_if;
- using std::conditional;
- using std::common_type;
- using std::underlying_type;
- using std::result_of;
- return 0;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_typeindex.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_typeindex.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,25 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_TYPEINDEX
-// TITLE: C++0x header <typeindex> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <typeindex>
-
-#include <typeindex>
-
-namespace boost_no_0x_hdr_typeindex {
-
-int test()
-{
- std::type_index t1 = typeid(int);
- std::type_index t2 = typeid(double);
- std::hash<std::type_index> h;
- return (t1 != t2) && (h(t1) != h(t2)) ? 0 : 1;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_unordered_map.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_unordered_map.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,24 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_UNORDERED_MAP
-// TITLE: C++0x header <unordered_map> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <unordered_map>
-
-#include <unordered_map>
-
-namespace boost_no_0x_hdr_unordered_map {
-
-int test()
-{
- std::unordered_map<int, long> s1;
- std::unordered_multimap<int, long> s2;
- return s1.empty() && s2.empty() ? 0 : 1;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_unordered_set.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_0x_hdr_unordered_set.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,24 +0,0 @@
-// (C) Copyright Beman Dawes 2009
-
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for more information.
-
-// MACRO: BOOST_NO_0X_HDR_UNORDERED_SET
-// TITLE: C++0x header <unordered_set> unavailable
-// DESCRIPTION: The standard library does not supply C++0x header <unordered_set>
-
-#include <unordered_set>
-
-namespace boost_no_0x_hdr_unordered_set {
-
-int test()
-{
- std::unordered_set<int> s1;
- std::unordered_multiset<int> s2;
- return s1.empty() && s2.empty() ? 0 : 1;
-}
-
-}
Deleted: branches/quickbook-dev/libs/config/test/boost_no_initializer_lists.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_initializer_lists.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,34 +0,0 @@
-// (C) Copyright Daniel James 2008.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for most recent version.
-
-
-// MACRO: BOOST_NO_INITIALIZER_LISTS
-// TITLE: Initializer Lists
-// DESCRIPTION: If the compiler does not support C++0x initializer lists
-
-#include <initializer_list>
-#include <vector>
-#include <string>
-
-namespace boost_no_initializer_lists {
-
-void quiet_warning(const std::initializer_list<int>&){}
-
-void f(std::initializer_list<int>)
-{
-}
-
-int test()
-{
- std::vector<std::string> v{"once", "upon", "a", "time"}; // See C++ std 8.5.4
- f( { 1, 2, 3, 4 } );
- std::initializer_list<int> x = { 1, 2 };
- quiet_warning(x);
- return 0;
-}
-
-}
Modified: branches/quickbook-dev/libs/config/test/boost_no_unified_init.ipp
==============================================================================
--- branches/quickbook-dev/libs/config/test/boost_no_unified_init.ipp (original)
+++ branches/quickbook-dev/libs/config/test/boost_no_unified_init.ipp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -9,6 +9,8 @@
// TITLE: C++0x unified initialization syntax unavailable
// DESCRIPTION: The compiler does not support C++0x unified initialization syntax: see http://en.wikipedia.org/wiki/C%2B%2B0x#Uniform_initialization
+#include <string>
+
namespace boost_no_unified_initialization_syntax {
struct BasicStruct
Modified: branches/quickbook-dev/libs/config/test/config_info.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/config_info.cpp (original)
+++ branches/quickbook-dev/libs/config/test/config_info.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -979,24 +979,24 @@
PRINT_MACRO(BOOST_HAS_WINTHREADS);
PRINT_MACRO(BOOST_MSVC6_MEMBER_TEMPLATES);
PRINT_MACRO(BOOST_MSVC_STD_ITERATOR);
- PRINT_MACRO(BOOST_NO_0X_HDR_ARRAY);
- PRINT_MACRO(BOOST_NO_0X_HDR_CHRONO);
- PRINT_MACRO(BOOST_NO_0X_HDR_CODECVT);
- PRINT_MACRO(BOOST_NO_0X_HDR_CONDITION_VARIABLE);
- PRINT_MACRO(BOOST_NO_0X_HDR_FORWARD_LIST);
- PRINT_MACRO(BOOST_NO_0X_HDR_FUTURE);
- PRINT_MACRO(BOOST_NO_0X_HDR_INITIALIZER_LIST);
- PRINT_MACRO(BOOST_NO_0X_HDR_MUTEX);
- PRINT_MACRO(BOOST_NO_0X_HDR_RANDOM);
- PRINT_MACRO(BOOST_NO_0X_HDR_RATIO);
- PRINT_MACRO(BOOST_NO_0X_HDR_REGEX);
- PRINT_MACRO(BOOST_NO_0X_HDR_SYSTEM_ERROR);
- PRINT_MACRO(BOOST_NO_0X_HDR_THREAD);
- PRINT_MACRO(BOOST_NO_0X_HDR_TUPLE);
- PRINT_MACRO(BOOST_NO_0X_HDR_TYPEINDEX);
- PRINT_MACRO(BOOST_NO_0X_HDR_TYPE_TRAITS);
- PRINT_MACRO(BOOST_NO_0X_HDR_UNORDERED_MAP);
- PRINT_MACRO(BOOST_NO_0X_HDR_UNORDERED_SET);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_ARRAY);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_CHRONO);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_CODECVT);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_FORWARD_LIST);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_FUTURE);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_INITIALIZER_LIST);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_MUTEX);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_RANDOM);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_RATIO);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_REGEX);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_SYSTEM_ERROR);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_THREAD);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_TUPLE);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_TYPEINDEX);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_TYPE_TRAITS);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_UNORDERED_MAP);
+ PRINT_MACRO(BOOST_NO_CXX11_HDR_UNORDERED_SET);
PRINT_MACRO(BOOST_NO_ADL_BARRIER);
PRINT_MACRO(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP);
PRINT_MACRO(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS);
@@ -1028,7 +1028,6 @@
PRINT_MACRO(BOOST_NO_FUNCTION_TEMPLATE_ORDERING);
PRINT_MACRO(BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS);
PRINT_MACRO(BOOST_NO_INCLASS_MEMBER_INITIALIZATION);
- PRINT_MACRO(BOOST_NO_INITIALIZER_LISTS);
PRINT_MACRO(BOOST_NO_INTEGRAL_INT64_T);
PRINT_MACRO(BOOST_NO_INTRINSIC_WCHAR_T);
PRINT_MACRO(BOOST_NO_IOSFWD);
Modified: branches/quickbook-dev/libs/config/test/config_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/config_test.cpp (original)
+++ branches/quickbook-dev/libs/config/test/config_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,95 +22,95 @@
int error_count = 0;
-#ifndef BOOST_NO_0X_HDR_ARRAY
-#include "boost_no_0x_hdr_array.ipp"
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+#include "boost_no_cxx11_hdr_array.ipp"
#else
-namespace boost_no_0x_hdr_array = empty_boost;
+namespace boost_no_cxx11_hdr_array = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_CHRONO
-#include "boost_no_0x_hdr_chrono.ipp"
+#ifndef BOOST_NO_CXX11_HDR_CHRONO
+#include "boost_no_cxx11_hdr_chrono.ipp"
#else
-namespace boost_no_0x_hdr_chrono = empty_boost;
+namespace boost_no_cxx11_hdr_chrono = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_CODECVT
-#include "boost_no_0x_hdr_codecvt.ipp"
+#ifndef BOOST_NO_CXX11_HDR_CODECVT
+#include "boost_no_cxx11_hdr_codecvt.ipp"
#else
-namespace boost_no_0x_hdr_codecvt = empty_boost;
+namespace boost_no_cxx11_hdr_codecvt = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_CONDITION_VARIABLE
-#include "boost_no_0x_hdr_condition_variable.ipp"
+#ifndef BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#include "boost_no_cxx11_hdr_condition_variable.ipp"
#else
-namespace boost_no_0x_hdr_condition_variable = empty_boost;
+namespace boost_no_cxx11_hdr_condition_variable = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_FORWARD_LIST
-#include "boost_no_0x_hdr_forward_list.ipp"
+#ifndef BOOST_NO_CXX11_HDR_FORWARD_LIST
+#include "boost_no_cxx11_hdr_forward_list.ipp"
#else
-namespace boost_no_0x_hdr_forward_list = empty_boost;
+namespace boost_no_cxx11_hdr_forward_list = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_FUTURE
-#include "boost_no_0x_hdr_future.ipp"
+#ifndef BOOST_NO_CXX11_HDR_FUTURE
+#include "boost_no_cxx11_hdr_future.ipp"
#else
-namespace boost_no_0x_hdr_future = empty_boost;
+namespace boost_no_cxx11_hdr_future = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
-#include "boost_no_0x_hdr_initializer_list.ipp"
+#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#include "boost_no_cxx11_hdr_initializer_list.ipp"
#else
-namespace boost_no_0x_hdr_initializer_list = empty_boost;
+namespace boost_no_cxx11_hdr_initializer_list = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_MUTEX
-#include "boost_no_0x_hdr_mutex.ipp"
+#ifndef BOOST_NO_CXX11_HDR_MUTEX
+#include "boost_no_cxx11_hdr_mutex.ipp"
#else
-namespace boost_no_0x_hdr_mutex = empty_boost;
+namespace boost_no_cxx11_hdr_mutex = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_RANDOM
-#include "boost_no_0x_hdr_random.ipp"
+#ifndef BOOST_NO_CXX11_HDR_RANDOM
+#include "boost_no_cxx11_hdr_random.ipp"
#else
-namespace boost_no_0x_hdr_random = empty_boost;
+namespace boost_no_cxx11_hdr_random = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_RATIO
-#include "boost_no_0x_hdr_ratio.ipp"
+#ifndef BOOST_NO_CXX11_HDR_RATIO
+#include "boost_no_cxx11_hdr_ratio.ipp"
#else
-namespace boost_no_0x_hdr_ratio = empty_boost;
+namespace boost_no_cxx11_hdr_ratio = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_REGEX
-#include "boost_no_0x_hdr_regex.ipp"
+#ifndef BOOST_NO_CXX11_HDR_REGEX
+#include "boost_no_cxx11_hdr_regex.ipp"
#else
-namespace boost_no_0x_hdr_regex = empty_boost;
+namespace boost_no_cxx11_hdr_regex = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_SYSTEM_ERROR
-#include "boost_no_0x_hdr_system_error.ipp"
+#ifndef BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#include "boost_no_cxx11_hdr_system_error.ipp"
#else
-namespace boost_no_0x_hdr_system_error = empty_boost;
+namespace boost_no_cxx11_hdr_system_error = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_THREAD
-#include "boost_no_0x_hdr_thread.ipp"
+#ifndef BOOST_NO_CXX11_HDR_THREAD
+#include "boost_no_cxx11_hdr_thread.ipp"
#else
-namespace boost_no_0x_hdr_thread = empty_boost;
+namespace boost_no_cxx11_hdr_thread = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_TUPLE
-#include "boost_no_0x_hdr_tuple.ipp"
+#ifndef BOOST_NO_CXX11_HDR_TUPLE
+#include "boost_no_cxx11_hdr_tuple.ipp"
#else
-namespace boost_no_0x_hdr_tuple = empty_boost;
+namespace boost_no_cxx11_hdr_tuple = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_TYPEINDEX
-#include "boost_no_0x_hdr_typeindex.ipp"
+#ifndef BOOST_NO_CXX11_HDR_TYPEINDEX
+#include "boost_no_cxx11_hdr_typeindex.ipp"
#else
-namespace boost_no_0x_hdr_typeindex = empty_boost;
+namespace boost_no_cxx11_hdr_typeindex = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_TYPE_TRAITS
-#include "boost_no_0x_hdr_type_traits.ipp"
+#ifndef BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#include "boost_no_cxx11_hdr_type_traits.ipp"
#else
-namespace boost_no_0x_hdr_type_traits = empty_boost;
+namespace boost_no_cxx11_hdr_type_traits = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_UNORDERED_MAP
-#include "boost_no_0x_hdr_unordered_map.ipp"
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#include "boost_no_cxx11_hdr_unordered_map.ipp"
#else
-namespace boost_no_0x_hdr_unordered_map = empty_boost;
+namespace boost_no_cxx11_hdr_unordered_map = empty_boost;
#endif
-#ifndef BOOST_NO_0X_HDR_UNORDERED_SET
-#include "boost_no_0x_hdr_unordered_set.ipp"
+#ifndef BOOST_NO_CXX11_HDR_UNORDERED_SET
+#include "boost_no_cxx11_hdr_unordered_set.ipp"
#else
-namespace boost_no_0x_hdr_unordered_set = empty_boost;
+namespace boost_no_cxx11_hdr_unordered_set = empty_boost;
#endif
#ifndef BOOST_NO_ADL_BARRIER
#include "boost_no_adl_barrier.ipp"
@@ -277,11 +277,6 @@
#else
namespace boost_no_ms_int64_numeric_limits = empty_boost;
#endif
-#ifndef BOOST_NO_INITIALIZER_LISTS
-#include "boost_no_initializer_lists.ipp"
-#else
-namespace boost_no_initializer_lists = empty_boost;
-#endif
#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
#include "boost_no_inline_memb_init.ipp"
#else
@@ -1116,94 +1111,94 @@
std::cerr << "Failed test for BOOST_HAS_WINTHREADS at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_array::test())
+ if(0 != boost_no_cxx11_hdr_array::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_ARRAY at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_ARRAY at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_chrono::test())
+ if(0 != boost_no_cxx11_hdr_chrono::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_CHRONO at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_CHRONO at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_codecvt::test())
+ if(0 != boost_no_cxx11_hdr_codecvt::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_CODECVT at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_CODECVT at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_condition_variable::test())
+ if(0 != boost_no_cxx11_hdr_condition_variable::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_CONDITION_VARIABLE at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_CONDITION_VARIABLE at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_forward_list::test())
+ if(0 != boost_no_cxx11_hdr_forward_list::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_FORWARD_LIST at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_FORWARD_LIST at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_future::test())
+ if(0 != boost_no_cxx11_hdr_future::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_FUTURE at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_FUTURE at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_initializer_list::test())
+ if(0 != boost_no_cxx11_hdr_initializer_list::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_INITIALIZER_LIST at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_INITIALIZER_LIST at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_mutex::test())
+ if(0 != boost_no_cxx11_hdr_mutex::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_MUTEX at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_MUTEX at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_random::test())
+ if(0 != boost_no_cxx11_hdr_random::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_RANDOM at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_RANDOM at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_ratio::test())
+ if(0 != boost_no_cxx11_hdr_ratio::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_RATIO at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_RATIO at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_regex::test())
+ if(0 != boost_no_cxx11_hdr_regex::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_REGEX at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_REGEX at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_system_error::test())
+ if(0 != boost_no_cxx11_hdr_system_error::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_SYSTEM_ERROR at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_SYSTEM_ERROR at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_thread::test())
+ if(0 != boost_no_cxx11_hdr_thread::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_THREAD at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_THREAD at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_tuple::test())
+ if(0 != boost_no_cxx11_hdr_tuple::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_TUPLE at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_TUPLE at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_typeindex::test())
+ if(0 != boost_no_cxx11_hdr_typeindex::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_TYPEINDEX at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_TYPEINDEX at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_type_traits::test())
+ if(0 != boost_no_cxx11_hdr_type_traits::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_TYPE_TRAITS at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_TYPE_TRAITS at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_unordered_map::test())
+ if(0 != boost_no_cxx11_hdr_unordered_map::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_UNORDERED_MAP at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_UNORDERED_MAP at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_0x_hdr_unordered_set::test())
+ if(0 != boost_no_cxx11_hdr_unordered_set::test())
{
- std::cerr << "Failed test for BOOST_NO_0X_HDR_UNORDERED_SET at: " << __FILE__ << ":" << __LINE__ << std::endl;
+ std::cerr << "Failed test for BOOST_NO_CXX11_HDR_UNORDERED_SET at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
if(0 != boost_no_adl_barrier::test())
@@ -1371,11 +1366,6 @@
std::cerr << "Failed test for BOOST_NO_MS_INT64_NUMERIC_LIMITS at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count;
}
- if(0 != boost_no_initializer_lists::test())
- {
- std::cerr << "Failed test for BOOST_NO_INITIALIZER_LISTS at: " << __FILE__ << ":" << __LINE__ << std::endl;
- ++error_count;
- }
if(0 != boost_no_inclass_member_initialization::test())
{
std::cerr << "Failed test for BOOST_NO_INCLASS_MEMBER_INITIALIZATION at: " << __FILE__ << ":" << __LINE__ << std::endl;
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_array_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_array_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 12:10:32 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_ARRAY
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_ARRAY should not be defined.
-// See file boost_no_0x_hdr_array.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_ARRAY
-#include "boost_no_0x_hdr_array.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_array::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_array_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_array_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 12:10:32 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_ARRAY
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_ARRAY should be defined.
-// See file boost_no_0x_hdr_array.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_ARRAY
-#include "boost_no_0x_hdr_array.ipp"
-#else
-namespace boost_no_0x_hdr_array = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_array::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_chrono_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_chrono_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_CHRONO
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_CHRONO should not be defined.
-// See file boost_no_0x_hdr_chrono.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_CHRONO
-#include "boost_no_0x_hdr_chrono.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_chrono::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_chrono_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_chrono_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_CHRONO
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_CHRONO should be defined.
-// See file boost_no_0x_hdr_chrono.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_CHRONO
-#include "boost_no_0x_hdr_chrono.ipp"
-#else
-namespace boost_no_0x_hdr_chrono = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_chrono::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_codecvt_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_codecvt_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_CODECVT
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_CODECVT should not be defined.
-// See file boost_no_0x_hdr_codecvt.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_CODECVT
-#include "boost_no_0x_hdr_codecvt.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_codecvt::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_codecvt_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_codecvt_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_CODECVT
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_CODECVT should be defined.
-// See file boost_no_0x_hdr_codecvt.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_CODECVT
-#include "boost_no_0x_hdr_codecvt.ipp"
-#else
-namespace boost_no_0x_hdr_codecvt = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_codecvt::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_condition_variable_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_condition_variable_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_CONDITION_VARIABLE
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_CONDITION_VARIABLE should not be defined.
-// See file boost_no_0x_hdr_condition_variable.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_CONDITION_VARIABLE
-#include "boost_no_0x_hdr_condition_variable.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_condition_variable::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_condition_variable_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_condition_variable_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_CONDITION_VARIABLE
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_CONDITION_VARIABLE should be defined.
-// See file boost_no_0x_hdr_condition_variable.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_CONDITION_VARIABLE
-#include "boost_no_0x_hdr_condition_variable.ipp"
-#else
-namespace boost_no_0x_hdr_condition_variable = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_condition_variable::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_forward_list_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_forward_list_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_FORWARD_LIST
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_FORWARD_LIST should not be defined.
-// See file boost_no_0x_hdr_forward_list.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_FORWARD_LIST
-#include "boost_no_0x_hdr_forward_list.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_forward_list::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_forward_list_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_forward_list_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_FORWARD_LIST
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_FORWARD_LIST should be defined.
-// See file boost_no_0x_hdr_forward_list.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_FORWARD_LIST
-#include "boost_no_0x_hdr_forward_list.ipp"
-#else
-namespace boost_no_0x_hdr_forward_list = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_forward_list::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_future_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_future_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_FUTURE
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_FUTURE should not be defined.
-// See file boost_no_0x_hdr_future.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_FUTURE
-#include "boost_no_0x_hdr_future.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_future::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_future_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_future_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_FUTURE
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_FUTURE should be defined.
-// See file boost_no_0x_hdr_future.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_FUTURE
-#include "boost_no_0x_hdr_future.ipp"
-#else
-namespace boost_no_0x_hdr_future = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_future::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_initializer_list_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_initializer_list_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_INITIALIZER_LIST
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_INITIALIZER_LIST should not be defined.
-// See file boost_no_0x_hdr_initializer_list.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_INITIALIZER_LIST
-#include "boost_no_0x_hdr_initializer_list.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_initializer_list::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_initializer_list_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_initializer_list_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_INITIALIZER_LIST
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_INITIALIZER_LIST should be defined.
-// See file boost_no_0x_hdr_initializer_list.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
-#include "boost_no_0x_hdr_initializer_list.ipp"
-#else
-namespace boost_no_0x_hdr_initializer_list = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_initializer_list::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_mutex_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_mutex_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_MUTEX
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_MUTEX should not be defined.
-// See file boost_no_0x_hdr_mutex.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_MUTEX
-#include "boost_no_0x_hdr_mutex.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_mutex::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_mutex_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_mutex_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_MUTEX
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_MUTEX should be defined.
-// See file boost_no_0x_hdr_mutex.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_MUTEX
-#include "boost_no_0x_hdr_mutex.ipp"
-#else
-namespace boost_no_0x_hdr_mutex = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_mutex::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_random_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_random_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_RANDOM
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_RANDOM should not be defined.
-// See file boost_no_0x_hdr_random.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_RANDOM
-#include "boost_no_0x_hdr_random.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_random::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_random_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_random_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_RANDOM
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_RANDOM should be defined.
-// See file boost_no_0x_hdr_random.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_RANDOM
-#include "boost_no_0x_hdr_random.ipp"
-#else
-namespace boost_no_0x_hdr_random = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_random::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_ratio_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_ratio_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_RATIO
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_RATIO should not be defined.
-// See file boost_no_0x_hdr_ratio.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_RATIO
-#include "boost_no_0x_hdr_ratio.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_ratio::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_ratio_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_ratio_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_RATIO
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_RATIO should be defined.
-// See file boost_no_0x_hdr_ratio.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_RATIO
-#include "boost_no_0x_hdr_ratio.ipp"
-#else
-namespace boost_no_0x_hdr_ratio = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_ratio::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_regex_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_regex_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_REGEX
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_REGEX should not be defined.
-// See file boost_no_0x_hdr_regex.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_REGEX
-#include "boost_no_0x_hdr_regex.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_regex::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_regex_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_regex_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_REGEX
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_REGEX should be defined.
-// See file boost_no_0x_hdr_regex.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_REGEX
-#include "boost_no_0x_hdr_regex.ipp"
-#else
-namespace boost_no_0x_hdr_regex = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_regex::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_system_error_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_system_error_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_SYSTEM_ERROR
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_SYSTEM_ERROR should not be defined.
-// See file boost_no_0x_hdr_system_error.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_SYSTEM_ERROR
-#include "boost_no_0x_hdr_system_error.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_system_error::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_system_error_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_system_error_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_SYSTEM_ERROR
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_SYSTEM_ERROR should be defined.
-// See file boost_no_0x_hdr_system_error.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_SYSTEM_ERROR
-#include "boost_no_0x_hdr_system_error.ipp"
-#else
-namespace boost_no_0x_hdr_system_error = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_system_error::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_thread_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_thread_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 12:45:15 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_THREAD
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_THREAD should not be defined.
-// See file boost_no_0x_hdr_thread.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_THREAD
-#include "boost_no_0x_hdr_thread.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_thread::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_thread_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_thread_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 12:45:15 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_THREAD
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_THREAD should be defined.
-// See file boost_no_0x_hdr_thread.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_THREAD
-#include "boost_no_0x_hdr_thread.ipp"
-#else
-namespace boost_no_0x_hdr_thread = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_thread::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_tuple_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_tuple_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_TUPLE
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_TUPLE should not be defined.
-// See file boost_no_0x_hdr_tuple.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_TUPLE
-#include "boost_no_0x_hdr_tuple.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_tuple::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_tuple_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_tuple_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_TUPLE
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_TUPLE should be defined.
-// See file boost_no_0x_hdr_tuple.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_TUPLE
-#include "boost_no_0x_hdr_tuple.ipp"
-#else
-namespace boost_no_0x_hdr_tuple = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_tuple::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_type_traits_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_type_traits_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_TYPE_TRAITS
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_TYPE_TRAITS should not be defined.
-// See file boost_no_0x_hdr_type_traits.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_TYPE_TRAITS
-#include "boost_no_0x_hdr_type_traits.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_type_traits::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_type_traits_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_type_traits_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_TYPE_TRAITS
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_TYPE_TRAITS should be defined.
-// See file boost_no_0x_hdr_type_traits.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_TYPE_TRAITS
-#include "boost_no_0x_hdr_type_traits.ipp"
-#else
-namespace boost_no_0x_hdr_type_traits = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_type_traits::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_typeindex_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_typeindex_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri Jun 04 12:51:34 2010
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id: generate.cpp 49281 2008-10-11 15:40:44Z johnmaddock $
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_TYPEINDEX
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_TYPEINDEX should not be defined.
-// See file boost_no_0x_hdr_typeindex.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_TYPEINDEX
-#include "boost_no_0x_hdr_typeindex.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_typeindex::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_typeindex_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_typeindex_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri Jun 04 12:51:34 2010
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id: generate.cpp 49281 2008-10-11 15:40:44Z johnmaddock $
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_TYPEINDEX
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_TYPEINDEX should be defined.
-// See file boost_no_0x_hdr_typeindex.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_TYPEINDEX
-#include "boost_no_0x_hdr_typeindex.ipp"
-#else
-namespace boost_no_0x_hdr_typeindex = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_typeindex::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_map_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_map_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_UNORDERED_MAP
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_UNORDERED_MAP should not be defined.
-// See file boost_no_0x_hdr_unordered_map.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_UNORDERED_MAP
-#include "boost_no_0x_hdr_unordered_map.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_unordered_map::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_map_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_map_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_UNORDERED_MAP
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_UNORDERED_MAP should be defined.
-// See file boost_no_0x_hdr_unordered_map.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_UNORDERED_MAP
-#include "boost_no_0x_hdr_unordered_map.ipp"
-#else
-namespace boost_no_0x_hdr_unordered_map = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_unordered_map::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_set_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_set_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_UNORDERED_SET
-// This file should not compile, if it does then
-// BOOST_NO_0X_HDR_UNORDERED_SET should not be defined.
-// See file boost_no_0x_hdr_unordered_set.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_0X_HDR_UNORDERED_SET
-#include "boost_no_0x_hdr_unordered_set.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_unordered_set::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_set_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_0x_hdr_unordered_set_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Fri May 15 11:57:42 2009
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_0X_HDR_UNORDERED_SET
-// This file should compile, if it does not then
-// BOOST_NO_0X_HDR_UNORDERED_SET should be defined.
-// See file boost_no_0x_hdr_unordered_set.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_0X_HDR_UNORDERED_SET
-#include "boost_no_0x_hdr_unordered_set.ipp"
-#else
-namespace boost_no_0x_hdr_unordered_set = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_0x_hdr_unordered_set::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_initializer_lists_fail.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_initializer_lists_fail.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Wed Sep 24 11:44:21 2008
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_INITIALIZER_LISTS
-// This file should not compile, if it does then
-// BOOST_NO_INITIALIZER_LISTS should not be defined.
-// See file boost_no_initializer_lists.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifdef BOOST_NO_INITIALIZER_LISTS
-#include "boost_no_initializer_lists.ipp"
-#else
-#error "this file should not compile"
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_initializer_lists::test();
-}
-
Deleted: branches/quickbook-dev/libs/config/test/no_initializer_lists_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/config/test/no_initializer_lists_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,37 +0,0 @@
-// This file was automatically generated on Wed Sep 24 11:44:21 2008
-// by libs/config/tools/generate.cpp
-// Copyright John Maddock 2002-4.
-// Use, modification and distribution are 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)
-
-// See http://www.boost.org/libs/config for the most recent version.//
-// Revision $Id$
-//
-
-
-// Test file for macro BOOST_NO_INITIALIZER_LISTS
-// This file should compile, if it does not then
-// BOOST_NO_INITIALIZER_LISTS should be defined.
-// See file boost_no_initializer_lists.ipp for details
-
-// Must not have BOOST_ASSERT_CONFIG set; it defeats
-// the objective of this file:
-#ifdef BOOST_ASSERT_CONFIG
-# undef BOOST_ASSERT_CONFIG
-#endif
-
-#include <boost/config.hpp>
-#include "test.hpp"
-
-#ifndef BOOST_NO_INITIALIZER_LISTS
-#include "boost_no_initializer_lists.ipp"
-#else
-namespace boost_no_initializer_lists = empty_boost;
-#endif
-
-int main( int, char *[] )
-{
- return boost_no_initializer_lists::test();
-}
-
Modified: branches/quickbook-dev/libs/container/doc/container.qbk
==============================================================================
--- branches/quickbook-dev/libs/container/doc/container.qbk (original)
+++ branches/quickbook-dev/libs/container/doc/container.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -588,6 +588,8 @@
[section:release_notes_boost_1_49_00 Boost 1.49 Release]
* Fixed bugs
+ [@https://svn.boost.org/trac/boost/ticket/6540 #6540],
+ [@https://svn.boost.org/trac/boost/ticket/6499 #6499],
[@https://svn.boost.org/trac/boost/ticket/6336 #6336],
[@https://svn.boost.org/trac/boost/ticket/6335 #6335],
[@https://svn.boost.org/trac/boost/ticket/6287 #6287],
Modified: branches/quickbook-dev/libs/conversion/doc/lexical_cast.qbk
==============================================================================
--- branches/quickbook-dev/libs/conversion/doc/lexical_cast.qbk (original)
+++ branches/quickbook-dev/libs/conversion/doc/lexical_cast.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -3,7 +3,7 @@
[version 1.0]
[copyright 2000-2005 Kevlin Henney]
[copyright 2006-2010 Alexander Nasonov]
- [copyright 2011 Antony Polukhin]
+ [copyright 2011-2012 Antony Polukhin]
[category String and text processing]
[category Miscellaneous]
[license
@@ -167,9 +167,22 @@
`boost::lexical_cast` sees single `wchar_t` character as `unsigned short`. It is not a `boost::lexical_cast` mistake, but a
limitation of compiler options that you use.
+[pre
+]
+
+* [*Question:] Why `boost::lexical_cast<double>("-1.#IND");` throws `boost::bad_lexical_cast`?
+ * [*Answer:] `"-1.#IND"` is a compiler extension, that violates standard. You shall input `"-nan"`, `"nan"`, `"inf"`
+, `"-inf"` (case insensitive) strings to get NaN and Inf values. `boost::lexical_cast<string>` outputs `"-nan"`, `"nan"`,
+`"inf"`, `"-inf"` strings, when has NaN or Inf input values.
+
[endsect]
[section Changes]
+* [*boost 1.50.0 :]
+
+ * `boost::bad_lexical_cast` exception is now globaly visible and can be catched even if code is compiled with -fvisibility=hidden.
+ * Now it is possible to compile library with disabled exceptions.
+
* [*boost 1.49.0 :]
* Restored work with typedefed wchar_t (compilation flag /Zc:wchar_t- for Visual Studio).
Modified: branches/quickbook-dev/libs/conversion/test/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/conversion/test/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/conversion/test/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -38,5 +38,12 @@
[ run lexical_cast_pointers_test.cpp ../../test/build//boost_unit_test_framework/<link>static ]
[ compile lexical_cast_typedefed_wchar_test.cpp : <toolset>msvc:<nowchar>on ]
[ run lexical_cast_typedefed_wchar_test_runtime.cpp ../../test/build//boost_unit_test_framework/<link>static : : : <toolset>msvc:<nowchar>on ]
- ;
-
+ [ run lexical_cast_no_locale_test.cpp ../../test/build//boost_unit_test_framework/<link>static : : : <define>BOOST_NO_STD_LOCALE <define>BOOST_LEXICAL_CAST_ASSUME_C_LOCALE ]
+ [ run lexical_cast_no_exceptions_test.cpp ../../test/build//boost_unit_test_framework/<link>static : : : <define>BOOST_NO_EXCEPTIONS
+ <toolset>gcc-4.3:<cflags>-fno-exceptions
+ <toolset>gcc-4.4:<cflags>-fno-exceptions
+ <toolset>gcc-4.5:<cflags>-fno-exceptions
+ <toolset>gcc-4.6:<cflags>-fno-exceptions
+ ]
+ ;
+
Modified: branches/quickbook-dev/libs/conversion/test/lexical_cast_containers_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/conversion/test/lexical_cast_containers_test.cpp (original)
+++ branches/quickbook-dev/libs/conversion/test/lexical_cast_containers_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,6 +13,7 @@
#include <boost/container/string.hpp>
void testing_boost_containers_basic_string();
+void testing_boost_containers_string_std_string();
using namespace boost;
@@ -21,6 +22,7 @@
unit_test::test_suite *suite =
BOOST_TEST_SUITE("Testing boost::lexical_cast with boost::container::string");
suite->add(BOOST_TEST_CASE(testing_boost_containers_basic_string));
+ suite->add(BOOST_TEST_CASE(testing_boost_containers_string_std_string));
return suite;
}
@@ -35,4 +37,24 @@
BOOST_CHECK(1000 == lexical_cast<int>(str));
}
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)
+#define BOOST_LCAST_NO_WCHAR_T
+#endif
+void testing_boost_containers_string_std_string()
+{
+ std::string std_str("std_str");
+ boost::container::string boost_str("boost_str");
+ BOOST_CHECK(boost::lexical_cast<std::string>(boost_str) == "boost_str");
+ BOOST_CHECK(boost::lexical_cast<boost::container::string>(std_str) == "std_str");
+
+#ifndef BOOST_LCAST_NO_WCHAR_T
+ std::wstring std_wstr(L"std_wstr");
+ boost::container::wstring boost_wstr(L"boost_wstr");
+
+ BOOST_CHECK(boost::lexical_cast<std::wstring>(boost_wstr) == L"boost_wstr");
+ BOOST_CHECK(boost::lexical_cast<boost::container::wstring>(std_wstr) == L"std_wstr");
+
+#endif
+
+}
Modified: branches/quickbook-dev/libs/conversion/test/lexical_cast_empty_input_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/conversion/test/lexical_cast_empty_input_test.cpp (original)
+++ branches/quickbook-dev/libs/conversion/test/lexical_cast_empty_input_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -138,6 +138,19 @@
BOOST_CHECK_THROW(lexical_cast<signed char>(v), bad_lexical_cast);
}
+
+struct my_string {
+ friend std::ostream &operator<<(std::ostream& sout, my_string const&/* st*/) {
+ return sout << "";
+ }
+};
+
+void test_empty_zero_terminated_string()
+{
+ my_string st;
+ BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(st), std::string());;
+}
+
unit_test::test_suite *init_unit_test_suite(int, char *[])
{
unit_test::test_suite *suite =
@@ -146,6 +159,7 @@
suite->add(BOOST_TEST_CASE(&test_empty_string));
suite->add(BOOST_TEST_CASE(&test_empty_user_class));
suite->add(BOOST_TEST_CASE(&test_empty_vector));
+ suite->add(BOOST_TEST_CASE(&test_empty_zero_terminated_string));
return suite;
}
Modified: branches/quickbook-dev/libs/conversion/test/lexical_cast_inf_nan_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/conversion/test/lexical_cast_inf_nan_test.cpp (original)
+++ branches/quickbook-dev/libs/conversion/test/lexical_cast_inf_nan_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -85,6 +85,12 @@
BOOST_CHECK( is_pos_inf( lexical_cast<test_t>("+infinity") ) );
BOOST_CHECK( is_pos_inf( lexical_cast<test_t>("+INFINITY") ) );
+ BOOST_CHECK( is_pos_inf( lexical_cast<test_t>("iNfiNity") ) );
+ BOOST_CHECK( is_pos_inf( lexical_cast<test_t>("INfinity") ) );
+
+ BOOST_CHECK( is_neg_inf( lexical_cast<test_t>("-inFINITY") ) );
+ BOOST_CHECK( is_neg_inf( lexical_cast<test_t>("-INFINITY") ) );
+
BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("nan") ) );
BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("NAN") ) );
@@ -94,6 +100,15 @@
BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("+nan") ) );
BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("+NAN") ) );
+ BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("nAn") ) );
+ BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("NaN") ) );
+
+ BOOST_CHECK( is_neg_nan( lexical_cast<test_t>("-nAn") ) );
+ BOOST_CHECK( is_neg_nan( lexical_cast<test_t>("-NaN") ) );
+
+ BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("+Nan") ) );
+ BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("+nAN") ) );
+
BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("nan()") ) );
BOOST_CHECK( is_pos_nan( lexical_cast<test_t>("NAN(some string)") ) );
BOOST_CHECK_THROW( lexical_cast<test_t>("NAN(some string"), bad_lexical_cast );
@@ -127,6 +142,12 @@
BOOST_CHECK( is_pos_inf( lexical_cast<test_t>(L"+infinity") ) );
BOOST_CHECK( is_pos_inf( lexical_cast<test_t>(L"+INFINITY") ) );
+ BOOST_CHECK( is_neg_inf( lexical_cast<test_t>(L"-infINIty") ) );
+ BOOST_CHECK( is_neg_inf( lexical_cast<test_t>(L"-INFiniTY") ) );
+
+ BOOST_CHECK( is_pos_inf( lexical_cast<test_t>(L"+inFINIty") ) );
+ BOOST_CHECK( is_pos_inf( lexical_cast<test_t>(L"+INfinITY") ) );
+
BOOST_CHECK( is_pos_nan( lexical_cast<test_t>(L"nan") ) );
BOOST_CHECK( is_pos_nan( lexical_cast<test_t>(L"NAN") ) );
Modified: branches/quickbook-dev/libs/conversion/test/lexical_cast_typedefed_wchar_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/conversion/test/lexical_cast_typedefed_wchar_test.cpp (original)
+++ branches/quickbook-dev/libs/conversion/test/lexical_cast_typedefed_wchar_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,12 +13,27 @@
#include <boost/static_assert.hpp>
#include <boost/lexical_cast.hpp>
+#include <boost/date_time/gregorian/gregorian.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
+
+void parseDate()
+{
+ std::locale locale;
+ boost::date_time::format_date_parser<boost::gregorian::date, wchar_t> parser(L"", locale);
+ boost::date_time::special_values_parser<boost::gregorian::date, wchar_t> svp;
+
+ boost::gregorian::date date = parser.parse_date(L"", L"", svp);
+ (void)date;
+}
+
+
int main()
{
#ifdef BOOST_MSVC
BOOST_STATIC_ASSERT((boost::is_same<wchar_t, unsigned short>::value));
#endif
+ parseDate();
return ::boost::lexical_cast<int>(L"1000") == 1000;
}
Modified: branches/quickbook-dev/libs/exception/doc/source/boost-exception.reno
==============================================================================
--- branches/quickbook-dev/libs/exception/doc/source/boost-exception.reno (original)
+++ branches/quickbook-dev/libs/exception/doc/source/boost-exception.reno 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -52,34 +52,28 @@
<hook>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>DB156E6A8ACB9FB90C8FB110FC25A5FEB14A619F82EEC47FF913373592E5CC3E</strong>
- <weak>240075319</weak>
- <size>6209</size>
- <position>412</position>
+ <size>0</size>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>0</empty>
- <string>../../example/example_io.cpp</string>
- <type>0</type>
- <base>0</base>
+ <empty>1</empty>
</path>
</file>
</hook>
<title>
- <string>diagnostic_information example</string>
+ <string>Motivation</string>
</title>
<file_name>
- <string></string>
+ <string>motivation</string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <size>7</size>
+ <variant>2</variant>
+ <string>(:include include:) (:auto also explicit="</string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -91,44 +85,27 @@
<hook>
<hook>
<stream_hook_path>
- <size>3</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
- <weak>4056200131</weak>
- <size>2307</size>
- <position>4436</position>
- <strong>A94129EFD6ABBDDCD4CFDB671821F7DA103B2EA4455CF39E783D333C236D1C41</strong>
- <weak>1035445969</weak>
- <size>595</size>
- <position>204</position>
+ <size>0</size>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
+ <empty>1</empty>
</path>
</file>
</hook>
<title>
- <string>exception::exception</string>
+ <string>exception types as simple semantic tags</string>
</title>
<file_name>
- <string>exception_constructors</string>
+ <string></string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>1</size>
<variant>2</variant>
- <string>(:include include:) (:auto also:) </string>
- </pair>
- <pair>
+ <string> </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -141,33 +118,33 @@
<hook>
<stream_hook_path>
<size>1</size>
- <strong>977045132A532A0071B0B53F737D85367CE9A331402F96790E45B3B6F2FC88A6</strong>
- <weak>1875939463</weak>
- <size>529</size>
- <position>382</position>
+ <strong>C95CEF2E9D0BAA1E950509471062916DB849A46A19F7692BA478030E79B338EB</strong>
+ <weak>1917376632</weak>
+ <size>706</size>
+ <position>408</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../example/error_info_1.cpp</string>
+ <string>../../example/enable_error_info.cpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>adding of arbitrary data at the point of the throw</string>
+ <string>integrating boost exception in existing exception class hierarchies</string>
</title>
<file_name>
- <string>adding_data_at_throw</string>
+ <string>tutorial_enable_error_info</string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <variant>2</variant>
+ <string> </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -189,14 +166,35 @@
</file>
</hook>
<title>
- <string>page index</string>
+ <string>frequently asked questions</string>
</title>
<file_name>
- <string>page_idx</string>
+ <string></string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
+ <variant>2</variant>
+ <string>":) </string>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-7</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>1</size>
+ <variant>2</variant>
+ <string>(:include include:) (:auto also:) </string>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-8</id>
+ </shared_ptr>
+ </weak_ptr>
<size>1</size>
<variant>2</variant>
<string>(:include include:) (:auto also:) </string>
@@ -213,27 +211,32 @@
<hook>
<hook>
<stream_hook_path>
- <size>0</size>
+ <size>1</size>
+ <strong>977045132A532A0071B0B53F737D85367CE9A331402F96790E45B3B6F2FC88A6</strong>
+ <weak>1875939463</weak>
+ <size>529</size>
+ <position>382</position>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>1</empty>
+ <empty>0</empty>
+ <string>../../example/error_info_1.cpp</string>
+ <type>0</type>
+ <base>0</base>
</path>
</file>
</hook>
<title>
- <string>exception types as simple semantic tags</string>
+ <string>adding of arbitrary data at the point of the throw</string>
</title>
<file_name>
- <string></string>
+ <string>adding_data_at_throw</string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>(:include include:) (:auto also:) </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -247,37 +250,44 @@
<hook>
<hook>
<stream_hook_path>
- <size>0</size>
+ <size>3</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
+ <weak>4056200131</weak>
+ <size>2307</size>
+ <position>4436</position>
+ <strong>A94129EFD6ABBDDCD4CFDB671821F7DA103B2EA4455CF39E783D333C236D1C41</strong>
+ <weak>1035445969</weak>
+ <size>595</size>
+ <position>204</position>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>1</empty>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
</path>
</file>
</hook>
<title>
- <string>Motivation</string>
+ <string>exception::exception</string>
</title>
<file_name>
- <string>motivation</string>
+ <string>exception_constructors</string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
- <size>7</size>
- <variant>2</variant>
- <string>(:include include:) (:auto also explicit="</string>
- <variant>1</variant>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-9</id>
- </shared_ptr>
- </weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string> </string>
- <variant>1</variant>
+ <string>(:include include:) (:auto also:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -289,34 +299,44 @@
<hook>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>C95CEF2E9D0BAA1E950509471062916DB849A46A19F7692BA478030E79B338EB</strong>
- <weak>1917376632</weak>
- <size>706</size>
- <position>408</position>
+ <size>3</size>
+ <strong>EFBD8063574E7D463C8E08D9AA1D68CFCE4630C445B20156AC7591F46AB48260</strong>
+ <weak>2082877988</weak>
+ <size>5081</size>
+ <position>751</position>
+ <strong>2C6C9E29E4E23E6C1F5876C33741FB18A63E703410F3CD61ACB348866B7B02B8</strong>
+ <weak>3516588960</weak>
+ <size>3918</size>
+ <position>884</position>
+ <strong>38AA79D330846BE1CF17285796F34A9DBB5A7E995963A55F9B46EB1DA6314610</strong>
+ <weak>542483318</weak>
+ <size>573</size>
+ <position>3130</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../example/enable_error_info.cpp</string>
+ <string>../../../../boost/exception/info.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>integrating boost exception in existing exception class hierarchies</string>
+ <string>exception/operator<<</string>
</title>
<file_name>
- <string>tutorial_enable_error_info</string>
+ <string></string>
</file_name>
</object>
</shared_ptr>
</weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string> </string>
- <variant>1</variant>
+ <string>(:include include:) (:auto also:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
@@ -328,17 +348,24 @@
<hook>
<hook>
<stream_hook_path>
- <size>0</size>
+ <size>1</size>
+ <strong>DB156E6A8ACB9FB90C8FB110FC25A5FEB14A619F82EEC47FF913373592E5CC3E</strong>
+ <weak>240075319</weak>
+ <size>6209</size>
+ <position>412</position>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>1</empty>
+ <empty>0</empty>
+ <string>../../example/example_io.cpp</string>
+ <type>0</type>
+ <base>0</base>
</path>
</file>
</hook>
<title>
- <string>frequently asked questions</string>
+ <string>diagnostic_information example</string>
</title>
<file_name>
<string></string>
@@ -346,8 +373,7 @@
</object>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string>":) </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -406,32 +432,28 @@
<hook>
<hook>
<stream_hook_path>
- <size>3</size>
- <strong>EFBD8063574E7D463C8E08D9AA1D68CFCE4630C445B20156AC7591F46AB48260</strong>
- <weak>2082877988</weak>
- <size>5081</size>
- <position>751</position>
- <strong>2C6C9E29E4E23E6C1F5876C33741FB18A63E703410F3CD61ACB348866B7B02B8</strong>
- <weak>3516588960</weak>
- <size>3918</size>
- <position>884</position>
- <strong>38AA79D330846BE1CF17285796F34A9DBB5A7E995963A55F9B46EB1DA6314610</strong>
- <weak>542483318</weak>
- <size>573</size>
- <position>3130</position>
+ <size>2</size>
+ <strong>6FB85B536F965F137409D5B5D34786DCBF0B9957A7C251D271B717A1156B823D</strong>
+ <weak>1090406464</weak>
+ <size>362</size>
+ <position>527</position>
+ <strong>D16DAEA8B1792A019AF7FCA362FDC6EFD381AF4C43C076A01C029ECE51F994A6</strong>
+ <weak>3172941848</weak>
+ <size>330</size>
+ <position>26</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/info.hpp</string>
+ <string>../../../../boost/exception/current_exception_cast.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>exception/operator<<</string>
+ <string>current_exception_cast</string>
</title>
<file_name>
<string></string>
@@ -447,17 +469,6 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
- </shared_ptr>
- </weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>(:include include:) (:auto also:) </string>
- </pair>
- <pair>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
<id>15</id>
<type>
<string>reno_context</string>
@@ -466,28 +477,24 @@
<hook>
<hook>
<stream_hook_path>
- <size>2</size>
- <strong>9A4ECF9A49A73AED83C1565CB8C67AE1519E8AFE6818F968B4C4733CB9E86CEF</strong>
- <weak>1615599655</weak>
- <size>68</size>
- <position>227</position>
- <strong>34F0583BC8DE767CE2D79721E1F956895E43E5397473B1050F59BE7E26C773DB</strong>
- <weak>805836816</weak>
- <size>66</size>
- <position>1</position>
+ <size>1</size>
+ <strong>790A065B0168021FAD180E996254E3CDBC0360D22D3FCB83C143416663D85402</strong>
+ <weak>1376868984</weak>
+ <size>262</size>
+ <position>323</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/error_info.hpp</string>
+ <string>../../../../boost/exception/errinfo_nested_exception.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>boost/exception/error_info.hpp</string>
+ <string>boost/exception/errinfo_nested_exception.hpp</string>
</title>
<file_name>
<string></string>
@@ -512,27 +519,27 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>6FB85B536F965F137409D5B5D34786DCBF0B9957A7C251D271B717A1156B823D</strong>
- <weak>1090406464</weak>
- <size>362</size>
- <position>527</position>
- <strong>D16DAEA8B1792A019AF7FCA362FDC6EFD381AF4C43C076A01C029ECE51F994A6</strong>
- <weak>3172941848</weak>
- <size>330</size>
- <position>26</position>
+ <strong>9A4ECF9A49A73AED83C1565CB8C67AE1519E8AFE6818F968B4C4733CB9E86CEF</strong>
+ <weak>1615599655</weak>
+ <size>68</size>
+ <position>321</position>
+ <strong>34F0583BC8DE767CE2D79721E1F956895E43E5397473B1050F59BE7E26C773DB</strong>
+ <weak>805836816</weak>
+ <size>66</size>
+ <position>1</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/current_exception_cast.hpp</string>
+ <string>../../../../boost/exception/error_info.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
</hook>
<title>
- <string>current_exception_cast</string>
+ <string>boost/exception/error_info.hpp</string>
</title>
<file_name>
<string></string>
@@ -548,17 +555,6 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
- </shared_ptr>
- </weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>(:include include:) (:auto also:) </string>
- </pair>
- <pair>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
<id>17</id>
<type>
<string>reno_context</string>
@@ -604,6 +600,17 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
+ <id>-6</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>1</size>
+ <variant>2</variant>
+ <string>(:include include:) (:auto also:) </string>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
<id>18</id>
<type>
<string>reno_context</string>
@@ -612,27 +619,20 @@
<hook>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>790A065B0168021FAD180E996254E3CDBC0360D22D3FCB83C143416663D85402</strong>
- <weak>1376868984</weak>
- <size>262</size>
- <position>323</position>
+ <size>0</size>
</stream_hook_path>
</hook>
<file>
<path>
- <empty>0</empty>
- <string>../../../../boost/exception/errinfo_nested_exception.hpp</string>
- <type>0</type>
- <base>0</base>
+ <empty>1</empty>
</path>
</file>
</hook>
<title>
- <string>boost/exception/errinfo_nested_exception.hpp</string>
+ <string>page index</string>
</title>
<file_name>
- <string></string>
+ <string>page_idx</string>
</file_name>
</object>
</shared_ptr>
@@ -922,9 +922,9 @@
<hook>
<stream_hook_path>
<size>3</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
<strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
<weak>4056200131</weak>
@@ -1139,10 +1139,10 @@
<hook>
<stream_hook_path>
<size>1</size>
- <strong>9A6D5598D65F1C1B5F913007D1CD1A814F3CDAD07D4AF8C468A0716059B2F7CC</strong>
- <weak>3552995087</weak>
- <size>1405</size>
- <position>527</position>
+ <strong>195FF369BA559E3C0080F75321794B4808B6A278D4DEF8AEDBD9FCEBCE69C548</strong>
+ <weak>458631219</weak>
+ <size>2145</size>
+ <position>321</position>
</stream_hook_path>
</hook>
<file>
@@ -1624,13 +1624,13 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>F7633FDCF6615C0199645701EE6E7ACE5CBCD7A7CF6838573791E91ABB3C09F2</strong>
- <weak>1668435395</weak>
- <size>1332</size>
+ <strong>1B4417301AE3C0338C22E6D497391F51ABD459E521E7DFCE59A6EEC1372D33C2</strong>
+ <weak>202224383</weak>
+ <size>1766</size>
<position>600</position>
- <strong>A1F443AF571973A12005D2F7D4AE09A32AAF686FEEAE272EC21512A65EB943E8</strong>
- <weak>3879093659</weak>
- <size>1300</size>
+ <strong>E0A17503B42EE12F31548A7D20F89916D734CE88B30A1BF6F9FC2D1F83A8B6F4</strong>
+ <weak>3410340567</weak>
+ <size>1734</size>
<position>26</position>
</stream_hook_path>
</hook>
@@ -2117,9 +2117,9 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
<strong>F3FB15CD82336271C6E875BC620385322777D16F0B7C233300783CE35710CCBF</strong>
<weak>3292878997</weak>
@@ -2330,14 +2330,14 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
<strong>DF9EA87B0140AACF4422F1B76F6A6A409C15F32858BBBA85A35981A824C56BA9</strong>
<weak>1137981799</weak>
<size>192</size>
- <position>11758</position>
+ <position>11766</position>
</stream_hook_path>
</hook>
<file>
@@ -2665,9 +2665,9 @@
<hook>
<stream_hook_path>
<size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
<strong>17E691632123EB67BA67D590B49EB8094F462F5A10A66A1C5438E1867EF1478E</strong>
<weak>765399792</weak>
@@ -2947,9 +2947,9 @@
<hook>
<stream_hook_path>
<size>1</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
</stream_hook_path>
</hook>
@@ -3251,7 +3251,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3260,7 +3260,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3269,7 +3269,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3278,7 +3278,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3287,7 +3287,16 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-11</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3334,15 +3343,6 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
- </shared_ptr>
- </weak_ptr>
- <size>0</size>
- </pair>
- <pair>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
<id>-15</id>
</shared_ptr>
</weak_ptr>
@@ -3361,7 +3361,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-17</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3370,7 +3370,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-17</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -3501,7 +3501,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -4185,7 +4185,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4194,7 +4194,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4203,7 +4203,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4212,7 +4212,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4221,7 +4221,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4230,7 +4230,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4239,7 +4239,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4248,7 +4248,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -4267,11 +4267,11 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-63</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string> decl:)@] </string>
+ <string> def:)@] </string>
</pair>
<pair>
<weak_ptr>
@@ -4280,16 +4280,18 @@
<id>-16</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <size>3</size>
+ <variant>2</variant>
+ <string>[@(:include </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <variant>2</variant>
+ <string> decl:)@] </string>
</pair>
<pair>
<weak_ptr>
@@ -4304,21 +4306,19 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
- <size>3</size>
- <variant>2</variant>
- <string>[@(:include </string>
- <variant>1</variant>
+ <size>0</size>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-63</id>
+ <id>-18</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string> def:)@] </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -4851,7 +4851,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -4889,7 +4889,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5158,7 +5158,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5275,7 +5275,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5355,45 +5355,25 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
- </shared_ptr>
- </weak_ptr>
- <size>7</size>
- <variant>2</variant>
- <string>[@(:link </string>
- <variant>1</variant>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-6</id>
- </shared_ptr>
- </weak_ptr>
- <variant>2</variant>
- <string> mod="m":)(); (:link </string>
- <variant>1</variant>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string> mod="m":)( (:link </string>
- <variant>1</variant>
+ <size>0</size>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string>:) const & x );@] </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -5402,43 +5382,45 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <size>7</size>
+ <variant>2</variant>
+ <string>[@(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <variant>2</variant>
+ <string> mod="m":)(); (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
<id>-10</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <variant>2</variant>
+ <string> mod="m":)( (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <variant>2</variant>
+ <string>:) const & x );@] </string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<size>5</size>
@@ -5448,7 +5430,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5467,7 +5449,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -5476,7 +5458,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -5485,7 +5467,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<size>3</size>
@@ -5495,7 +5477,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -5505,7 +5487,16 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-15</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -5543,6 +5534,15 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
+ <id>-6</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
<id>-18</id>
</shared_ptr>
</weak_ptr>
@@ -6536,65 +6536,63 @@
<id>-5</id>
</shared_ptr>
</weak_ptr>
- <size>11</size>
+ <size>33</size>
<variant>2</variant>
- <string>!!!!Example: this is a possible output from the (:link </string>
+ <string>(:auto !!!:) Traditionally, when using exceptions to report failures, the throw site: *creates an exception object of the appropriate type, and *stuffs it with data relevant to the detected error. A higher context in the program contains a catch statement which: *selects failures based on exception types, and *inspects exception objects for data required to deal with the problem. The main issue with this "traditional" approach is that often, the data available at the point of the throw is insufficient for the catch site to handle the failure. Here is an example of a catch statement: [@catch( file_read_error & e ) { std::cerr << e.file_name(); }@] And here is a possible matching throw: [@void read_file( FILE * f ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error(???); ....
0; }@] Clearly, the problem is that the handler requires a file name but the read_file function does not have a file name to put in the exception object; all it has is a FILE pointer! In an attempt to deal with this problem, we could modify read_file to accept a file name: [@void read_file( FILE * f, char const * name ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error(name); .... }@] This is not a real solution: it simply shifts the burden of supplying a file name to the immediate caller of the read_file function. ->''In general, the data required to handle a given library-emitted exception depends on the program that links to it. Many contexts between the throw and the catch may have relevant information which must be transported to the exception handler.'' !!!Exception wrapping The idea of exception wrapping is to catch an excep
tion from a lower level function (such as the read_file function above), and throw a new exception object that contains the original exception (and also carries a file name.) This method seems to be particularly popular with C++ programmers with Java background. Exception wrapping leads to the following problems: *To wrap an exception object it must be copied, which may result in slicing. *Wrapping is practically impossible to use in generic contexts. The second point is actually special case of violating the exception neutrality principle. Most contexts in a program can not handle exceptions; such contexts should not interfere with the process of exception handling. !!!The boost::exception solution *Simply derive your exception types from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-34</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function, as used in ''libs/exception/example/example_io.cpp:'' [@example_io.cpp(70): Throw in function class boost::shared_ptr<struct _iobuf> __cdecl my_fopen(const char *,const char *) Dynamic exception type: class boost::exception_detail::clone_impl<struct fopen_error> std::exception::what: example_io error [struct boost::(:link </string>
+ <string>:). *Confidently limit the throw site to provide only data that is available naturally. *Use exception-neutral contexts between the throw and the catch to augment exceptions with more relevant data as they bubble up. For example, in the throw statement below we only add the errno code, since this is the only failure-relevant information available in this context: [@struct exception_base: virtual std::exception, virtual boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-32</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = fopen [struct boost::(:link </string>
+ <string>:) { }; struct io_error: virtual exception_base { }; struct file_read_error: virtual io_error { }; typedef boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = 2, "No such file or directory" [struct boost::(:link </string>
+ <string>:)<struct tag_errno_code,int> errno_code; void read_file( FILE * f ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error() (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-72</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = tmp1.txt [struct boost::(:link </string>
+ <string>|<<:) errno_code(errno); .... }@] In a higher exception-neutral context, we add the file name to ''any'' exception that derives from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-22</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = rb@] </string>
- </pair>
- <pair>
+ <string>:): [@typedef boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
- <size>7</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include decl:) !!!!Effects: * Default constructor: initializes an empty boost::(:link </string>
+ <string>:)<struct tag_file_name,std::string> file_name; .... try { if( FILE * fp=fopen("foo.txt","rt") ) { shared_ptr<FILE> f(fp,fclose); .... read_file(fp); //throws types deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6603,204 +6601,198 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) object. * Copy constructor: initializes a boost::(:link </string>
+ <string>:) do_something(); .... } else throw file_open_error() (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) object which shares ownership with x of all data added through (:link </string>
+ <string>|<<:) errno_code(errno); } catch( boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string> mod="/":), including data that is added at a future time. !!!!Throws: Nothing. </string>
- </pair>
- <pair>
+ <string>:) & e ) { e (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <size>17</size>
<variant>2</variant>
- <string>(:auto !!!:) The following example demonstrates how errno can be stored in exception objects using Boost Exception: [@#include <(:link </string>
+ <string>|<<:) file_name("foo.txt"); throw; }@] Finally here is how the handler retrieves data from exceptions that derive from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-77</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)> #include <iostream> typedef boost::(:link </string>
+ <string>:): [@catch( io_error & e ) { std::cerr << "I/O Error!\n"; if( std::string const * fn=(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-20</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_my_info,int> my_info; //(1) struct my_error: virtual boost::(:link </string>
+ <string>:)<file_name>(e) ) std::cerr << "File name: " << *fn << "\n"; if( int const * c=(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-20</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), virtual std::exception { }; //(2) void f() { throw my_error() << my_info(42); //(3) }@] First, we instantiate the (:link </string>
+ <string>:)<errno_code>(e) ) std::cerr << "OS says: " << strerror(*c) << "\n"; }@] In addition, boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-34</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) template using a unique identifier -- tag_my_info, and the type of the info it identifies -- int. This provides compile-time type safety for the various values stored in exception objects. Second, we define class my_error, which derives from boost::(:link </string>
+ <string>:) can be used to compose an automatic (if not user-friendly) message that contains all of the (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). Finally, (3) illustrates how the typedef from (1) can be used with (:link </string>
+ <string>:) objects added to a boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|operator<<:) to store values in exception objects at the point of the throw. The stored my_info value can be recovered at a later time like this: [@// ...continued void g() { try { f(); } catch( my_error & x ) { if( int const * mi=boost::(:link </string>
- <variant>1</variant>
+ <string>:). This is useful for inclusion in logs and other diagnostic objects. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-20</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
+ <size>27</size>
<variant>2</variant>
- <string>:)<my_info>(x) ) std::cerr << "My info: " << *mi; } }@] The (:link </string>
+ <string>(:auto !!:) Some exception hierarchies can not be modified to make boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-20</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function template is instantiated with the typedef from (1), and is passed an exception object of a polymorphic type. If the exception object contains the requested value, err will point to it; otherwise a null pointer is returned. </string>
- </pair>
- <pair>
+ <string>:) a base type. In this case, the (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-54</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
<variant>2</variant>
- <string>(:auto !:) This is an alphabetical list of all Boost Exception documentation pages. (:pagelist fmt="index" except_tags="index noindex" mod="w":) </string>
- </pair>
- <pair>
+ <string>:) function template can be used to make exception objects derive from boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
- <size>7</size>
<variant>2</variant>
- <string>(:auto !!!:) Deriving from boost::(:link </string>
+ <string>:) anyway. Here is an example: [@#include <(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-77</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) effectively decouples the semantics of a failure from the information that is relevant to each individual instance of reporting a failure with a given semantic. In other words: with boost::(:link </string>
+ <string>:)> #include <stdexcept> typedef boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), what data a given exception object transports depends primarily on the context in which failures are reported (not on its type.) Since exception types need no members, it becomes very natural to throw exceptions that derive from more than one type to indicate multiple appropriate semantics: [@struct exception_base: virtual std::exception, virtual boost::(:link </string>
+ <string>:)<struct tag_std_range_min,size_t> std_range_min; typedef boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
- </weak_ptr>
- <variant>2</variant>
- <string>:) { }; struct io_error: virtual exception_base { }; struct file_error: virtual io_error { }; struct read_error: virtual io_error { }; struct file_read_error: virtual file_error, virtual read_error { };@] Using this approach, exception types become a simple tagging system for categorizing errors and selecting failures in exception handlers. </string>
- </pair>
- <pair>
+ </weak_ptr>
+ <variant>2</variant>
+ <string>:)<struct tag_std_range_max,size_t> std_range_max; typedef boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
- <size>33</size>
<variant>2</variant>
- <string>(:auto !!!:) Traditionally, when using exceptions to report failures, the throw site: *creates an exception object of the appropriate type, and *stuffs it with data relevant to the detected error. A higher context in the program contains a catch statement which: *selects failures based on exception types, and *inspects exception objects for data required to deal with the problem. The main issue with this "traditional" approach is that often, the data available at the point of the throw is insufficient for the catch site to handle the failure. Here is an example of a catch statement: [@catch( file_read_error & e ) { std::cerr << e.file_name(); }@] And here is a possible matching throw: [@void read_file( FILE * f ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error(???); ....
0; }@] Clearly, the problem is that the handler requires a file name but the read_file function does not have a file name to put in the exception object; all it has is a FILE pointer! In an attempt to deal with this problem, we could modify read_file to accept a file name: [@void read_file( FILE * f, char const * name ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error(name); .... }@] This is not a real solution: it simply shifts the burden of supplying a file name to the immediate caller of the read_file function. ->''In general, the data required to handle a given library-emitted exception depends on the program that links to it. Many contexts between the throw and the catch may have relevant information which must be transported to the exception handler.'' !!!Exception wrapping The idea of exception wrapping is to catch an excep
tion from a lower level function (such as the read_file function above), and throw a new exception object that contains the original exception (and also carries a file name.) This method seems to be particularly popular with C++ programmers with Java background. Exception wrapping leads to the following problems: *To wrap an exception object it must be copied, which may result in slicing. *Wrapping is practically impossible to use in generic contexts. The second point is actually special case of violating the exception neutrality principle. Most contexts in a program can not handle exceptions; such contexts should not interfere with the process of exception handling. !!!The boost::exception solution *Simply derive your exception types from boost::(:link </string>
+ <string>:)<struct tag_std_range_index,size_t> std_range_index; template <class T> class my_container { public: size_t size() const; T const & operator[]( size_t i ) const { if( i > size() ) throw boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-54</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). *Confidently limit the throw site to provide only data that is available naturally. *Use exception-neutral contexts between the throw and the catch to augment exceptions with more relevant data as they bubble up. For example, in the throw statement below we only add the errno code, since this is the only failure-relevant information available in this context: [@struct exception_base: virtual std::exception, virtual boost::(:link </string>
+ <string>:)(std::range_error("Index out of range")) << std_range_min(0) << std_range_max(size()) << std_range_index(i); //.... } }; @] The call to (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-54</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) { }; struct io_error: virtual exception_base { }; struct file_read_error: virtual io_error { }; typedef boost::(:link </string>
+ <string>:)<T> gets us an object of ''unspecified type'' which is guaranteed to derive from both boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_errno_code,int> errno_code; void read_file( FILE * f ) { .... size_t nr=fread(buf,1,count,f); if( ferror(f) ) throw file_read_error() (:link </string>
+ <string>:) and T. This makes it possible to use (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) errno_code(errno); .... }@] In a higher exception-neutral context, we add the file name to ''any'' exception that derives from boost::(:link </string>
+ <string> mod="/":) to store additional information in the exception object. The exception can be intercepted as T &, so existing exception handling will not break. It can also be intercepted as boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6809,34 +6801,36 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:): [@typedef boost::(:link </string>
+ <string>:) &, so that (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-73</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_file_name,std::string> file_name; .... try { if( FILE * fp=fopen("foo.txt","rt") ) { shared_ptr<FILE> f(fp,fclose); .... read_file(fp); //throws types deriving from boost::(:link </string>
- <variant>1</variant>
+ <string>|more information can be added to the exception at a later time:). </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
+ <size>81</size>
<variant>2</variant>
- <string>:) do_something(); .... } else throw file_open_error() (:link </string>
+ <string>(:auto !!:) !!!Why doesn't boost::exception derive from std::exception? Despite that (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-38</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) errno_code(errno); } catch( boost::(:link </string>
+ <string>|virtual inheritance should be used in deriving from base exception types:), many programmers fail to follow this principle when deriving from std::exception. If boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6845,16 +6839,16 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) & e ) { e (:link </string>
+ <string>:) derives from std::exception, using the (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-54</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) file_name("foo.txt"); throw; }@] Finally here is how the handler retrieves data from exceptions that derive from boost::(:link </string>
+ <string>:) function with such user-defined types would introduce dangerous ambiguity which would break all catch(std::exception &) statements. Of course, boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6863,43 +6857,43 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:): [@catch( io_error & e ) { std::cerr << "I/O Error!\n"; if( std::string const * fn=(:link </string>
+ <string>:) should not be used to replace std::exception as a base type in exception type hierarchies. Instead, it should be included as a virtual base, in addition to std::exception (which should also be derived virtually.) !!!Why is boost::exception abstract? To prevent exception-neutral contexts from erroneously erasing the type of the original exception when adding (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-20</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<file_name>(e) ) std::cerr << "File name: " << *fn << "\n"; if( int const * c=(:link </string>
+ <string>:) to an active exception object: [@catch( boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-20</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<errno_code>(e) ) std::cerr << "OS says: " << strerror(*c) << "\n"; }@] In addition, boost::(:link </string>
+ <string>:) & e ) { e (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-34</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) can be used to compose an automatic (if not user-friendly) message that contains all of the (:link </string>
+ <string>|<<:) foo_info(foo); throw e; //Compile error: boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) objects added to a boost::(:link </string>
+ <string>:) is abstract }@] The correct code is: [@catch( boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6908,27 +6902,25 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). This is useful for inclusion in logs and other diagnostic objects. </string>
- </pair>
- <pair>
+ <string>:) & e ) { e (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <size>7</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include synopsis:) This type is designed to be used as a standard (:link </string>
+ <string>|<<:) foo_info(foo); throw; //Okay, re-throwing the original exception object. }@] !!!What is the space overhead of the boost::exception base class? The space overhead for the boost::exception data members is negligible in the context of exception handling. Throwing objects that derive from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) instance for transporting a relevant errno value in exceptions deriving from boost::(:link </string>
+ <string>:) does not by itself cause dynamic memory allocations. Deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6937,27 +6929,25 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). !!!Example: (:include </string>
+ <string>:) enables any data to be added to exceptions, which usually does allocate memory. However, this memory is reclaimed when the exception has been handled, and since typically user code does not allocate memory during the unrolling of the stack, adding error info to exceptions should not cause memory fragmentation. !!!What is the speed overhead of the boost::exception base class? Throwing objects that derive from boost::exception does not have any speed overhead by itself. Deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-60</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) </string>
- </pair>
- <pair>
+ <string>:) enables any data to be added to exceptions, which internally uses constructs that can be considered quite heavy (such as std::map and std::string.) This is still negligible compared to the typical overhead of throwing and handling of exceptions. !!!Should I use boost::throw_exception or BOOST_THROW_EXCEPTION or just throw? The benefit of calling boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
- <size>7</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include synopsis:) !!!!Requirements: E must be boost::(:link </string>
+ <string>:) instead of using throw directly is that it ensures that the emitted exception derives from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -6966,285 +6956,279 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), or a type that derives (indirectly) from boost::(:link </string>
+ <string>:) and that it is compatible with boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-53</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). !!!!Postcondition: A copy of v is stored into x. If x already contains data of type (:link </string>
+ <string>:). The (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-66</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<Tag,T>, that data is overwritten. Basic exception safety guarantee. !!!!Returns: x. (:include throws:) </string>
- </pair>
- <pair>
+ <string>:) macro also results in a call to boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
- <size>27</size>
<variant>2</variant>
- <string>(:auto !!:) Some exception hierarchies can not be modified to make boost::(:link </string>
+ <string>:), but in addition it records in the exception object the __FILE__ and __LINE__ of the throw, as well as the pretty name of the function that throws. This has virtually no overhead, yet enables boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-34</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) a base type. In this case, the (:link </string>
+ <string>:) to compose a more useful, if not user-friendly message. Typical use of boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-54</id>
+ <id>-34</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function template can be used to make exception objects derive from boost::(:link </string>
+ <string>:) is: [@catch( boost::exception & e ) { std::cerr << "OMG!" << boost::diagnostic_information(e); } catch( ... ) { std::cerr << "OMG!!!"; }@] This is a possible message it may display, the first line is only possible if (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-66</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) anyway. Here is an example: [@#include <(:link </string>
+ <string>:) is used: [@example_io.cpp(70): Throw in function class boost::shared_ptr<struct _iobuf> __cdecl my_fopen(const char *,const char *) Dynamic exception type: class boost::exception_detail::clone_impl<class fopen_error> std::exception::what: example_io error [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-77</id>
+ <id>-32</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)> #include <stdexcept> typedef boost::(:link </string>
+ <string>:)_ *] = fopen [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_std_range_min,size_t> std_range_min; typedef boost::(:link </string>
+ <string>:)_ *] = 2, "No such file or directory" [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-72</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_std_range_max,size_t> std_range_max; typedef boost::(:link </string>
+ <string>:)_ *] = tmp1.txt [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-22</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<struct tag_std_range_index,size_t> std_range_index; template <class T> class my_container { public: size_t size() const; T const & operator[]( size_t i ) const { if( i > size() ) throw boost::(:link </string>
+ <string>:)_ *] = rb@] !!!Why is boost::exception integrated in boost::throw_exception? The boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-54</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)(std::range_error("Index out of range")) << std_range_min(0) << std_range_max(size()) << std_range_index(i); //.... } }; @] The call to (:link </string>
+ <string>:) function predates the Boost Exception library and there has been some concern about its current behavior of injecting boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-54</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)<T> gets us an object of ''unspecified type'' which is guaranteed to derive from both boost::(:link </string>
+ <string>:) as a base of any exception passed to boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) and T. This makes it possible to use (:link </string>
+ <string>:). Such concerns are dictated by the typical strict interpretation of a common principle in C and C++, that users only pay for features they actually use. The problem is that users of Boost Exception can't by themselves cause a library to throw types that derive from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string> mod="/":) to store additional information in the exception object. The exception can be intercepted as T &, so existing exception handling will not break. It can also be intercepted as boost::(:link </string>
+ <string>:), and without this they can't use any of the Boost Exception facilities. For example, if a user wants to use Boost Serialization in a separate thread, it is desirable to be able to transport exceptions emitted by that library into the main thread where they can be analyzed to generate a user-friendly message. This can be easily achieved using boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-21</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) &, so that (:link </string>
+ <string>:), but this requires that Boost Serialization throws exceptions using boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-73</id>
+ <id>-59</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|more information can be added to the exception at a later time:). </string>
- </pair>
- <pair>
+ <string>:). If Boost Serialization calls boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-70</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
<variant>2</variant>
- <string>(:auto !!:) !!!Synopsis (:include synopsis:) </string>
- </pair>
- <pair>
+ <string>:) to throw, this behavior happens automatically and transparently. The cost of this integration is: * In terms of space: a pointer and 3 ints are added to the static size of exception objects. * In terms of speed: the pointer is initialized to null at the point of the throw. * In terms of coupling: about 400 self-contained lines of C++ with no external includes. !!!Why use operator<< overload for adding info to exceptions? Before throwing an object of type that derives from boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include synopsis:) !!!!Requirements: This function must not be called outside of a catch block. !!!!Returns: A pointer of type E to the current exception object, or null if the current exception object can not be converted to E *. !!!!Throws: Nothing. </string>
- </pair>
- <pair>
+ <string>:), it is often desirable to add one or more (:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
- <size>81</size>
<variant>2</variant>
- <string>(:auto !!:) !!!Why doesn't boost::exception derive from std::exception? Despite that (:link </string>
+ <string>:) objects in it. The syntactic sugar provided by (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-38</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|virtual inheritance should be used in deriving from base exception types:), many programmers fail to follow this principle when deriving from std::exception. If boost::(:link </string>
+ <string>:) allows this to be done directly in a throw expression: [@throw error() (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) derives from std::exception, using the (:link </string>
+ <string>|<<:) foo_info(foo) (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-54</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function with such user-defined types would introduce dangerous ambiguity which would break all catch(std::exception &) statements. Of course, boost::(:link </string>
+ <string>|<<:) bar_info(bar);@] which saves typing compared to this possible alternative: [@error e; e.add(foo_info(foo)); e.add(bar_info(bar)); throw e;@] and looks better than something like: [@throw error().add(foo_info(foo)).add(bar_info(bar));@] !!!Why is operator<< allowed to throw? This question is referring to the following issue. Consider this throw statement example: [@throw file_open_error() (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) should not be used to replace std::exception as a base type in exception type hierarchies. Instead, it should be included as a virtual base, in addition to std::exception (which should also be derived virtually.) !!!Why is boost::exception abstract? To prevent exception-neutral contexts from erroneously erasing the type of the original exception when adding (:link </string>
+ <string>|<<:) file_name(fn);@] The intention here is to throw a file_open_error, however if (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) to an active exception object: [@catch( boost::(:link </string>
+ <string> mod="/":) fails to copy the std::string contained in the file_name (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) & e ) { e (:link </string>
- <variant>1</variant>
+ <string>:) wrapper, a std::bad_alloc could propagate instead. This behavior seems undesirable to some programmers. Bjarne Stroustrup, The C++ Programming Language, 3rd Edition, page 371: ->''"Throwing an exception requires an object to throw. A C++ implementation is required to have enough spare memory to be able to throw bad_alloc in case of memory exhaustion. However, it is possible that throwing some other exception will cause memory exhaustion."'' Therefore, the language itself does not guarantee that an attempt to throw an exception is guaranteed to throw an object of the specified type; propagating a std::bad_alloc seems to be a possibility even outside of the scope of Boost Exception. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
+ <size>17</size>
<variant>2</variant>
- <string>|<<:) foo_info(foo); throw e; //Compile error: boost::(:link </string>
+ <string>(:auto !!!:) The following example demonstrates how errno can be stored in exception objects using Boost Exception: [@#include <(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-77</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) is abstract }@] The correct code is: [@catch( boost::(:link </string>
+ <string>:)> #include <iostream> typedef boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) & e ) { e (:link </string>
+ <string>:)<struct tag_my_info,int> my_info; //(1) struct my_error: virtual boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) foo_info(foo); throw; //Okay, re-throwing the original exception object. }@] !!!What is the space overhead of the boost::exception base class? The space overhead for the boost::exception data members is negligible in the context of exception handling. Throwing objects that derive from boost::(:link </string>
+ <string>:), virtual std::exception { }; //(2) void f() { throw my_error() << my_info(42); //(3) }@] First, we instantiate the (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) does not by itself cause dynamic memory allocations. Deriving from boost::(:link </string>
+ <string>:) template using a unique identifier -- tag_my_info, and the type of the info it identifies -- int. This provides compile-time type safety for the various values stored in exception objects. Second, we define class my_error, which derives from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
@@ -7253,279 +7237,295 @@
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) enables any data to be added to exceptions, which usually does allocate memory. However, this memory is reclaimed when the exception has been handled, and since typically user code does not allocate memory during the unrolling of the stack, adding error info to exceptions should not cause memory fragmentation. !!!What is the speed overhead of the boost::exception base class? Throwing objects that derive from boost::exception does not have any speed overhead by itself. Deriving from boost::(:link </string>
+ <string>:). Finally, (3) illustrates how the typedef from (1) can be used with (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) enables any data to be added to exceptions, which internally uses constructs that can be considered quite heavy (such as std::map and std::string.) This is still negligible compared to the typical overhead of throwing and handling of exceptions. !!!Should I use boost::throw_exception or BOOST_THROW_EXCEPTION or just throw? The benefit of calling boost::(:link </string>
+ <string>|operator<<:) to store values in exception objects at the point of the throw. The stored my_info value can be recovered at a later time like this: [@// ...continued void g() { try { f(); } catch( my_error & x ) { if( int const * mi=boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-20</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) instead of using throw directly is that it ensures that the emitted exception derives from boost::(:link </string>
+ <string>:)<my_info>(x) ) std::cerr << "My info: " << *mi; } }@] The (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-20</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) and that it is compatible with boost::(:link </string>
- <variant>1</variant>
+ <string>:) function template is instantiated with the typedef from (1), and is passed an exception object of a polymorphic type. If the exception object contains the requested value, err will point to it; otherwise a null pointer is returned. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-53</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
+ <size>7</size>
<variant>2</variant>
- <string>:). The (:link </string>
+ <string>(:auto !!!:) (:include decl:) !!!!Effects: * Default constructor: initializes an empty boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-66</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) macro also results in a call to boost::(:link </string>
+ <string>:) object. * Copy constructor: initializes a boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), but in addition it records in the exception object the __FILE__ and __LINE__ of the throw, as well as the pretty name of the function that throws. This has virtually no overhead, yet enables boost::(:link </string>
+ <string>:) object which shares ownership with x of all data added through (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-34</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) to compose a more useful, if not user-friendly message. Typical use of boost::(:link </string>
- <variant>1</variant>
+ <string> mod="/":), including data that is added at a future time. !!!!Throws: Nothing. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-34</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
+ <size>7</size>
<variant>2</variant>
- <string>:) is: [@catch( boost::exception & e ) { std::cerr << "OMG!" << boost::diagnostic_information(e); } catch( ... ) { std::cerr << "OMG!!!"; }@] This is a possible message it may display, the first line is only possible if (:link </string>
+ <string>(:auto !!!:) (:include synopsis:) !!!!Requirements: E must be boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-66</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) is used: [@example_io.cpp(70): Throw in function class boost::shared_ptr<struct _iobuf> __cdecl my_fopen(const char *,const char *) Dynamic exception type: class boost::exception_detail::clone_impl<class fopen_error> std::exception::what: example_io error [struct boost::(:link </string>
+ <string>:), or a type that derives (indirectly) from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-32</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = fopen [struct boost::(:link </string>
+ <string>:). !!!!Postcondition: A copy of v is stored into x. If x already contains data of type (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = 2, "No such file or directory" [struct boost::(:link </string>
- <variant>1</variant>
+ <string>:)<Tag,T>, that data is overwritten. Basic exception safety guarantee. !!!!Returns: x. (:include throws:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-72</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
+ <size>11</size>
<variant>2</variant>
- <string>:)_ *] = tmp1.txt [struct boost::(:link </string>
+ <string>!!!!Example: this is a possible output from the (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-22</id>
+ <id>-34</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)_ *] = rb@] !!!Why is boost::exception integrated in boost::throw_exception? The boost::(:link </string>
+ <string>:) function, as used in ''libs/exception/example/example_io.cpp:'' [@example_io.cpp(70): Throw in function class boost::shared_ptr<struct _iobuf> __cdecl my_fopen(const char *,const char *) Dynamic exception type: class boost::exception_detail::clone_impl<struct fopen_error> std::exception::what: example_io error [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-32</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) function predates the Boost Exception library and there has been some concern about its current behavior of injecting boost::(:link </string>
+ <string>:)_ *] = fopen [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) as a base of any exception passed to boost::(:link </string>
+ <string>:)_ *] = 2, "No such file or directory" [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-72</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). Such concerns are dictated by the typical strict interpretation of a common principle in C and C++, that users only pay for features they actually use. The problem is that users of Boost Exception can't by themselves cause a library to throw types that derive from boost::(:link </string>
+ <string>:)_ *] = tmp1.txt [struct boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-22</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), and without this they can't use any of the Boost Exception facilities. For example, if a user wants to use Boost Serialization in a separate thread, it is desirable to be able to transport exceptions emitted by that library into the main thread where they can be analyzed to generate a user-friendly message. This can be easily achieved using boost::(:link </string>
- <variant>1</variant>
+ <string>:)_ *] = rb@] </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-21</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
+ <size>7</size>
<variant>2</variant>
- <string>:), but this requires that Boost Serialization throws exceptions using boost::(:link </string>
+ <string>(:auto !!!:) (:include synopsis:) This type is designed to be used as a standard (:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-59</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:). If Boost Serialization calls boost::(:link </string>
+ <string>:) instance for transporting a relevant errno value in exceptions deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-70</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) to throw, this behavior happens automatically and transparently. The cost of this integration is: * In terms of space: a pointer and 3 ints are added to the static size of exception objects. * In terms of speed: the pointer is initialized to null at the point of the throw. * In terms of coupling: about 400 self-contained lines of C++ with no external includes. !!!Why use operator<< overload for adding info to exceptions? Before throwing an object of type that derives from boost::(:link </string>
+ <string>:). !!!Example: (:include </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-25</id>
+ <id>-60</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:), it is often desirable to add one or more (:link </string>
- <variant>1</variant>
+ <string>:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string>:) objects in it. The syntactic sugar provided by (:link </string>
- <variant>1</variant>
+ <string>(:auto !!!:) (:include synopsis:) !!!!Requirements: This function must not be called outside of a catch block. !!!!Returns: A pointer of type E to the current exception object, or null if the current exception object can not be converted to E *. !!!!Throws: Nothing. </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string>:) allows this to be done directly in a throw expression: [@throw error() (:link </string>
- <variant>1</variant>
+ <string>(:auto !!:) !!!Synopsis (:include synopsis:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
+ <size>1</size>
<variant>2</variant>
- <string>|<<:) foo_info(foo) (:link </string>
- <variant>1</variant>
+ <string>(:auto !!:) !!!Synopsis (:include synopsis:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-17</id>
</shared_ptr>
</weak_ptr>
+ <size>3</size>
<variant>2</variant>
- <string>|<<:) bar_info(bar);@] which saves typing compared to this possible alternative: [@error e; e.add(foo_info(foo)); e.add(bar_info(bar)); throw e;@] and looks better than something like: [@throw error().add(foo_info(foo)).add(bar_info(bar));@] !!!Why is operator<< allowed to throw? This question is referring to the following issue. Consider this throw statement example: [@throw file_open_error() (:link </string>
+ <string>(:auto !!!:) (:include synopsis:) !!!!Effects: Stores a copy of v in the </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-26</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>|<<:) file_name(fn);@] The intention here is to throw a file_open_error, however if (:link </string>
- <variant>1</variant>
+ <string> object. (:include throws:) </string>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
+ <size>7</size>
<variant>2</variant>
- <string> mod="/":) fails to copy the std::string contained in the file_name (:link </string>
+ <string>(:auto !!!:) Deriving from boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:) wrapper, a std::bad_alloc could propagate instead. This behavior seems undesirable to some programmers. Bjarne Stroustrup, The C++ Programming Language, 3rd Edition, page 371: ->''"Throwing an exception requires an object to throw. A C++ implementation is required to have enough spare memory to be able to throw bad_alloc in case of memory exhaustion. However, it is possible that throwing some other exception will cause memory exhaustion."'' Therefore, the language itself does not guarantee that an attempt to throw an exception is guaranteed to throw an object of the specified type; propagating a std::bad_alloc seems to be a possibility even outside of the scope of Boost Exception. </string>
- </pair>
- <pair>
+ <string>:) effectively decouples the semantics of a failure from the information that is relevant to each individual instance of reporting a failure with a given semantic. In other words: with boost::(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-17</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
- <size>3</size>
<variant>2</variant>
- <string>(:auto !!!:) (:include synopsis:) !!!!Effects: Stores a copy of v in the </string>
+ <string>:), what data a given exception object transports depends primarily on the context in which failures are reported (not on its type.) Since exception types need no members, it becomes very natural to throw exceptions that derive from more than one type to indicate multiple appropriate semantics: [@struct exception_base: virtual std::exception, virtual boost::(:link </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-26</id>
+ <id>-25</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string> object. (:include throws:) </string>
+ <string>:) { }; struct io_error: virtual exception_base { }; struct file_error: virtual io_error { }; struct read_error: virtual io_error { }; struct file_read_error: virtual file_error, virtual read_error { };@] Using this approach, exception types become a simple tagging system for categorizing errors and selecting failures in exception handlers. </string>
</pair>
<pair>
<weak_ptr>
@@ -7536,7 +7536,7 @@
</weak_ptr>
<size>1</size>
<variant>2</variant>
- <string>(:auto !!:) !!!Synopsis (:include synopsis:) </string>
+ <string>(:auto !:) This is an alphabetical list of all Boost Exception documentation pages. (:pagelist fmt="index" except_tags="index noindex" mod="w":) </string>
</pair>
<pair>
<weak_ptr>
@@ -7608,7 +7608,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -7951,7 +7951,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -7998,7 +7998,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8016,7 +8016,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8034,7 +8034,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8052,7 +8052,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8070,7 +8070,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8097,7 +8097,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8160,7 +8160,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8300,7 +8300,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-5</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8318,7 +8318,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8336,7 +8336,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8399,7 +8399,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8507,7 +8507,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8570,7 +8570,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8579,7 +8579,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-18</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8626,7 +8626,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8752,7 +8752,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-5</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8790,7 +8790,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -8799,7 +8799,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -9060,7 +9060,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -9069,7 +9069,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -9237,7 +9237,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -10002,7 +10002,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -10047,7 +10047,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-5</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -10783,7 +10783,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -11028,7 +11028,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11037,7 +11037,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11046,7 +11046,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11055,7 +11055,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11064,16 +11064,18 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <size>1</size>
+ <variant>2</variant>
+ <string>!!!!Throws: std::bad_alloc, or any exception emitted by the T copy constructor. </string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11082,18 +11084,16 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>!!!!Throws: std::bad_alloc, or any exception emitted by the T copy constructor. </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11120,21 +11120,21 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-17</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <size>1</size>
+ <variant>2</variant>
+ <string>!!!!Throws: Any exception emitted by v's copy constructor.</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-17</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
- <variant>2</variant>
- <string>!!!!Throws: Any exception emitted by v's copy constructor.</string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -11732,7 +11732,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11741,7 +11741,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-8</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11750,25 +11750,45 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-9</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-10</id>
+ </shared_ptr>
+ </weak_ptr>
+ <size>0</size>
+ </pair>
+ <pair>
+ <weak_ptr>
+ <expired>0</expired>
+ <shared_ptr>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
- </pair>
- <pair>
+ <size>3</size>
+ <variant>2</variant>
+ <string>`#include <(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-9</id>
+ <id>-57</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <variant>2</variant>
+ <string>:)>\\ [@namespace boost { (:include decl pre_indent="4":) }@] </string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-10</id>
+ <id>-12</id>
</shared_ptr>
</weak_ptr>
<size>0</size>
@@ -11811,25 +11831,16 @@
</weak_ptr>
<size>3</size>
<variant>2</variant>
- <string>`#include <(:link </string>
+ <string>`#include <</string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-57</id>
+ <id>-55</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>:)>\\ [@namespace boost { (:include decl pre_indent="4":) }@] </string>
- </pair>
- <pair>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-11</id>
- </shared_ptr>
- </weak_ptr>
- <size>0</size>
+ <string>> [@namespace boost { (:include decl pre_indent="4":) }@] </string>
</pair>
<pair>
<weak_ptr>
@@ -11838,38 +11849,38 @@
<id>-15</id>
</shared_ptr>
</weak_ptr>
- <size>1</size>
+ <size>5</size>
<variant>2</variant>
- <string>[@namespace boost { (:include api pre_indent="4":) }@] </string>
- </pair>
- <pair>
+ <string>[@#include <(:link </string>
+ <variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
<id>-16</id>
</shared_ptr>
</weak_ptr>
- <size>3</size>
<variant>2</variant>
- <string>`#include <</string>
+ <string>:)> namespace boost { (:include </string>
<variant>1</variant>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-55</id>
+ <id>-21</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
- <string>> [@namespace boost { (:include decl pre_indent="4":) }@] </string>
+ <string> decl pre_indent="4":) (:include api pre_indent="4":) }@] </string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-12</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
- <size>0</size>
+ <size>1</size>
+ <variant>2</variant>
+ <string>[@namespace boost { (:include api pre_indent="4":) }@] </string>
</pair>
<pair>
<weak_ptr>
@@ -11895,30 +11906,19 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
- </shared_ptr>
- </weak_ptr>
- <size>5</size>
- <variant>2</variant>
- <string>[@#include <(:link </string>
- <variant>1</variant>
- <weak_ptr>
- <expired>0</expired>
- <shared_ptr>
- <id>-15</id>
+ <id>-6</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string>:)> namespace boost { (:include </string>
- <variant>1</variant>
+ <size>0</size>
+ </pair>
+ <pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-21</id>
+ <id>-18</id>
</shared_ptr>
</weak_ptr>
- <variant>2</variant>
- <string> decl pre_indent="4":) (:include api pre_indent="4":) }@] </string>
+ <size>0</size>
</pair>
<pair>
<weak_ptr>
@@ -12112,7 +12112,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12152,7 +12152,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12315,7 +12315,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12422,7 +12422,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12482,7 +12482,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12689,7 +12689,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12698,7 +12698,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12718,7 +12718,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -12974,7 +12974,7 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<variant>2</variant>
@@ -13011,9 +13011,6 @@
<id>-5</id>
</shared_ptr>
<shared_ptr>
- <id>-6</id>
- </shared_ptr>
- <shared_ptr>
<id>-7</id>
</shared_ptr>
<shared_ptr>
@@ -13026,13 +13023,16 @@
<id>-10</id>
</shared_ptr>
<shared_ptr>
- <id>-13</id>
+ <id>-11</id>
</shared_ptr>
<shared_ptr>
- <id>-14</id>
+ <id>-12</id>
</shared_ptr>
<shared_ptr>
- <id>-11</id>
+ <id>-13</id>
+ </shared_ptr>
+ <shared_ptr>
+ <id>-14</id>
</shared_ptr>
<shared_ptr>
<id>-15</id>
@@ -13041,10 +13041,10 @@
<id>-16</id>
</shared_ptr>
<shared_ptr>
- <id>-12</id>
+ <id>-17</id>
</shared_ptr>
<shared_ptr>
- <id>-17</id>
+ <id>-6</id>
</shared_ptr>
<shared_ptr>
<id>-18</id>
@@ -13297,7 +13297,7 @@
</path>
</file>
<shared_ptr>
- <id>-8</id>
+ <id>-18</id>
</shared_ptr>
</pair>
<pair>
@@ -13342,7 +13342,7 @@
</path>
</file>
<shared_ptr>
- <id>-10</id>
+ <id>-5</id>
</shared_ptr>
</pair>
<pair>
@@ -13372,7 +13372,7 @@
</path>
</file>
<shared_ptr>
- <id>-9</id>
+ <id>-6</id>
</shared_ptr>
</pair>
<pair>
@@ -13387,7 +13387,7 @@
</path>
</file>
<shared_ptr>
- <id>-12</id>
+ <id>-8</id>
</shared_ptr>
</pair>
<pair>
@@ -13484,7 +13484,7 @@
</path>
</file>
<shared_ptr>
- <id>-18</id>
+ <id>-15</id>
</shared_ptr>
</pair>
<pair>
@@ -13628,29 +13628,189 @@
</path>
</file>
<shared_ptr>
- <id>-58</id>
+ <id>-58</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>1</size>
+ <strong>4D7009F0868C1DF4898EC6ECF9AD2CFEA98E8653B01B066106761807405D4C22</strong>
+ <weak>1416707852</weak>
+ <size>3107</size>
+ <position>527</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/get_error_info.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-51</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>1</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-74</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>3</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
+ <weak>4056200131</weak>
+ <size>2307</size>
+ <position>4436</position>
+ <strong>A94129EFD6ABBDDCD4CFDB671821F7DA103B2EA4455CF39E783D333C236D1C41</strong>
+ <weak>1035445969</weak>
+ <size>595</size>
+ <position>204</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-10</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>3</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
+ <weak>4056200131</weak>
+ <size>2307</size>
+ <position>4436</position>
+ <strong>28ACC7E8903AFA473B656DAD74C22C3F675AFCCA871D81AB3AB7742FDF5F1E48</strong>
+ <weak>2824899226</weak>
+ <size>2163</size>
+ <position>145</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-25</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>2</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>17E691632123EB67BA67D590B49EB8094F462F5A10A66A1C5438E1867EF1478E</strong>
+ <weak>765399792</weak>
+ <size>77</size>
+ <position>6878</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-67</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
+ <size>2</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
+ <position>527</position>
+ <strong>DF9EA87B0140AACF4422F1B76F6A6A409C15F32858BBBA85A35981A824C56BA9</strong>
+ <weak>1137981799</weak>
+ <size>192</size>
+ <position>11766</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/exception.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-59</id>
</shared_ptr>
</pair>
<pair>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>4D7009F0868C1DF4898EC6ECF9AD2CFEA98E8653B01B066106761807405D4C22</strong>
- <weak>1416707852</weak>
- <size>3107</size>
+ <size>2</size>
+ <strong>EFEF19E7D10F02079DA9799E42DA1415CA0C815E964E88CF1A8896D49C81EC22</strong>
+ <weak>2916767056</weak>
+ <size>11964</size>
<position>527</position>
+ <strong>F3FB15CD82336271C6E875BC620385322777D16F0B7C233300783CE35710CCBF</strong>
+ <weak>3292878997</weak>
+ <size>282</size>
+ <position>9272</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/get_error_info.hpp</string>
+ <string>../../../../boost/exception/exception.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
<shared_ptr>
- <id>-51</id>
+ <id>-54</id>
</shared_ptr>
</pair>
<pair>
@@ -13764,7 +13924,7 @@
</path>
</file>
<shared_ptr>
- <id>-16</id>
+ <id>-14</id>
</shared_ptr>
</pair>
<pair>
@@ -13786,7 +13946,7 @@
</path>
</file>
<shared_ptr>
- <id>-5</id>
+ <id>-12</id>
</shared_ptr>
</pair>
<pair>
@@ -13840,6 +14000,28 @@
<pair>
<hook>
<stream_hook_path>
+ <size>1</size>
+ <strong>195FF369BA559E3C0080F75321794B4808B6A278D4DEF8AEDBD9FCEBCE69C548</strong>
+ <weak>458631219</weak>
+ <size>2145</size>
+ <position>321</position>
+ </stream_hook_path>
+ </hook>
+ <file>
+ <path>
+ <empty>0</empty>
+ <string>../../../../boost/exception/info_tuple.hpp</string>
+ <type>0</type>
+ <base>0</base>
+ </path>
+ </file>
+ <shared_ptr>
+ <id>-30</id>
+ </shared_ptr>
+ </pair>
+ <pair>
+ <hook>
+ <stream_hook_path>
<size>2</size>
<strong>64A91889D0B296F554DB50496EF8036489999CD3C9A8BC181CCE1C1FD37EBB4B</strong>
<weak>265554338</weak>
@@ -14146,7 +14328,7 @@
</path>
</file>
<shared_ptr>
- <id>-14</id>
+ <id>-11</id>
</shared_ptr>
</pair>
<pair>
@@ -14460,7 +14642,7 @@
</path>
</file>
<shared_ptr>
- <id>-7</id>
+ <id>-9</id>
</shared_ptr>
</pair>
<pair>
@@ -14618,45 +14800,49 @@
<pair>
<hook>
<stream_hook_path>
- <size>1</size>
- <strong>AA363B3E599C558409A17235E029C4F635E4FDE629F763F661BDA7FA5B2D99C2</strong>
- <weak>1494903480</weak>
- <size>325</size>
- <position>1300</position>
+ <size>2</size>
+ <strong>1B4417301AE3C0338C22E6D497391F51ABD459E521E7DFCE59A6EEC1372D33C2</strong>
+ <weak>202224383</weak>
+ <size>1766</size>
+ <position>600</position>
+ <strong>E0A17503B42EE12F31548A7D20F89916D734CE88B30A1BF6F9FC2D1F83A8B6F4</strong>
+ <weak>3410340567</weak>
+ <size>1734</size>
+ <position>26</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/throw_exception.hpp</string>
+ <string>../../../../boost/exception/info_tuple.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
<shared_ptr>
- <id>-66</id>
+ <id>-42</id>
</shared_ptr>
</pair>
<pair>
<hook>
<stream_hook_path>
<size>1</size>
- <strong>9A6D5598D65F1C1B5F913007D1CD1A814F3CDAD07D4AF8C468A0716059B2F7CC</strong>
- <weak>3552995087</weak>
- <size>1405</size>
- <position>527</position>
+ <strong>AA363B3E599C558409A17235E029C4F635E4FDE629F763F661BDA7FA5B2D99C2</strong>
+ <weak>1494903480</weak>
+ <size>325</size>
+ <position>1300</position>
</stream_hook_path>
</hook>
<file>
<path>
<empty>0</empty>
- <string>../../../../boost/exception/info_tuple.hpp</string>
+ <string>../../../../boost/throw_exception.hpp</string>
<type>0</type>
<base>0</base>
</path>
</file>
<shared_ptr>
- <id>-30</id>
+ <id>-66</id>
</shared_ptr>
</pair>
<pair>
@@ -14689,166 +14875,6 @@
<hook>
<stream_hook_path>
<size>1</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-74</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>3</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
- <weak>4056200131</weak>
- <size>2307</size>
- <position>4436</position>
- <strong>A94129EFD6ABBDDCD4CFDB671821F7DA103B2EA4455CF39E783D333C236D1C41</strong>
- <weak>1035445969</weak>
- <size>595</size>
- <position>204</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-6</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>3</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>E0D734FE11CFB52F1BBF35C31E84A098AC93881DEE300CDBE3F9B772F75D9B2F</strong>
- <weak>4056200131</weak>
- <size>2307</size>
- <position>4436</position>
- <strong>28ACC7E8903AFA473B656DAD74C22C3F675AFCCA871D81AB3AB7742FDF5F1E48</strong>
- <weak>2824899226</weak>
- <size>2163</size>
- <position>145</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-25</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>17E691632123EB67BA67D590B49EB8094F462F5A10A66A1C5438E1867EF1478E</strong>
- <weak>765399792</weak>
- <size>77</size>
- <position>6878</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-67</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>DF9EA87B0140AACF4422F1B76F6A6A409C15F32858BBBA85A35981A824C56BA9</strong>
- <weak>1137981799</weak>
- <size>192</size>
- <position>11758</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-59</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>2</size>
- <strong>088B53C0FBDB55F55DCF1296B3206D748A2B2453CCFC3DAA2AA0FADD930561E7</strong>
- <weak>3582349865</weak>
- <size>11956</size>
- <position>527</position>
- <strong>F3FB15CD82336271C6E875BC620385322777D16F0B7C233300783CE35710CCBF</strong>
- <weak>3292878997</weak>
- <size>282</size>
- <position>9272</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/exception.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-54</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>1</size>
<strong>C95CEF2E9D0BAA1E950509471062916DB849A46A19F7692BA478030E79B338EB</strong>
<weak>1917376632</weak>
<size>706</size>
@@ -14864,7 +14890,7 @@
</path>
</file>
<shared_ptr>
- <id>-11</id>
+ <id>-7</id>
</shared_ptr>
</pair>
<pair>
@@ -14874,7 +14900,7 @@
<strong>9A4ECF9A49A73AED83C1565CB8C67AE1519E8AFE6818F968B4C4733CB9E86CEF</strong>
<weak>1615599655</weak>
<size>68</size>
- <position>227</position>
+ <position>321</position>
<strong>34F0583BC8DE767CE2D79721E1F956895E43E5397473B1050F59BE7E26C773DB</strong>
<weak>805836816</weak>
<size>66</size>
@@ -14890,33 +14916,7 @@
</path>
</file>
<shared_ptr>
- <id>-15</id>
- </shared_ptr>
- </pair>
- <pair>
- <hook>
- <stream_hook_path>
- <size>2</size>
- <strong>F7633FDCF6615C0199645701EE6E7ACE5CBCD7A7CF6838573791E91ABB3C09F2</strong>
- <weak>1668435395</weak>
- <size>1332</size>
- <position>600</position>
- <strong>A1F443AF571973A12005D2F7D4AE09A32AAF686FEEAE272EC21512A65EB943E8</strong>
- <weak>3879093659</weak>
- <size>1300</size>
- <position>26</position>
- </stream_hook_path>
- </hook>
- <file>
- <path>
- <empty>0</empty>
- <string>../../../../boost/exception/info_tuple.hpp</string>
- <type>0</type>
- <base>0</base>
- </path>
- </file>
- <shared_ptr>
- <id>-42</id>
+ <id>-16</id>
</shared_ptr>
</pair>
<pair>
@@ -14992,16 +14992,16 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-6</id>
+ <id>-7</id>
</shared_ptr>
</weak_ptr>
- <string>function</string>
+ <string>tutorial</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-7</id>
+ <id>-9</id>
</shared_ptr>
</weak_ptr>
<string>noalso noindex tutorial</string>
@@ -15010,43 +15010,43 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-8</id>
+ <id>-10</id>
</shared_ptr>
</weak_ptr>
- <string></string>
+ <string>function</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-13</id>
+ <id>-11</id>
</shared_ptr>
</weak_ptr>
- <string>error_info_instance noalso type</string>
+ <string>error_info free function</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-14</id>
+ <id>-13</id>
</shared_ptr>
</weak_ptr>
- <string>error_info free function</string>
+ <string>error_info_instance noalso type</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-11</id>
+ <id>-14</id>
</shared_ptr>
</weak_ptr>
- <string>tutorial</string>
+ <string>function</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-15</id>
+ <id>-16</id>
</shared_ptr>
</weak_ptr>
<string></string>
@@ -15055,19 +15055,19 @@
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-16</id>
+ <id>-17</id>
</shared_ptr>
</weak_ptr>
- <string>function</string>
+ <string>function member</string>
</pair>
<pair>
<weak_ptr>
<expired>0</expired>
<shared_ptr>
- <id>-17</id>
+ <id>-18</id>
</shared_ptr>
</weak_ptr>
- <string>function member</string>
+ <string></string>
</pair>
<pair>
<weak_ptr>
Modified: branches/quickbook-dev/libs/filesystem/v3/doc/reference.html
==============================================================================
--- branches/quickbook-dev/libs/filesystem/v3/doc/reference.html (original)
+++ branches/quickbook-dev/libs/filesystem/v3/doc/reference.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -5,22 +5,40 @@
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Filesystem V3 Reference
-</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<title>
+
+ Filesystem V3 Reference
+ </title>
<style type="text/css">
- pre {background-color:#D7EEFF}
- body
- {
- font-family: sans-serif;
- max-width : 8.5in;
- margin: 1em;
- }
+/*
+
+ © Copyright Beman Dawes, 2007
+
+ Distributed under the Boost Software License, Version 1.0.
+ See www.boost.org/LICENSE_1_0.txt
+
+*/
+
+body {
+ font-family: sans-serif;
+ margin: 1em;
+ max-width : 8.5in;
+ }
+
+table { margin: 0.5em; }
+
+pre { background-color:#D7EEFF }
+
+ins { background-color:#A0FFA0 }
+del { background-color:#FFA0A0 }
+
+/*** end ***/
</style>
</head>
<body>
+
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="277">
@@ -51,6 +69,8 @@
<h1>Reference Documentation</h1>
+
+
<h2><a name="TOC">Table of Contents</a></h2>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
@@ -81,6 +101,7 @@
path
decomposition<br>
path
query<br>
path
iterators<br>
+
path
deprecated functions<br>
path
non-member functions<br>
path
inserters and extractors<br>
@@ -135,7 +156,7 @@
  is_regular_file<br>
  is_symlink<br>
  last_write_time<br>
- permissions<br>
+ permissions<br>
read_symlink<br>
  remove<br>
  remove_all<br>
@@ -158,15 +179,80 @@
</tr>
</table>
+
<h2><a name="Introduction">Introduction</a></h2>
<p>This reference documentation describes components that C++ programs may use
to perform operations involving file systems, including paths, regular files,
and directories.</p>
+
+
+<p>This reference documentation describes components that perform operations on file systems and
+their components, such as paths, regular files, and directories.</p>
+<p dir="ltr">Operating systems such as <i>Linux, MAC OS, UNIX</i>, and <i>Windows</i> are
+mentioned in this reference documentation for purposes of illustration or to give guidance to
+implementers. No slight to other operating systems is implied or intended.</p>
+<p><span style="background-color: #E0E0E0">Footnote:</span> Linux® is a
+registered trademark of Linus Torvalds.</p>
+<p><a name="Footnote-3"><span style="background-color: #E0E0E0">Footnote</span></a><span style="background-color: #E0E0E0">:</span> <i>MAC OS</i>® is a registered trademark
+of Apple Inc.</p>
+<p><span style="background-color: #E0E0E0">Footnote:</span> <i>UNIX</i>® is a
+registered trademark of The Open Group. </p>
+<p><a name="Footnote-4"><span style="background-color: #E0E0E0">Footnote</span></a><span style="background-color: #E0E0E0">:</span> <i>Windows</i>® is a registered
+trademark of Microsoft Corporation.</p>
+
+<h2><a name="Conformance">Conformance</a></h2>
+<p>Behavior is sometimes specified by reference to ISO/IEC 9945:2003, <i>
+POSIX</i>. How such behavior is actually implemented is unspecified.</p>
+<blockquote>
+<p>[<i>Note:</i> This constitutes an "as if" rule for implementation of
+operating system dependent behavior. Presumably implementations will usually call native
+operating system API's. <i>--end note</i>]</p>
+</blockquote>
+<p>Implementations are encouraged, but not required, to support such behavior
+
+as it is defined by <i>POSIX</i>. Implementations shall document any
+behavior that differs from the <i>POSIX</i> defined behavior. Implementations that do not support exact <i>POSIX</i> behavior are
+encouraged to provide behavior as close to <i>POSIX</i> behavior as is reasonable given the
+limitations of actual operating systems and file systems. If an implementation cannot provide any
+reasonable behavior, the implementation shall report an error in an
+implementation-defined manner.</p>
+<blockquote>
+<p>[<i>Note:</i> Such errors might be reported by an #error directive, a <code>
+static_assert</code>, a <code>filesystem_error</code> exception, a special
+return value, or some other manner. <i>--end note</i>]</p>
+</blockquote>
+<p>Implementations are not required to provide behavior that is not supported by
+a particular file system.</p>
+<blockquote>
+<p>[<i>Example:</i> The <a href="http://en.wikipedia.org/wiki/FAT_filesystem">
+FAT file system</a> used by some memory cards, camera memory, and floppy discs
+does not support hard links, symlinks, and many other features of more capable
+file systems. Implementations are only required to support the FAT features
+supported by the host operating system. <i>-- end example</i>]</p>
+</blockquote>
+<p>Specific operating systems such as <i>OpenVMS</i>,
+<i>UNIX</i>, and <i>Windows</i> are mentioned only for purposes of illustration or to
+give guidance to users and implementers. No slight to other operating systems is implied
+or intended. When unlikely to cause confusion, the term <i>POSIX</i> is
+sometimes used to refer to "POSIX-compliant operating systems".</p>
+<p>The behavior of functions described in this
+reference
+may differ from their specification in
+the presence of file system races. No diagnostic is required.</p>
+<p>If the possibility of a file system race would make it unreliable for a program to
+test for a precondition before calling a function described in this reference documentation, <i>
+Requires</i> is not specified for the condition. Instead, the condition is
+specified as a <i>Throws</i> condition.</p>
+<blockquote>
+<p>[<i>Note:</i> As a design practice, preconditions are not specified when it
+is unreasonable for a program to detect them prior to calling the function. <i>
+-- end note</i>]</p>
+</blockquote>
<h2><a name="Definitions">Definitions</a></h2>
<p>The following definitions shall apply throughout this reference documentation:</p>
<p><i><b><a name="File">File</a>:</b> </i>An object that can be written to, or read from, or both. A file
-has certain attributes, including type. Common types of files include regular files
+has certain attributes, including type. File types include regular files
and directories. Other types of files, such as symbolic links, may be supported by the
implementation.</p>
<p><b><i><a name="File-system">File system</a>:</i></b> A collection of files and certain of their attributes.</p>
@@ -189,7 +275,7 @@
A pathname is the concrete representation of a path. <i>--end note</i>]</p>
<p><b><i><a name="Absolute-path">Absolute path</a>:</i></b> A path that
unambiguously
-identifies the location of a file within a filesystem without reference to an
+identifies the location of a file within a file system without reference to an
additional starting location. The format is implementation defined. </p>
<blockquote>
<p><i>[Note:</i> For POSIX-like implementations, including<b> </b>Unix
@@ -201,16 +287,15 @@
specifier followed by a slash, or begin with two slashes, are absolute paths. <i>--end
note]</i></p>
</blockquote>
-<p><b><a name="Relative-path">Relative path</a>:</b> A path that only
+<p><i><b><a name="Relative-path">Relative path</a>:</b></i> A path that only
unambiguously
identifies the location of a file within a filesystem when resolved relative to
a starting location. The format is implementation defined. [<i>Note:</i>
Paths "." and ".." are considered to be relative paths. <i>--end note</i>]</p>
-<p><b><a name="Canonical-path">Canonical path</a>:</b> An absolute path that has
+<p><i><b><a name="Canonical-path">Canonical path</a>:</b></i> An absolute path that has
no elements which are symbolic links, and no dot or dot dot elements.</p>
<p><i><b><a name="Pathname">Pathname</a>:</b> </i>A character string that represents a
-path. Pathnames are formatted according to the generic pathname format or the
-implementation defined
+path. Pathnames are formatted according to the generic pathname format or an implementation defined
native pathname format.</p>
<p><b><i><a name="generic-pathname-format">Generic pathname format:</a></i></b></p>
<blockquote>
@@ -222,7 +307,7 @@
implementation-defined</i></p>
<blockquote>
<blockquote>
-<p>[<i>Note:</i> Most POSIX and Windows based operating system define a name
+<p>[<i>Note:</i> Most POSIX and Windows based operating systems define a name
beginning with two slashes (or backslashes, for Windows) as a root-name
identifying network locations. Windows defines a single letter followed by a
<code>":"</code> as a root-name identifying a disc drive. <i>--end note</i>]</p>
@@ -276,255 +361,207 @@
If the file pointed to does not exist, the symbolic link is said to be a
"dangling" symbolic link.<i> -- end note</i>]<i> </i></p>
</blockquote>
-<p><b><i><a name="Race-condition">Race condition</a>:</i></b> The condition that occurs
+<p><b><i><a name="Race-condition">File system race</a>:</i></b> The condition that occurs
when multiple threads, processes, or computers interleave access and
modification of
the same object within a file system.</p>
<p><b><i><a name="Dot">Dot</a>, Dot Dot:</i></b> Synonyms for the filenames <code>"."</code>
and <code>".."</code>, respectively. The dot filename names the current
directory. The dot dot filename names the parent directory.</p>
-<h2><a name="Conformance">Conformance</a></h2>
-<p>Behavior is sometimes specified by reference to ISO/IEC 9945:2003, <i>
-POSIX</i>. How such behavior is actually implemented is unspecified.</p>
-<blockquote>
-<p>[<i>Note:</i> This constitutes an "as if" rule for implementation of
-operating system dependent behavior. Presumably implementations will usually call native
-operating system API's. <i>--end note</i>]</p>
-</blockquote>
-<p>Implementations are encouraged, but not required, to support such behavior
-
-as it is defined by <i>POSIX</i>. Implementations shall document any
-behavior that differs from the <i>POSIX</i> defined behavior. Implementations that do not support exact <i>POSIX</i> behavior are
-encouraged to provide behavior as close to <i>POSIX</i> behavior as is reasonable given the
-limitations of actual operating systems and file systems. If an implementation cannot provide any
-reasonable behavior, the implementation shall report an error in an
-implementation-defined manner.</p>
-<blockquote>
-<p>[<i>Note:</i> Such errors might be reported by an #error directive, a <code>
-static_assert</code>, a <code>filesystem_error</code> exception, a special
-return value, or some other manner. <i>--end note</i>]</p>
-</blockquote>
-<p>Implementations are not required to provide behavior that is not supported by
-a particular file system.</p>
-<blockquote>
-<p>[<i>Example:</i> The <a href="http://en.wikipedia.org/wiki/FAT_filesystem">
-FAT file system</a> used by some memory cards, camera memory, and floppy discs
-does not support hard links, symlinks, and many other features of more capable
-file systems. Implementations are only required to support the FAT features
-supported by the host operating system. <i>-- end example</i>]</p>
-</blockquote>
-<p>Specific operating systems such as <i>OpenMVS</i>,
-<i>UNIX</i>, and <i>Windows</i> are mentioned only for purposes of illustration or to
-give guidance to users and implementers. No slight to other operating systems is implied
-or intended. When unlikely to cause confusion, the term <i>POSIX</i> is
-sometimes used to refer to "POSIX-compliant operating systems".</p>
-<p>The behavior of functions described in this
-reference
-may not be achieved in
-the presence of race conditions. No diagnostic is required.</p>
-<p>If the possibility of race conditions would make it unreliable for a program to
-test for a precondition before calling a function described in this clause, <i>
-Requires</i> is not specified for the condition. Instead, the condition is
-specified as a <i>Throws</i> condition.</p>
-<blockquote>
-<p>[<i>Note:</i> As a design practice, preconditions are not specified when it
-is unreasonable for a program to detect them prior to calling the function. <i>
--- end note</i>]</p>
-</blockquote>
<h2><a name="Header-filesystem-synopsis">Header <code><boost/filesystem.hpp></code> synopsis</a></h2>
-<pre> namespace boost
+<pre>namespace boost
+{
+ namespace filesystem
{
- namespace filesystem
- {
- class path;
+ class path;
- void swap(path& lhs, path& rhs);
- bool lexicographical_compare(path::iterator first1, path::iterator last1,
- path::iterator first2, path::iterator last2);
- std::size_t hash_value(const path& p);
+ void swap(path& lhs, path& rhs);
+ bool lexicographical_compare(path::iterator first1, path::iterator last1,
+ path::iterator first2, path::iterator last2);
+ std::size_t hash_value(const path& p);
- bool operator==(const path& lhs, const path& rhs);
- bool operator!=(const path& lhs, const path& rhs);
- bool operator< (const path& lhs, const path& rhs);
- bool operator<=(const path& lhs, const path& rhs);
- bool operator> (const path& lhs, const path& rhs);
- bool operator>=(const path& lhs, const path& rhs);
+ bool operator==(const path& lhs, const path& rhs);
+ bool operator!=(const path& lhs, const path& rhs);
+ bool operator< (const path& lhs, const path& rhs);
+ bool operator<=(const path& lhs, const path& rhs);
+ bool operator> (const path& lhs, const path& rhs);
+ bool operator>=(const path& lhs, const path& rhs);
- path operator/ (const path& lhs, const path& rhs);
+ path operator/ (const path& lhs, const path& rhs);
- std::ostream& operator<<( std::ostream& os, const path& p );
- std::wostream& operator<<( std::wostream& os, const path& p );
- std::istream& operator>>( std::istream& is, path& p );
- std::wistream& operator>>( std::wistream& is, path& p )
+ std::ostream& operator<<( std::ostream& os, const path& p );
+ std::wostream& operator<<( std::wostream& os, const path& p );
+ std::istream& operator>>( std::istream& is, path& p );
+ std::wistream& operator>>( std::wistream& is, path& p )
- class filesystem_error;
- class directory_entry;
+ class filesystem_error;
+ class directory_entry;
- class directory_iterator;
+ class directory_iterator;
- class recursive_directory_iterator;
+ class recursive_directory_iterator;
- enum <a name="file_type" href="#Enum-file_type">file_type</a>
- {
- status_error, file_not_found, regular_file, directory_file,
- symlink_file, block_file, character_file, fifo_file, socket_file,
- type_unknown
- };
-
- enum perms
- {
- no_perms,
- owner_read, owner_write, owner_exe, owner_all,
- group_read, group_write, group_exe, group_all,
- others_read, others_write, others_exe, others_all, all_all,
- set_uid_on_exe, set_gid_on_exe, sticky_bit,
- perms_mask, perms_not_known,
- add_perms, remove_perms, symlink_perms
- };
+ enum <a name="file_type" href="#Enum-file_type">file_type</a>
+ {
+ status_error, file_not_found, regular_file, directory_file,
+ symlink_file, block_file, character_file, fifo_file, socket_file,
+ type_unknown
+ };
- class file_status;
+ enum perms
+ {
+ no_perms,
+ owner_read, owner_write, owner_exe, owner_all,
+ group_read, group_write, group_exe, group_all,
+ others_read, others_write, others_exe, others_all, all_all,
+ set_uid_on_exe, set_gid_on_exe, sticky_bit,
+ perms_mask, perms_not_known,
+ add_perms, remove_perms, symlink_perms
+ };
- struct <a name="space_info">space_info</a> // returned by space function
- {
- uintmax_t capacity;
- uintmax_t free;
- uintmax_t available; // free space available to a non-privileged process
- };
+ class file_status;
- BOOST_SCOPED_ENUM_START(<a name="copy_option">copy_option</a>)
- {
- none
- fail_if_exists = none,
- overwrite_if_exists
- };
- BOOST_SCOPED_ENUM_END
+ struct <a name="space_info">space_info</a> // returned by space function
+ {
+ uintmax_t capacity;
+ uintmax_t free;
+ uintmax_t available; // free space available to a non-privileged process
+ };
- BOOST_SCOPED_ENUM_START(<a name="symlink_option">symlink_option</a>)
- {
- none
- no_recurse = none,
- recurse
- };
- BOOST_SCOPED_ENUM_END
+ enum class <a name="copy_option">copy_option</a>
+ {
+ none
+ fail_if_exists = none,
+ overwrite_if_exists
+ };
- // operational functions
+ enum class <a name="symlink_option">symlink_option</a>
+ {
+ none
+ no_recurse = none,
+ recurse
+ };
+
+ // operational functions
- path absolute(const path& p, const path& base=current_path());
+ path absolute(const path& p, const path& base=current_path());
- path canonical(const path& p, const path& base = current_path());
- path canonical(const path& p, system::error_code& ec);
- path canonical(const path& p, const path& base, system::error_code& ec);
+ path canonical(const path& p, const path& base = current_path());
+ path canonical(const path& p, system::error_code& ec);
+ path canonical(const path& p, const path& base, system::error_code& ec);
- void copy(const path& from, const path& to);
- void copy(const path& from, const path& to, system::error_code& ec);
+ void copy(const path& from, const path& to);
+ void copy(const path& from, const path& to, system::error_code& ec);
- void copy_directory(const path& from, const path& to);
- void copy_directory(const path& from, const path& to, system::error_code& ec);
+ void copy_directory(const path& from, const path& to);
+ void copy_directory(const path& from, const path& to, system::error_code& ec);
- void copy_file(const path& from, const path& to);
- void copy_file(const path& from, const path& to, system::error_code& ec);
- void copy_file(const path& from, const path& to, BOOST_SCOPED_ENUM(copy_option) option);
- void copy_file(const path& from, const path& to, BOOST_SCOPED_ENUM(copy_option) option,
- system::error_code& ec);
+ void copy_file(const path& from, const path& to);
+ void copy_file(const path& from, const path& to, system::error_code& ec);
+ void copy_file(const path& from, const path& to, copy_option option);
+ void copy_file(const path& from, const path& to, copy_option option,
+ system::error_code& ec);
- void copy_symlink(const path& existing_symlink, const path& new_symlink);
- void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec);
+ void copy_symlink(const path& existing_symlink, const path& new_symlink);
+ void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec);
- bool create_directories(const path& p);
- bool create_directories(const path& p, system::error_code& ec);
+ bool create_directories(const path& p);
+ bool create_directories(const path& p, system::error_code& ec);
- bool create_directory(const path& p);
- bool create_directory(const path& p, system::error_code& ec);
+ bool create_directory(const path& p);
+ bool create_directory(const path& p, system::error_code& ec);
- void create_directory_symlink(const path& to, const path& new_symlink);
- void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);
+ void create_directory_symlink(const path& to, const path& new_symlink);
+ void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);
- void create_hard_link(const path& to, const path& new_hard_link);
- void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec);
+ void create_hard_link(const path& to, const path& new_hard_link);
+ void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec);
- void create_symlink(const path& to, const path& new_symlink);
- void create_symlink(const path& to, const path& new_symlink, system::error_code& ec);
+ void create_symlink(const path& to, const path& new_symlink);
+ void create_symlink(const path& to, const path& new_symlink, system::error_code& ec);
- path current_path();
- path current_path(system::error_code& ec);
- void current_path(const path& p);
- void current_path(const path& p, system::error_code& ec);
+ path current_path();
+ path current_path(system::error_code& ec);
+ void current_path(const path& p);
+ void current_path(const path& p, system::error_code& ec);
- bool exists(file_status s);
- bool exists(const path& p);
- bool exists(const path& p, system::error_code& ec);
+ bool exists(file_status s) noexcept;
+ bool exists(const path& p);
+ bool exists(const path& p, system::error_code& ec) noexcept;
- bool equivalent(const path& p1, const path& p2);
- bool equivalent(const path& p1, const path& p2, system::error_code& ec);
+ bool equivalent(const path& p1, const path& p2);
+ bool equivalent(const path& p1, const path& p2, system::error_code& ec);
- uintmax_t file_size(const path& p);
- uintmax_t file_size(const path& p, system::error_code& ec);
- uintmax_t hard_link_count(const path& p);
- uintmax_t hard_link_count(const path& p, system::error_code& ec);
+ uintmax_t file_size(const path& p);
+ uintmax_t file_size(const path& p, system::error_code& ec);
- const path& initial_path();
- const path& initial_path(<code>system::error_code& ec</code>);
+ uintmax_t hard_link_count(const path& p);
+ uintmax_t hard_link_count(const path& p, system::error_code& ec);
- bool is_directory(file_status s);
- bool is_directory(const path& p);
- bool is_directory(const path& p, system::error_code& ec);
+ const path& initial_path();
+ const path& initial_path(<code>system::error_code& ec</code>);
- bool is_empty(const path& p);
- bool is_empty(const path& p, system::error_code& ec);
+ bool is_directory(file_status s) noexcept;
+ bool is_directory(const path& p);
+ bool is_directory(const path& p, system::error_code& ec) noexcept;
- bool is_other(file_status s);
- bool is_other(const path& p,);
- bool is_other(const path& p, system::error_code& ec);
+ bool is_empty(const path& p);
+ bool is_empty(const path& p, system::error_code& ec);
- bool is_regular_file(file_status s);
- bool is_regular_file(const path& p);
- bool is_regular_file(const path& p, system::error_code& ec);
+ bool is_other(file_status s) noexcept;
+ bool is_other(const path& p,);
+ bool is_other(const path& p, system::error_code& ec) noexcept;
- bool is_symlink(file_status s);
- bool is_symlink(const path& p);
- bool is_symlink(const path& p, system::error_code& ec);
+ bool is_regular_file(file_status s) noexcept;
+ bool is_regular_file(const path& p);
+ bool is_regular_file(const path& p, system::error_code& ec) noexcept;
- std::time_t last_write_time(const path& p);
- std::time_t last_write_time(const path& p, system::error_code& ec);
- void last_write_time(const path& p, const std::time_t new_time);
- void last_write_time(const path& p, const std::time_t new_time, system::error_code& ec);
+ bool is_symlink(file_status s noexcept);
+ bool is_symlink(const path& p);
+ bool is_symlink(const path& p, system::error_code& ec) noexcept;
- path read_symlink(const path& p);
- path read_symlink(const path& p, system::error_code& ec);
+ std::time_t last_write_time(const path& p);
+ std::time_t last_write_time(const path& p, system::error_code& ec);
+ void last_write_time(const path& p, const std::time_t new_time);
+ void last_write_time(const path& p, const std::time_t new_time, system::error_code& ec);
- bool remove(const path& p);
- bool remove(const path& p, system::error_code& ec);
+ path read_symlink(const path& p);
+ path read_symlink(const path& p, system::error_code& ec);
- uintmax_t remove_all(const path& p);
- uintmax_t remove_all(const path& p, system::error_code& ec);
+ bool remove(const path& p);
+ bool remove(const path& p, system::error_code& ec);
- void rename(const path& from, const path& to);
- void rename(const path& from, const path& to, system::error_code& ec);
+ uintmax_t remove_all(const path& p);
+ uintmax_t remove_all(const path& p, system::error_code& ec);
- void resize_file(const path& p, uintmax_t size);
- void resize_file(const path& p, uintmax_t size, system::error_code& ec);
+ void rename(const path& from, const path& to);
+ void rename(const path& from, const path& to, system::error_code& ec);
- space_info space(const path& p);
- space_info space(const path& p, system::error_code& ec);
- file_status status(const path& p);
- file_status status(const path& p, system::error_code& ec);
+ void resize_file(const path& p, uintmax_t size);
+ void resize_file(const path& p, uintmax_t size, system::error_code& ec);
- bool status_known(file_status s);
+ space_info space(const path& p);
+ space_info space(const path& p, system::error_code& ec);
- file_status symlink_status(const path& p);
- file_status symlink_status(const path& p, system::error_code& ec);
+ file_status status(const path& p);
+ file_status status(const path& p, system::error_code& ec) noexcept;
- path system_complete(const path& p);
- path system_complete(const path& p, system::error_code& ec);
+ bool status_known(file_status s) noexcept;
- path temp_directory_path();
- path temp_directory_path(system::error_code& ec);
+ file_status symlink_status(const path& p);
+ file_status symlink_status(const path& p, system::error_code& ec) noexcept;
- path unique_path(const path& model="%%%%-%%%%-%%%%-%%%%");
- path unique_path(const path& model, system::error_code& ec);
+ path system_complete(const path& p);
+ path system_complete(const path& p, system::error_code& ec);
- } // namespace filesystem
- } // namespace boost</pre>
+ path temp_directory_path();
+ path temp_directory_path(system::error_code& ec);
+
+ path unique_path(const path& model="%%%%-%%%%-%%%%-%%%%");
+ path unique_path(const path& model, system::error_code& ec);
+
+ } // namespace filesystem
+} // namespace boost</pre>
<h2><a name="Error-reporting">Error reporting</a></h2>
<p>Filesystem library functions often provide two overloads, one that
throws an exception to report file system errors, and another that sets an
@@ -585,10 +622,10 @@
is an example of an innocuous appearing path that is not actually valid. <i>--
end example</i>]</p>
</blockquote>
-<pre> namespace boost
+<pre>namespace boost
+{
+ namespace filesystem
{
- namespace filesystem
- {
class path
{
public:
@@ -599,6 +636,7 @@
// constructors and destructor
path();
path(const path& p);
+ path(path&& p) noexcept;
template <class Source>
path(Source const& source, const codecvt_type& cvt=codecvt());
@@ -610,6 +648,7 @@
// assignments
path& operator=(const path& p);
+ path& operator=(path&& p) noexcept;
template <class Source>
path& operator=(Source const& source);
@@ -641,8 +680,8 @@
void swap(path& rhs);
// native format observers
- const string_type& native() const; // native format, encoding
- const value_type* c_str() const; // native().c_str()
+ const string_type& native() const noexcept; // native format, encoding
+ const value_type* c_str() const noexcept; // native().c_str()
template <class String>
String string(const codecvt_type& cvt=codecvt()) const; // native format
@@ -699,8 +738,8 @@
string_type pathname; // <b><i>exposition only</i></b>
};
- } // namespace filesystem
- } // namespace boost</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
<p><code><a name="value_type">value_type</a></code> is an implementation-defined
<code>typedef</code> for the
character type used by the operating system to represent pathnames.</p>
@@ -735,31 +774,36 @@
rationale</i>]</p>
</blockquote>
-<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+<div align="center">
+ <center>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#E0E0E0" width="90%">
<tr>
- <td style="font-size: 10pt">
- Class <code>path</code> does not currently map invalid characters in
+ <td>
+ <i>Class <code>path</code> does not currently map invalid characters in
filenames to valid characters. In the future we might add something like
- this:<blockquote>
-<p>When converting filenames to the native operating system format,
+ this:</i><blockquote>
+<p><i>When converting filenames to the native operating system format,
implementations are encouraged, but not required, to convert otherwise invalid
characters or character sequences to valid characters or character sequences.
-Such conversions are implementation-defined.</p>
+Such conversions are implementation-defined.</i></p>
<blockquote>
-<p>[<i>Note:</i> Filename conversion allows much wider portability of both
-programs and filenames that would otherwise be possible.</p>
-<p>Implementations are encouraged to base conversion on existing standards or
+<p><i>[Note: Filename conversion allows much wider portability of both
+programs and filenames that would otherwise be possible.</i></p>
+<p><i>Implementations are encouraged to base conversion on existing standards or
practice. Examples include the Uniform Resource Locator escape syntax of a percent sign (<code>'%'</code>)
-followed by two hex digits representing the character value. On
-<i>OpenVMS</i>, which does not allow percent signs in filenames, a dollar sign (<code>'$'</code>)
+followed by two hex digits representing the character value. On OpenVMS, which does not allow percent signs in filenames, a dollar sign (<code>'$'</code>)
followed by two hex digits is the existing practice, as is converting lowercase
-letters to uppercase.<i> -- end note.</i>]</p>
+letters to uppercase. -- end note.]</i></p>
</blockquote>
</blockquote>
</td>
</tr>
</table>
+ </center>
+</div>
+
<p>If the native format requires
paths for regular files to be formatted differently from paths for directories, the
path shall be treated as a directory path if last element is a separator,
@@ -972,12 +1016,10 @@
<code>new_extension</code>.</p>
<p><i>Returns:</i> <code>*this</code></p>
</blockquote>
-<pre><code>void <a name="path-swap">swap</a>(path& rhs);</code></pre>
+<pre><code>void <a name="path-swap">swap</a>(path& rhs) noexcept;</code></pre>
<blockquote>
<p><i>Effects:</i>
Swaps the contents of the two paths.</p>
- <p><i>Throws: </i>
- nothing.</p>
<p><i>Complexity: </i>
constant time.</p>
</blockquote>
@@ -986,15 +1028,13 @@
native format observers</a></h3>
<p>The string returned by all native format observers is in the
<a href="#native-pathname-format">native pathname format</a>.</p>
-<pre>const string_type& <a name="native">native</a>() const;</pre>
+<pre>const string_type& <a name="native">native</a>() const noexcept;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
-<p><i>Throws:</i> nothing.</p>
</blockquote>
-<pre>const value_type* <a name="c_str">c_str</a>() const;</pre>
+<pre>const value_type* <a name="c_str">c_str</a>() const noexcept;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname.c_str()</code>.</p>
-<p><i>Throws:</i> nothing.</p>
</blockquote>
<pre>template <class String>
String <a name="string-template">string</a>(const codecvt_type& cvt=codecvt()) const;</pre>
@@ -1195,7 +1235,9 @@
<p> The forward traversal order is as follows:</p>
<ul>
<li>The <i>root-name</i> element, if present.</li>
- <li>The <i>root-directory</i> element, if present.</li>
+ <li>The <i>root-directory</i> element, if present, in the generic format. <i>
+ [note:</i> the generic format is required to ensure lexicographical
+ comparison works correctly. <i>-- end note</i>]</li>
<li>Each successive <i>filename</i> element, if present.</li>
<li><i>Dot</i>, if one or more trailing non-root <i>slash</i>
characters are present.</li>
@@ -1223,6 +1265,8 @@
<p><i>Returns:</i> The <code>codecvt</code> facet for the default locale for
all objects of type <code>path</code>.</p>
</blockquote>
+
+
<h3> <a name="path-deprecated-functions"><code><font size="4"> path</font></code> deprecated functions</a></h3>
<p> Several member functions from previous versions of <code>class path</code>
have been deprecated, either because they have been renamed or because the
@@ -1246,6 +1290,7 @@
const string_type external_file_string() const { return native(); }
const string_type external_directory_string() const { return native(); }</pre>
</blockquote>
+
<h3> <a name="path-non-member-functions"> <code><font size="4">path</font></code>
non-member functions</a></h3>
<pre>void swap( path& lhs, path& rhs )</pre>
@@ -1362,11 +1407,11 @@
<code>is</code></p>
</blockquote>
<h3><a name="Class-filesystem_error">Class <code>filesystem_error</code></a></h3>
-<pre> namespace boost
+<pre>namespace boost
+{
+ namespace filesystem
{
- namespace filesystem
- {
- class basic_filesystem_error : public system_error
+ class filesystem_error : public system_error
{
public:
filesystem_error();
@@ -1388,11 +1433,11 @@
const char * what() const;
};
- } // namespace filesystem
- } // namespace boost</pre>
-<p>The class template <code>basic_filesystem_error</code> defines the type of
+ } // namespace filesystem
+} // namespace boost</pre>
+<p>The class template <code>filesystem_error</code> defines the type of
objects thrown as exceptions to report file system errors from functions described in this
-clause.</p>
+reference documentation.</p>
<h4> <a name="filesystem_error-members"> <code>filesystem_error</code> members</a></h4>
<pre><a name="filesystem_error-2-arg">filesystem_error</a>(const std::string& what_arg, error_code ec);</pre>
<blockquote>
@@ -1632,7 +1677,7 @@
<tr><td><code><a name="sticky_bit">sticky_bit</a> </code> </td><td><code>01000</code></td><td> <code>S_ISVTX</code></td>
<td> Meaning varies; see http:en.wikipedia.org/wiki/Sticky_bit</td>
</tr>
-<tr><td><code>perms_mask</code></td><td><code>07777</code></td><td> </td>
+<tr><td><code><a name="perms_mask">perms_mask</a></code></td><td><code>07777</code></td><td> </td>
<td><code>all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit</code></td>
</tr>
<tr><td><code>perms_not_known</code></td><td><code>0xFFFF</code></td><td></td><td>
@@ -1658,10 +1703,10 @@
</table>
<h3><a name="file_status">Class file_status</a></h3>
-<pre> namespace boost
+<pre>namespace boost
+{
+ namespace filesystem
{
- namespace filesystem
- {
class file_status
{
public:
@@ -1683,8 +1728,8 @@
void type(file_type ft) noexcept;
void permissions(perms prms) noexcept;
};
- } // namespace filesystem
- } // namespace boost</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
<p>An object of type <code>file_status</code> stores information about the type
and permissions of a file.</p>
<h4 dir="ltr"><a name="file_status-constructors"><code>file_status</code>
@@ -1724,10 +1769,10 @@
</blockquote>
<h3><a name="Class-directory_entry">Class <code>directory_entry</code></a></h3>
<div dir="ltr">
-<pre> namespace boost
+<pre>namespace boost
+{
+ namespace filesystem
{
- namespace filesystem
- {
class directory_entry
{
public:
@@ -1766,8 +1811,8 @@
mutable file_status m_symlink_status; // for exposition only; lstat()-like
};
- } // namespace filesystem
- } // namespace boost</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
</div>
<p>A <code>directory_entry</code> object stores a <code>path object</code>,
a <code>file_status</code> object for non-symbolic link status, and a <code>
@@ -1777,7 +1822,7 @@
<p>[<i>Note:</i> Because <code>status()</code>on a pathname may be a very expensive operation,
some operating systems provide status information as a byproduct of directory
iteration. Caching such status information can result is significant time savings. Cached and
-non-cached results may differ in the presence of race conditions. <i>-- end note</i>]</p>
+non-cached results may differ in the presence of file system races. <i>-- end note</i>]</p>
<p><span style="background-color: #E0E0E0"><i>Actual cold-boot timing of iteration over
a directory with 15,047 entries was six seconds for non-cached status queries
versus one second for cached status queries. Windows XP, 3.0 GHz processor, with
@@ -1953,19 +1998,16 @@
<p>Objects of type <code>directory_iterator</code> provide standard library
compliant iteration over the contents of a directory. Also see class <code>
<a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a></code>.</p>
-<pre> namespace boost
+<pre>namespace boost
+{
+ namespace filesystem
{
- namespace filesystem
- {
class directory_iterator
- : public boost::iterator_facade< directory_iterator,
- directory_entry,
- boost::single_pass_traversal_tag >
{
public:
// member functions
- directory_iterator(); // creates the "end" iterator
+ directory_iterator() noexcept; // creates the "end" iterator
directory_iterator(const directory_iterator&);
explicit directory_iterator(const path& p);
directory_iterator(const path& p, system::error_code& ec);
@@ -1980,8 +2022,8 @@
// C++ Std, 24.1.1 Input iterators [input.iterators]
};
- } // namespace filesystem
- } // namespace boost</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
<p> <code>directory_iterator</code> satisfies the requirements of an
input iterator (C++ Std, 24.2.1, Input iterators [input.iterators]).</p>
<p>A <code>directory_iterator</code> reads successive elements from the directory for
@@ -2039,14 +2081,13 @@
</blockquote>
<h4><a name="directory_iterator-members"><code>directory_iterator</code> members</a></h4>
-<p><code><a name="directory_iterator-default-ctor">directory_iterator</a>();</code></p>
+<p><code><a name="directory_iterator-default-ctor">directory_iterator</a>()
+noexcept;</code></p>
<blockquote>
<p><i>Effects:</i> Constructs the end iterator.</p>
-<p><i>Throws:</i> Nothing.</p>
-
</blockquote>
<pre><code>explicit <a name="directory_iterator-ctor-path">directory_iterator</a>(</code>const path& p<code>);
@@ -2081,28 +2122,28 @@
<p>Objects of type <code>recursive_directory_iterator</code> provide standard library
compliant iteration over the contents of a directory, including recursion into
its sub-directories.</p>
-<pre> namespace boost
+<pre>namespace boost
+{
+ namespace filesystem
{
- namespace filesystem
- {
class recursive_directory_iterator :
public iterator<input_iterator_tag, directory_entry>
{
public:
// constructors and destructor
- recursive_directory_iterator();
+ recursive_directory_iterator() noexcept;
recursive_directory_iterator(const recursive_directory_iterator&);
explicit recursive_directory_iterator(const path& p,
- BOOST_SCOPED_ENUM(symlink_option) opt = symlink_option::none);
+ symlink_option opt = symlink_option::none);
recursive_directory_iterator(const path& p,
- BOOST_SCOPED_ENUM(symlink_option) opt, system::error_code& ec);
+ symlink_option opt, system::error_code& ec);
recursive_directory_iterator(const path& p, system::error_code& ec);
~recursive_directory_iterator();
// observers
- int level() const;
- bool no_push<code>_pending</code>() const;
+ int level() const noexcept;
+ bool no_push<code>_pending</code>() const noexcept;
// modifiers
recursive_directory_iterator& operator=(const recursive_directory_iterator&);
@@ -2114,18 +2155,19 @@
void no_push(bool value=true);
// other members as required by
- // C++ Std, 24.1.2 Input iterators [input.iterators]
+ // C++ Std, Input iterators [input.iterators]
private:
-<i><b> // actual data members will probably be stored in a shared pimpl object,
- // or some similar mechanism, to achieve the required input iterator copy semantics
-</b></i> int m_level; <b><i> // for exposition only</i></b>
- bool m_no_<code>push</code>; <i><b> // for exposition only
- </b></i>BOOST_SCOPED_ENUM(symlink_option) m_options; <i><b>// for exposition only</b></i>
+<i><b> // actual data members will probably be stored in a shared object,
+ // or some similar mechanism, to achieve the required input iterator
+ // copy semantics
+</b></i> int m_level; <b><i> // for exposition only</i></b>
+ bool m_no_<code>push</code>; <i><b>// for exposition only
+ </b></i>symlink_option m_options; <i><b>// for exposition only</b></i>
};
- } // namespace filesystem
- } // namespace boost</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
<p>The behavior of a <code>recursive_directory_iterator</code> is the same
as a <code>directory_iterator</code> unless otherwise specified.</p>
@@ -2138,17 +2180,15 @@
over, or when <code>pop()</code> is called, <code>m_level</code> is
decremented, and iteration of the parent directory continues.</li>
</ul>
-<pre>recursive_directory_iterator();</pre>
+<pre>recursive_directory_iterator() noexcept;</pre>
<blockquote>
<p><i>Effects:</i> Constructs the end iterator.</p>
-<p><i>Throws:</i> Nothing.</p>
-
</blockquote>
-<pre>explicit recursive_directory_iterator(const path& p, BOOST_SCOPED_ENUM(symlink_option) opt = symlink_option::none);
-recursive_directory_iterator(const path& p, BOOST_SCOPED_ENUM(symlink_option) opt, system::error_code& ec);
+<pre>explicit recursive_directory_iterator(const path& p, symlink_option opt = symlink_option::none);
+recursive_directory_iterator(const path& p, symlink_option opt, system::error_code& ec);
recursive_<code>directory_iterator(</code>const path& p, system::error_code& ec<code>);</code></pre>
<blockquote>
@@ -2173,17 +2213,15 @@
as <code>symlink_option::recurse</code>
<i>-- end note</i>]</p>
</blockquote>
-<pre>int level() const;</pre>
+<pre>int level() const noexcept;</pre>
<blockquote>
<p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
<p><i>Returns:</i> <code>m_level</code>.</p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
-<pre>bool <code>no_push_pending</code>() const;</pre>
+<pre>bool <code>no_push_pending</code>() const noexcept;</pre>
<blockquote>
<p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
<p><i>Returns:</i> <code>m_no_push</code>.</p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre><code>recursive_directory_iterator</code>& <a name="recursive_directory_iterator-increment">operator++</a>();
recursive_directory_iterator& increment(system::error_code& ec);</pre>
@@ -2221,26 +2259,24 @@
<p><i>Effects:</i> If <code>level() == 0</code>, set <code>*this</code> to <code>recursive_directory_iterator()</code>.
Otherwise, <code>--m_level</code>, cease iteration of the directory currently being
iterated over, and continue iteration over the parent directory.</p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre>void no_push(bool value=true);</pre>
<blockquote>
<p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
<p><i>Postcondition:</i> <code>no_push_pending() == value</code>.</p>
- <p><i>Throws:</i> Nothing.</p>
<p>[<i>Note:</i> <code>no_push()</code> is used to prevent
unwanted recursion into a directory. <i>--end note</i>]</p>
</blockquote>
<h3><a name="Operational-functions">Operational functions</a></h3>
<p>Operational functions query or modify files, including directories, in external
storage.</p>
-<p style="font-size: 10pt">Operational functions access a file by resolving an
+<p>Operational functions access a file by resolving an
object of class <code>path</code> to a particular file in a file hierarchy. The
path is resolved as if by the <i>POSIX</i>
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
Pathname Resolution</a> mechanism.</p>
<p>[<i>Note: </i>Because hardware failures, network failures,
-race conditions, and many
+file system races, and many
other kinds of errors occur frequently in file system operations, users should be aware
that any filesystem operational function, no matter how apparently innocuous, may encounter
an error. See Error reporting. <i>-- end note</i>]</p>
@@ -2336,8 +2372,8 @@
Error reporting</a>.</p>
</blockquote>
-<pre>void <a name="copy_file">copy_file</a>(const path& from, const path& to, BOOST_SCOPED_ENUM(copy_option) option);
-void <a name="copy_file2">copy_file</a>(const path& from, const path& to, BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec);</pre>
+<pre>void <a name="copy_file">copy_file</a>(const path& from, const path& to, copy_option option);
+void <a name="copy_file2">copy_file</a>(const path& from, const path& to, copy_option option, system::error_code& ec);</pre>
<blockquote>
<p><i>Effects:</i> If <code>option == copy_option::</code><code>fail_if_exists
&& exists(to)</code>, an error is reported. Otherwise, the contents and attributes of the file <code>from</code>
@@ -2385,34 +2421,31 @@
</blockquote>
<pre>void <a name="create_directory_symlink">create_directory_symlink</a>(const path& to, const path& new_symlink);
void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);</pre>
-<blockquote style="font-size: 10pt">
- <p style="font-size: 10pt"><i>Effects:</i>
+<blockquote>
+ <p><i>Effects:</i>
Establishes the postcondition, as if by <i>
POSIX</i>
<code>
<a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
symlink()</a></code>.</p>
- <p style="font-size: 10pt"><i>
+ <p><i>
Postcondition:</i> <code>new_symlink</code> resolves to a symbolic link file that
contains an unspecified representation of <code>to</code>.</p>
- <p style="font-size: 10pt"><i>Throws:</i> As specified in
+ <p><i>Throws:</i> As specified in
<a href="#Error-reporting">
Error reporting</a>.</p>
- <p style="font-size: 10pt">[<i>Note:</i>
- Some <b>operating systems</b>, such as Windows, require symlink creation to
+ <p dir="ltr">[<i>Note:</i>
+ Some operating systems, such as Windows, require symlink creation to
identify that the link is to a directory. Portable code should use <code>
create_directory_symlink()</code> to create directory symlinks rather than
<code>create_symlink()</code> <i>-- end note</i>]</p>
<p>[<i>Note:</i>
- Some <b>operating systems</b> do not support symbolic links at all or support
- them only for regular files. Windows prior to Vista, for example, did not
- support symbolic links.
- Some <b>file systems</b> do not
+ Some operating systems do not support symbolic links at all or support
+ them only for regular files.
+ Some file systems do not
support
- symbolic links regardless of the operating system - the FAT system used on floppy discs, memory cards and flash
- drives,
- for example. Thus symbolic links should only be used if these situations are
- not concerns, or if workarounds are provided. <i>-- end note</i>]</p>
+ symbolic links regardless of the operating system - the FAT file system used on
+ memory cards and flash drives, for example. <i>-- end note</i>]</p>
</blockquote>
<pre>void <a name="create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link);
void <a name="create_hard_link2">create_hard_link</a>(const path& to, const path& new_hard_link, system::error_code& ec);</pre>
@@ -2435,38 +2468,34 @@
<a href="#Error-reporting">
Error reporting</a>.</p>
<p>[<i>Note:</i>
- Some <b>operating systems</b> do not support hard links at all or support
- them only for regular files. Some <b>file systems</b> do not support hard
- links regardless of the operating system - the FAT system used on floppy
- discs, memory cards and flash drives, for example. Some file systems limit the
- number of links per file. Thus hard links should only be used if these
- situations are not concerns, or if workarounds are provided. <i>-- end note</i>]</p>
+ Some operating systems do not support hard links at all or support
+ them only for regular files. Some file systems do not support hard
+ links regardless of the operating system - the FAT file system used on memory
+ cards and flash drives, for example. Some file systems limit the number of
+ links per file. <i>-- end note</i>]</p>
</blockquote>
<pre>void <a name="create_symlink">create_symlink</a>(const path& to, const path& new_symlink);
void <a name="create_symlink2">create_symlink</a>(const path& to, const path& new_symlink, system::error_code& ec);</pre>
-<blockquote style="font-size: 10pt">
- <p style="font-size: 10pt"><i>Effects:</i>
+<blockquote>
+ <p><i>Effects:</i>
Establishes the postcondition, as if by <i>
POSIX</i>
<code>
<a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
symlink()</a></code>.</p>
- <p style="font-size: 10pt"><i>
+ <p><i>
Postcondition:</i> <code>new_symlink</code> resolves to a symbolic link file that
contains an unspecified representation of <code>to</code>.</p>
- <p style="font-size: 10pt"><i>Throws:</i> As specified in
+ <p><i>Throws:</i> As specified in
<a href="#Error-reporting">
Error reporting</a>.</p>
<p>[<i>Note:</i>
- Some <b>operating systems</b> do not support symbolic links at all or support
- them only for regular files. Windows prior to Vista, for example, did not
- support symbolic links.
- Some <b>file systems</b> do not
+ Some operating systems do not support symbolic links at all or support
+ them only for regular files.
+ Some file systems do not
support
- symbolic links regardless of the operating system - the FAT system used on floppy discs, memory cards and flash
- drives,
- for example. Thus symbolic links should only be used if these situations are
- not concerns, or if workarounds are provided. <i>-- end note</i>]</p>
+ symbolic links regardless of the operating system - the FAT system used on
+ memory cards and flash drives, for example. <i>-- end note</i>]</p>
</blockquote>
<pre>path <a name="current_path">current_path</a>();
path <a name="current_path2">current_path</a>(system::error_code& ec);</pre>
@@ -2488,7 +2517,7 @@
<pre>void current_path(const path& p);
void current_path(const path& p, system::error_code& ec);</pre>
<blockquote>
- <p style="font-size: 10pt"><i>Effects:</i>
+ <p><i>Effects:</i>
Establishes the postcondition, as if by <i>
POSIX</i>
<code>
@@ -2502,14 +2531,13 @@
global state. It may be changed unexpectedly by a third-party or system
library functions, or by another thread. <i>-- end note</i>]</p>
</blockquote>
-<pre>bool <a name="exists">exists</a>(file_status s);</pre>
+<pre>bool <a name="exists">exists</a>(file_status s) noexcept;</pre>
<blockquote>
<p><i>Returns:</i>
<code>status_known(s) && s.type() != file_not_found</code></p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre>bool <a name="exists2">exists</a>(const path& p);
-bool <a name="exists3">exists</a>(const path& p, system::error_code& ec);</pre>
+bool <a name="exists3">exists</a>(const path& p, system::error_code& ec) noexcept;</pre>
<blockquote>
<p><i>Returns:</i> <code>exists(status(p))</code> or <code>exists(status(p, ec))</code>,
respectively.</p>
@@ -2518,15 +2546,15 @@
</blockquote>
<pre><code>bool <a name="equivalent">equivalent</a>(const path& p1, const path& p2);
bool <a name="equivalent2">equivalent</a>(const path& p1, const path& p2, system::error_code& ec);</code></pre>
-<blockquote style="font-size: 10pt">
- <p style="font-size: 10pt"><i>Effects:</i> Determines <code>file_status s1</code>
+<blockquote>
+ <p><i>Effects:</i> Determines <code>file_status s1</code>
and <code>s2</code>, as if by <code>status(p1)</code> and <code>status(p2)</code>,
respectively.</p>
- <p style="font-size: 10pt"><i>Returns:</i> <code>true</code>, if <code>sf1 ==
+ <p><i>Returns:</i> <code>true</code>, if <code>sf1 ==
sf2</code> and <code>p1</code> and <code>p2</code> resolve to the same file
system entity, else <code>false</code>.</p>
<blockquote>
- <p style="font-size: 10pt">Two paths are considered to resolve to the same
+ <p>Two paths are considered to resolve to the same
file system entity if two candidate entities reside on the same device at the
same location. This is determined as if by the values of the <i>POSIX</i>
<code>
@@ -2535,7 +2563,7 @@
<a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">
stat()</a></code> for the two paths, having equal <code>st_dev</code> values
and equal <code>st_ino</code> values.</p>
- <p style="font-size: 10pt">[<i>Note:</i> <i>POSIX</i> requires that <i>"st_dev</i>
+ <p>[<i>Note:</i> <i>POSIX</i> requires that <i>"st_dev</i>
must be unique within a Local Area Network". Conservative <i>POSIX</i>
implementations may also wish to check for equal <code>st_size</code> and
<code>st_mtime</code> values. <i>Windows</i> implementations may use <code>
@@ -2545,7 +2573,7 @@
<code>nFileSizeLow</code>, <code>ftLastWriteTime.dwLowDateTime</code>, and
<code>ftLastWriteTime.dwHighDateTime</code>. <i>-- end note</i>]</p>
</blockquote>
- <p style="font-size: 10pt"><i>Throws:</i> <code>filesystem_error</code>
+ <p><i>Throws:</i> <code>filesystem_error</code>
if <code>(!exists(s1) && !exists(s2)) || (is_other(s1) && is_other(s2))</code>,
otherwise as specified in
<a href="#Error-reporting">
@@ -2556,9 +2584,6 @@
uintmax_t <a name="file_size2">file_size</a>(const path& p, system::error_code& ec);</pre>
</div>
<blockquote>
- <p>
- <span style="background-color: #FFFF00">Remarks: </span>
- </p>
<p><i>Returns:</i> If <code>exists(p) && is_regular_file(p)</code>, the size
in bytes
of the file <code>p</code> resolves to, determined as if by the value of
@@ -2567,7 +2592,7 @@
obtained as if by <i>POSIX</i> <code>
<a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.
Otherwise, <code>static_cast<uintmax_t>(-1)</code>.</p>
- <p style="font-size: 10pt"><i>Throws:</i> As specified in
+ <p><i>Throws:</i> As specified in
<a href="#Error-reporting">
Error reporting</a>.</p>
</blockquote>
@@ -2576,7 +2601,7 @@
<blockquote>
<p><i>Returns:</i> The number of hard links for <code>p</code>.</p>
- <p style="font-size: 10pt"><i>Throws:</i> As specified in
+ <p><i>Throws:</i> As specified in
<a href="#Error-reporting">
Error reporting</a>.</p>
@@ -2596,14 +2621,13 @@
<a href="#Error-reporting">
Error reporting</a>. Subsequent calls throw nothing.</p>
</blockquote>
-<pre>bool <code><a name="is_directory">is_directory</a></code>(file_status s);</pre>
+<pre>bool <code><a name="is_directory">is_directory</a></code>(file_status s) noexcept;</pre>
<blockquote>
<p><i>Returns:</i>
<code>s.type() == directory_file</code></p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre><code>bool <a name="is_directory2">is_directory</a>(const path& p);
-bool <a name="is_directory3">is_directory</a>(const path& p, system::error_code& ec);</code></pre>
+bool <a name="is_directory3">is_directory</a>(const path& p, system::error_code& ec) noexcept;</code></pre>
<blockquote>
<p dir="ltr"><i>Returns:</i> <code>is_directory(status(p))</code> or <code>is_directory(status(p, ec))</code>,
respectively.</p>
@@ -2620,11 +2644,10 @@
directory_iterator(p) == directory_iterator()<br>
: file_size(p) == 0;</code></p>
</blockquote>
-<pre>bool <code><a name="is_regular_file">is_regular_file</a></code>(file_status s);</pre>
+<pre>bool <code><a name="is_regular_file">is_regular_file</a></code>(file_status s) noexcept;</pre>
<blockquote>
<p><i>Returns:</i>
<code>s.type() == regular_file</code></p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre><code>bool <a name="is_regular_file2">is_regular_file</a>(const path& p);</code></pre>
<blockquote>
@@ -2632,7 +2655,7 @@
<p><i>Throws:</i> <code>filesystem_error</code>
if <code>status(p)</code> would throw <code>filesystem_error.</code></p>
</blockquote>
-<pre><code>bool <a name="is_regular_file3">is_regular_file</a>(const path& p, system::error_code& ec);</code></pre>
+<pre><code>bool <a name="is_regular_file3">is_regular_file</a>(const path& p, system::error_code& ec) noexcept;</code></pre>
<blockquote>
<p><i>Effects:</i> Sets <code>ec</code> as if by <code>status(p, ec)</code>. [<i>Note:</i>
<code>status_error</code>,
@@ -2645,30 +2668,27 @@
function directly. <i>-- end
note</i>] </p>
<p><i>Returns:</i> <code>is_regular_file(status(p, ec))</code>.</p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
-<pre>bool <a name="is_other">is_other</a>(file_status s);</pre>
+<pre>bool <a name="is_other">is_other</a>(file_status s) noexcept;</pre>
<blockquote>
<p><i>Returns:</i>
<code>return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s)</code></p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre><code>bool <a name="is_other2">is_other</a>(const path& p);
-bool <a name="is_other3">is_other</a>(const path& p, system::error_code& ec);</code></pre>
+bool <a name="is_other3">is_other</a>(const path& p, system::error_code& ec) noexcept;</code></pre>
<blockquote>
<p><i>Returns:</i> <code>is_other(status(p))</code> or <code>is_other(status(p, ec))</code>,
respectively.</p>
<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws
nothing.</p>
</blockquote>
-<pre>bool <a name="is_symlink">is_symlink</a>(file_status s);</pre>
+<pre>bool <a name="is_symlink">is_symlink</a>(file_status s) noexcept;</pre>
<blockquote>
<p><i>Returns:</i>
<code>s.type() == symlink_file</code></p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre><code>bool <a name="is_symlink2">is_symlink</a>(const path& p);
-bool <a name="is_symlink3">is_symlink</a>(const path& p, system::error_code& ec);</code></pre>
+bool <a name="is_symlink3">is_symlink</a>(const path& p, system::error_code& ec) noexcept;</code></pre>
<blockquote>
<p><i>Returns:</i> <code>is_symlink(symlink_status(p))</code> or <code>is_symlink(symlink_status(p, ec))</code>,
respectively.</p>
@@ -2683,6 +2703,9 @@
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_mtime</code> obtained
as if by <i>POSIX</i> <code>
<a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
+ <p><i>Throws:</i> As specified in
+ <a href="#Error-reporting">
+ Error reporting</a>.</p>
</blockquote>
<pre>void <a name="last_write_time3">last_write_time</a>(const path& p, const std::time_t new_time);
void <a name="last_write_time4">last_write_time</a>(const path& p, const std::time_t new_time<code>, system::error_code& ec</code>);</pre>
@@ -2701,13 +2724,11 @@
new_time</code> is not specified since it might not hold for file systems
with coarse time granularity. <i>-- end note</i>]</p>
</blockquote>
-<pre>void permissions(const path& p, perms prms);
+<pre>void <a name="permissions">permissions</a>(const path& p, perms prms);
void permissions(const path& p, perms prms, system::error_code& ec);</pre>
<blockquote>
- <p dir="ltr">Applies an operating system set of permissions to a file. See
- perms for specifics.<br>
- <i><br>
- Requires:</i> <code>!((prms & add_perms) && (prms & remove_perms))</code>.</p>
+ <p dir="ltr">
+ <i>Requires:</i> <code>!((prms & add_perms) && (prms & remove_perms))</code>.</p>
<p dir="ltr"><i>Effects:</i> Applies the effective permissions bits from <code>
prms</code> to the file <code>p</code> resolves to, as if by <i>POSIX</i>
<code>
@@ -2726,16 +2747,22 @@
<tr>
<td><code>add_perms</code></td>
<td>
- <p dir="ltr">current_status.permissions() | (<code>prms & perms_mask</code>)
+ <p dir="ltr"><code>status(p).permissions() | (prms &
+ perms_mask)</code>
</td>
</tr>
<tr>
<td><code>remove_perms</code></td>
- <td>current_status.permissions() & ~(<code>prms & perms_mask</code>) </td>
+ <td><code>status(p)</code><code>.permissions() & ~(prms &
+ perms_mask)
+ </code> </td>
</tr>
</table>
<p>[<i>Note:</i> Conceptually permissions are viewed as bits, but the actual
- implementation by a file system may use some other mechanism. -- <i>end note</i>]</p>
+ implementation may use some other mechanism. -- <i>end note</i>]</p>
+ <p><i>Throws:</i> As specified in
+ <a href="#Error-reporting">
+ Error reporting</a>.</p>
</blockquote>
<pre>path <a name="read_symlink">read_symlink</a>(const path& p);
path read_symlink(const path& p, system::error_code& ec);</pre>
@@ -2808,7 +2835,7 @@
<p><i>Throws:</i> As specified in
<a href="#Error-reporting">
Error reporting</a>.</p>
- <p style="font-size: 10pt"><i>Remarks:</i> Achieves its postconditions as if by
+ <p><i>Remarks:</i> Achieves its postconditions as if by
POSIX <code>
<a href="http://www.opengroup.org/onlinepubs/000095399/functions/truncate.html">
truncate()</a></code>.</p>
@@ -2849,7 +2876,7 @@
cause an exception to be
thrown.<i> -- end note</i>] </p>
</blockquote>
-<pre>file_status <a name="status2">status</a>(const path& p, system::error_code& ec);</pre>
+<pre>file_status <a name="status2">status</a>(const path& p, system::error_code& ec) noexcept;</pre>
<blockquote>
<p><i>Effects: </i></p>
<blockquote>
@@ -2900,7 +2927,8 @@
return <code>
file_status(regular_file)</code>. [<i>Note:</i> <code>
regular_file</code> implies appropriate <code><fstream></code> operations
- would succeed, assuming no hardware, permission, access, or race condition
+ would succeed, assuming no hardware, permission, access, or file system
+ race
errors. Lack of
<code>regular_file</code> does not necessarily imply <code><fstream></code> operations would
fail on a directory.
@@ -2937,19 +2965,17 @@
file_status(type_unknown)</code>.</li>
</ul>
</blockquote>
-<p><i>Throws:</i> Nothing.</p>
<p><i>Remarks:</i> If a symbolic link is encountered during pathname
resolution,
pathname resolution continues using the contents of the symbolic link.</p>
</blockquote>
-<pre>bool <a name="status_known">status_known</a>(file_status s);</pre>
+<pre>bool <a name="status_known">status_known</a>(file_status s) noexcept;</pre>
<blockquote>
<p><i>Returns:</i>
<code>s.type() != status_error</code></p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre>file_status <a name="symlink_status">symlink_status</a>(const path& p);
-file_status <a name="symlink_status2">symlink_status</a>(const path& p, system::error_code& ec);</pre>
+file_status <a name="symlink_status2">symlink_status</a>(const path& p, system::error_code& ec) noexcept;</pre>
<blockquote>
<p><i>Effects:</i> Same as status(), above,
except that the attributes
@@ -2963,8 +2989,9 @@
that if the attributes indicate a symbolic link, as if by <i>POSIX</i>
<a class="external" href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">
S_ISLNK()</a>, return <code>file_status(symlink_file)</code>.</p>
-<p><i>Throws:</i> Nothing.</p>
<p><i>Remarks:</i> Pathname resolution terminates if <code>p</code> names a symbolic link.</p>
+ <p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws
+ nothing.</p>
</blockquote>
<pre>path <a name="system_complete">system_complete</a>(const path& p);
path <a name="system_complete2">system_complete</a>(const path& p, system::error_code& ec);</pre>
@@ -2975,6 +3002,9 @@
<p><i>Returns:</i> The composed path.</p>
<p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
rp.is_absolute()</code> is true.</p>
+ <p><i>Throws:</i> As specified in
+ <a href="#Error-reporting">
+ Error reporting</a>.</p>
<p>[<i>Note:</i> For <i>POSIX</i>, <code>system_complete(p)</code> has the same semantics as
<code>complete(p, current_path())</code>.</p>
<p><a name="windows_effects">For <i>Windows</i></a>, <code>system_complete(p)</code> has the
@@ -3029,6 +3059,7 @@
provided by the operating system. [<i>Note</i>: Such generators may block
until sufficient entropy develops. <i>--end note</i>]</p>
</blockquote>
+
<h3><a name="File-streams">File streams</a> -
<a href="../../../../boost/filesystem/fstream.hpp"><boost/filesystem/fstream.hpp></a></h3>
<p>Replacements are provided for the file stream classes from the C++ standard
@@ -3086,8 +3117,11 @@
typedef basic_fstream<wchar_t> wfstream;
typedef basic_ofstream<wchar_t> wofstream;
- } // namespace filesystem
-} // namespace boost</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
+
+
+
<h2><a name="Path-decomposition-table">Path decomposition table</a></h2>
<p>The table is generated by a program compiled with the Boost implementation.</p>
<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>
@@ -3638,13 +3672,12 @@
final document.</p>
<p>Peter Dimov suggested a single class path, with member templates to adapt to
multiple string types. His idea became the basis for the version 3 path design.</p>
-<p> </p>
<h2><a name="References">References</a></h2>
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
<tr>
<td width="16%" valign="top">[<a name="ISO_POSIX">ISO-POSIX</a>]</td>
<td width="84%">ISO/IEC 9945:2003, IEEE Std 1003.1-2001, and The Open Group
- Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">î
+ Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">®
Specification, Version 3. Available from each of the organizations involved
in its creation. For example, read online or download from
<a href="http://www.unix.org/single_unix_specification/">
@@ -3660,12 +3693,14 @@
</tr>
</table>
<hr>
+>
<p><font size="2">© Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011</font></p>
<p><font size="2">Distributed under the Boost Software License, Version 1.0. See
</font>
<a href="http://www.boost.org/LICENSE_1_0.txt"><font size="2">www.boost.org/LICENSE_1_0.txt</font></a></p>
<p><font size="2">Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->31 October 2011<!--webbot bot="Timestamp" endspan i-checksum="32182" --></font></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->13 January 2012<!--webbot bot="Timestamp" endspan i-checksum="32267" --></font></p>
+
</body>
Modified: branches/quickbook-dev/libs/filesystem/v3/doc/release_history.html
==============================================================================
--- branches/quickbook-dev/libs/filesystem/v3/doc/release_history.html (original)
+++ branches/quickbook-dev/libs/filesystem/v3/doc/release_history.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -38,26 +38,32 @@
<h2>1.49.0</h2>
<ul>
- <li>Fix directory_iterator access violation on Windows if error is thrown
- (#5900). Thanks to Andreas Eckleder for the patch.</li>
- <li>Fix a bug in director_iterator construction with error_code argument that
- caused increment to be called without the ec argument being passed. Reported
- by anonymous as ticket #5900 comment 3.</li>
- <li>Cleaned up test suite path_test.cpp code issues exposed by #5989 even
- though the ticket itself was NAD. Clarified docs; iteration over a path yields
- generic format.</li>
- <li>Added test cases and fixes for class path errors when assignment or append
- used self or portion of self as source. Fixes ticket #3714.</li>
- <li>Change Windows codecvt processing from CP_THREAD_ACP to CP_ACP, resolving
- ticket #5592.</li>
- <li>Operations function fixes for PGI compiler, thanks to Noel Belcourt.</li>
- <li>Relax permissions test to reflect reality, particularly on the Sandia test
- platforms.</li>
- <li>Fix #4889, #6320, Locale codecvt_facet not thread safe on Windows. Move
+ <li>Fix #3714,
+ Added test cases and fixes for class path errors when assignment or append
+ used self or portion of self as source. </li>
+ <li>Fix #4889,
+ #6320, Locale codecvt_facet not thread safe on Windows. Move
Windows, Mac OS X, locale and codecvt facet back to namespace scope. POSIX
except OS X uses local static initialization (IE lazy) to ensure exceptions
are catchable if environmental variables are misconfigured and to avoid use of
locale("") if not actually used.</li>
+ <li>Fix #5652,
+ recursive_directory_iterator fails on cyclic symbolic links. Thanks to Daniel
+ Aarno for the patch.</li>
+ <li>Fix #5653,
+ recursive_directory_iterator(error_code) can still throw filesystem_error.</li>
+ <li>Fix #5900, directory_iterator
+ access violation on Windows if error is thrown. Thanks to Andreas Eckleder for the patch.</li>
+ <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900#comment:2">#5900
+ comment 2</a>, a bug in director_iterator construction with error_code argument that
+ caused increment to be called without the ec argument being passed.</li>
+ <li>Fix #5989 by cleaning up test suite path_test.cpp code even
+ though the ticket itself was not a defect, and clarifying docs; iteration over a path yields
+ generic format.</li>
+ <li>Fix #5592, Change Windows codecvt processing from CP_THREAD_ACP to CP_ACP.</li>
+ <li>Operations function fixes for PGI compiler, thanks to Noel Belcourt.</li>
+ <li>Relax permissions test to reflect reality, particularly on the Sandia test
+ platforms.</li>
</ul>
<h2>1.48.0</h2>
@@ -112,7 +118,7 @@
</ul>
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->21 January, 2012<!--webbot bot="Timestamp" endspan i-checksum="38504" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->24 January, 2012<!--webbot bot="Timestamp" endspan i-checksum="38510" --></p>
<p>© Copyright Beman Dawes, 2011</p>
<p> Use, modification, and distribution are subject to the Boost Software
License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
Modified: branches/quickbook-dev/libs/filesystem/v3/doc/src/source.html
==============================================================================
--- branches/quickbook-dev/libs/filesystem/v3/doc/src/source.html (original)
+++ branches/quickbook-dev/libs/filesystem/v3/doc/src/source.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -69,7 +69,9 @@
path
decomposition<br>
path
query<br>
path
iterators<br>
+$if $TARGET; == BOOST
path
deprecated functions<br>
+$endif
path
non-member functions<br>
path
inserters and extractors<br>
Class filesystem_error
<br>
@@ -150,12 +152,16 @@
<p>This $WHAT; describes components that perform operations on file systems and
their components, such as paths, regular files, and directories.</p>
-<p>Operating systems such as <i>MAC OS, UNIX</i>, and <i>Windows</i> are
+<p dir="ltr">Operating systems such as <i>Linux, MAC OS, UNIX</i>, and <i>Windows</i> are
mentioned in this $WHAT; for purposes of illustration or to give guidance to
implementers. No slight to other operating systems is implied or intended.</p>
-<p><a name="Footnote-3">Footnote 3</a>: <i>MAC OS</i>® is a registered trademark
+<p><span style="background-color: #E0E0E0">Footnote:</span> Linux® is a
+registered trademark of Linus Torvalds.</p>
+<p><a name="Footnote-3"><span style="background-color: #E0E0E0">Footnote</span></a><span style="background-color: #E0E0E0">:</span> <i>MAC OS</i>® is a registered trademark
of Apple Inc.</p>
-<p><a name="Footnote-4">Footnote 4</a>: <i>Windows</i>® is a registered
+<p><span style="background-color: #E0E0E0">Footnote:</span> <i>UNIX</i>® is a
+registered trademark of The Open Group. </p>
+<p><a name="Footnote-4"><span style="background-color: #E0E0E0">Footnote</span></a><span style="background-color: #E0E0E0">:</span> <i>Windows</i>® is a registered
trademark of Microsoft Corporation.</p>
<h2><a name="Conformance">Conformance</a></h2>
@@ -723,31 +729,36 @@
rationale</i>]</p>
</blockquote>
-<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+<div align="center">
+ <center>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#E0E0E0" width="90%">
<tr>
<td>
- Class <code>path</code> does not currently map invalid characters in
+ <i>Class <code>path</code> does not currently map invalid characters in
filenames to valid characters. In the future we might add something like
- this:<blockquote>
-<p>When converting filenames to the native operating system format,
+ this:</i><blockquote>
+<p><i>When converting filenames to the native operating system format,
implementations are encouraged, but not required, to convert otherwise invalid
characters or character sequences to valid characters or character sequences.
-Such conversions are implementation-defined.</p>
+Such conversions are implementation-defined.</i></p>
<blockquote>
-<p>[<i>Note:</i> Filename conversion allows much wider portability of both
-programs and filenames that would otherwise be possible.</p>
-<p>Implementations are encouraged to base conversion on existing standards or
+<p><i>[Note: Filename conversion allows much wider portability of both
+programs and filenames that would otherwise be possible.</i></p>
+<p><i>Implementations are encouraged to base conversion on existing standards or
practice. Examples include the Uniform Resource Locator escape syntax of a percent sign (<code>'%'</code>)
-followed by two hex digits representing the character value. On
-<i>OpenVMS</i>, which does not allow percent signs in filenames, a dollar sign (<code>'$'</code>)
+followed by two hex digits representing the character value. On OpenVMS, which does not allow percent signs in filenames, a dollar sign (<code>'$'</code>)
followed by two hex digits is the existing practice, as is converting lowercase
-letters to uppercase.<i> -- end note.</i>]</p>
+letters to uppercase. -- end note.]</i></p>
</blockquote>
</blockquote>
</td>
</tr>
</table>
+ </center>
+</div>
+
<p>If the native format requires
paths for regular files to be formatted differently from paths for directories, the
path shall be treated as a directory path if last element is a separator,
@@ -822,7 +833,7 @@
char32_t</code>.</li>
<li>A C-array. The value type is required to be <code>char</code>, <code>
wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li>
- <li>A <code>boost::filesystem::directory_entry</code>.</li>
+ <li>A <code>$NAMESPACE;::$SUBNAMESPACE;::directory_entry</code>.</li>
</ul>
<h3> <a name="path-constructors"> <code>
@@ -1179,7 +1190,9 @@
<p> The forward traversal order is as follows:</p>
<ul>
<li>The <i>root-name</i> element, if present.</li>
- <li>The <i>root-directory</i> element, if present.</li>
+ <li>The <i>root-directory</i> element, if present, in the generic format. <i>
+ [note:</i> the generic format is required to ensure lexicographical
+ comparison works correctly. <i>-- end note</i>]</li>
<li>Each successive <i>filename</i> element, if present.</li>
<li><i>Dot</i>, if one or more trailing non-root <i>slash</i>
characters are present.</li>
@@ -1352,7 +1365,7 @@
</blockquote>
<h3><a name="Class-filesystem_error">Class <code>filesystem_error</code></a></h3>
<pre>$NAMESPACE_BEGIN;
- class basic_filesystem_error : public system_error
+ class filesystem_error : public system_error
{
public:
filesystem_error();
@@ -1375,7 +1388,7 @@
const char * what() const;
};
$NAMESPACE_END;</pre>
-<p>The class template <code>basic_filesystem_error</code> defines the type of
+<p>The class template <code>filesystem_error</code> defines the type of
objects thrown as exceptions to report file system errors from functions described in this
$WHAT;.</p>
<h4> <a name="filesystem_error-members"> <code>filesystem_error</code> members</a></h4>
Modified: branches/quickbook-dev/libs/filesystem/v3/doc/src/tr2_snippets.html
==============================================================================
--- branches/quickbook-dev/libs/filesystem/v3/doc/src/tr2_snippets.html (original)
+++ branches/quickbook-dev/libs/filesystem/v3/doc/src/tr2_snippets.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,12 +13,12 @@
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="579">
<tr>
<td width="153" align="left" valign="top">Document number:</td>
- <td width="426">N3335=12-0025</td>
+ <td width="426"><span style="background-color: #FFFF00">D????=12-????</span></td>
</tr>
<tr>
<td width="153" align="left" valign="top">Date:</td>
<td width="426">
- <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y-%m-%d" startspan -->2012-01-13<!--webbot bot="Timestamp" endspan i-checksum="12045" --></td>
+ <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y-%m-%d" startspan -->2012-02-02<!--webbot bot="Timestamp" endspan i-checksum="12106" --></td>
</tr>
<tr>
<td width="153" align="left" valign="top">Project:</td>
@@ -31,7 +31,7 @@
</table>
-<h1>Filesystem Library for C++11/TR2 (Revision 1)</h1>
+<h1>Filesystem Library for C++11/TR2 (Revision 2)</h1>
<p>This paper proposes that the filesystem library component of <i>C++ Standard
@@ -41,7 +41,19 @@
<a href="#TODO">TODO</a> list identifies remaining work to be done.</p>
-<h2>Revision history</h2>
+<h2>Revision history </h2>
+
+
+<p><span style="background-color: #FFFF00">N????=12-????</span>, Filesystem Library for C++11/TR2 (Revision
+2). Changes
+include:</p>
+
+
+<ul>
+ <li>Removed references to Boost within the proposed wording.</li>
+ <li>Corrected namespaces and made other minor fixes to the proposed wording.</li>
+ <li>Added Issue 7: How should class path inserter and extractor be specified?</li>
+</ul>
<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3335.html">
@@ -57,7 +69,7 @@
raised by the LWG review of N3239 at the Bloomington meeting, and private
communications from LWG members.</li>
<li>Namespace changed to <code>files</code> as an experiment. Made this
- issue number 1 so the LWG can pass judgement.</li>
+ issue number 1 so the LWG can pass judgment.</li>
<li>New functions were added, suggested by David Svoboda, to generate
canonical paths and manage permissions.</li>
<li>More C++11 functionality was applied. This process is still incomplete,
@@ -293,13 +305,33 @@
enough that I'd like to see actual implementation and use experience (presumably
via Boost), and (2) I can't recall a user ever requesting such a feature.</p>
<hr>
-<h3>Issue 6: Could allocator support be class path?</h3>
+<h3>Issue 6: Could allocator support be added to class path?</h3>
<h4>Discussion</h4>
<p>Question raised by a committee member in private email.</p>
<p>Comment from Beman: How would allocator support work, given that class path
is not a template?</p>
<h4>Proposed resolution</h4>
<hr>
+<h3>Issue 7: How should class path inserter and extractor be specified?</h3>
+<h4>Discussion</h4>
+<p>Class <code>path</code> currently is specified to used the Boost detail <code>
+quoted</code> stream manipulator. A path object is inserted delimited by quotes,
+and extracted accordingly, ensuring that paths containing spaces are
+round-tripped correctly. Quotes in the path itself are escaped, and io
+state is saved and restored.</p>
+<p>See
+<a href="http://www.boost.org/doc/libs/1_48_0/libs/io/doc/quoted_manip.html">
+http://www.boost.org/doc/libs/1_48_0/libs/io/doc/quoted_manip.html></p>
+<p>Since the standard can't specify behavior in terms of something in Boost, we
+have to change the specification. Since the <code>quoted</code> stream
+manipulator is a handy little component, the issue is raised as to whether it
+should go in TR2.</p>
+<h4>Proposed resolution</h4>
+<p><b>Option 1:</b> Add Boost's <code>quoted</code> stream manipulator to TR2,
+and change the Filesystem docs to reference it.</p>
+<p><b>Option 2:</b> Specify the path inserter and extractor to have the desired
+behavior with reference to how it is achieved. </p>
+<hr>
<p>$endid
$id backmatter=
Modified: branches/quickbook-dev/libs/filesystem/v3/src/operations.cpp
==============================================================================
--- branches/quickbook-dev/libs/filesystem/v3/src/operations.cpp (original)
+++ branches/quickbook-dev/libs/filesystem/v3/src/operations.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -502,7 +502,10 @@
|| errval == ERROR_BAD_NETPATH; // "//nosuch" on Win32
}
-#if defined(_MSC_VER) || (defined(__GLIBCXX__) && __GLIBCXX__ >= 20110325)
+// some distributions of mingw as early as GLIBCXX__ 20110325 have _stricmp, but the
+// offical 4.6.2 release with __GLIBCXX__ 20111026 doesn't. Play it safe for now, and
+// only use _stricmp if _MSC_VER is defined
+#if defined(_MSC_VER) // || (defined(__GLIBCXX__) && __GLIBCXX__ >= 20110325)
# define BOOST_FILESYSTEM_STRICMP _stricmp
#else
# define BOOST_FILESYSTEM_STRICMP strcmp
Modified: branches/quickbook-dev/libs/filesystem/v3/test/msvc10/filesystem-v3.sln
==============================================================================
--- branches/quickbook-dev/libs/filesystem/v3/test/msvc10/filesystem-v3.sln (original)
+++ branches/quickbook-dev/libs/filesystem/v3/test/msvc10/filesystem-v3.sln 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -73,14 +73,14 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "locale_info", "locale_info\locale_info.vcxproj", "{3667C35E-78D5-43D4-AAC2-349145E4341D}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ticket_5850", "ticket_5850\ticket_5850.vcxproj", "{B1FA4137-7B08-4113-9EC0-F3BAFEFBE2B7}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thread_test", "thread_test\thread_test.vcxproj", "{20E2805D-9634-46CE-B979-21CCBBD16EA3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symlinked_cpp", "symlinked_cpp\symlinked_cpp.vcxproj", "{E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}"
ProjectSection(ProjectDependencies) = postProject
{F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
{FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thread_test", "thread_test\thread_test.vcxproj", "{20E2805D-9634-46CE-B979-21CCBBD16EA3}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -175,14 +175,14 @@
{3667C35E-78D5-43D4-AAC2-349145E4341D}.Debug|Win32.Build.0 = Debug|Win32
{3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|Win32.ActiveCfg = Release|Win32
{3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|Win32.Build.0 = Release|Win32
- {B1FA4137-7B08-4113-9EC0-F3BAFEFBE2B7}.Debug|Win32.ActiveCfg = Debug|Win32
- {B1FA4137-7B08-4113-9EC0-F3BAFEFBE2B7}.Debug|Win32.Build.0 = Debug|Win32
- {B1FA4137-7B08-4113-9EC0-F3BAFEFBE2B7}.Release|Win32.ActiveCfg = Release|Win32
- {B1FA4137-7B08-4113-9EC0-F3BAFEFBE2B7}.Release|Win32.Build.0 = Release|Win32
{20E2805D-9634-46CE-B979-21CCBBD16EA3}.Debug|Win32.ActiveCfg = Debug|Win32
{20E2805D-9634-46CE-B979-21CCBBD16EA3}.Debug|Win32.Build.0 = Debug|Win32
{20E2805D-9634-46CE-B979-21CCBBD16EA3}.Release|Win32.ActiveCfg = Release|Win32
{20E2805D-9634-46CE-B979-21CCBBD16EA3}.Release|Win32.Build.0 = Release|Win32
+ {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Debug|Win32.Build.0 = Debug|Win32
+ {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Release|Win32.ActiveCfg = Release|Win32
+ {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: branches/quickbook-dev/libs/filesystem/v3/test/operations_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/filesystem/v3/test/operations_test.cpp (original)
+++ branches/quickbook-dev/libs/filesystem/v3/test/operations_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -614,6 +614,20 @@
BOOST_TEST(walk_tree(false) == 1);
if (create_symlink_ok)
BOOST_TEST(walk_tree(true) > 1);
+
+ // test iterator increment with error_code argument
+ boost::system::error_code ec;
+ int d1f1_count = 0;
+ for (fs::recursive_directory_iterator it (dir, fs::symlink_option::no_recurse);
+ it != fs::recursive_directory_iterator();
+ it.increment(ec))
+ {
+ if (it->path().filename() == "d1f1")
+ ++d1f1_count;
+ }
+ BOOST_TEST(!ec);
+ BOOST_TEST(d1f1_count == 1);
+
cout << " recursive_directory_iterator_tests complete" << endl;
}
Modified: branches/quickbook-dev/libs/functional/hash/doc/rationale.qbk
==============================================================================
--- branches/quickbook-dev/libs/functional/hash/doc/rationale.qbk (original)
+++ branches/quickbook-dev/libs/functional/hash/doc/rationale.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -8,7 +8,7 @@
The rationale can be found in the original design
[footnote issue 6.18 of the __issues__ (page 63)].
-[heading:quality Quality of the hash function]
+[heading Quality of the hash function]
Many hash functions strive to have little correlation between the input
and output values. They attempt to uniformally distribute the output
Modified: branches/quickbook-dev/libs/fusion/doc/container.qbk
==============================================================================
--- branches/quickbook-dev/libs/fusion/doc/container.qbk (original)
+++ branches/quickbook-dev/libs/fusion/doc/container.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1039,8 +1039,8 @@
[heading Header]
- #include <boost/fusion/container/generation/make_list.hpp>
- #include <boost/fusion/include/make_list.hpp>
+ #include <boost/fusion/container/generation/make_vector.hpp>
+ #include <boost/fusion/include/make_vector.hpp>
[heading Example]
Modified: branches/quickbook-dev/libs/geometry/doc/acknowledgments.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/acknowledgments.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/acknowledgments.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,6 +28,9 @@
or at osgeo) about __boost_geometry__, in preview stage, or in review stage,
or after that.
+Furthermore we are thankful to people supplying patches: Arnold Metselaar,
+Aleksey Tulinov, Christophe Henry
+
Finally I (Barend) would like to thank my former employer, Geodan. They
allowed me to start a geographic library in 1995, which after a number of
incarnations, redesigns, refactorings, previews, a review and even more
Modified: branches/quickbook-dev/libs/geometry/doc/compiling.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/compiling.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/compiling.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -39,9 +39,11 @@
* 9.0 (__msvc__ 2008) [/reported by Trunk report May 8, 2011]
* 8.0 (__msvc__ 2005) [/reported by Trunk report May 8, 2011]
* gcc
+ * gcc 4.7.0 [/reported by Trunk report February 12, 2012]
+ * gcc 4.6.2 [/reported by Trunk report February 12, 2012]
* gcc 4.6.1 [/reported by Trunk report May 8, 2011]
- * gcc 4.6.0 (including C++0x) [/reported by Trunk report May 8, 2011]
- * gcc 4.5.2 (including C++0x) [/reported by Trunk report May 8, 2011]
+ * gcc 4.6.0 [/reported by Trunk report May 8, 2011]
+ * gcc 4.5.2 [/reported by Trunk report May 8, 2011]
* gcc 4.4.0 [/reported by Trunk report May 8, 2011]
* gcc 4.3.4 [/reported by Trunk report March 26, 2011]
* gcc 4.2.1 [/reported by Trunk report May 8, 2011]
Modified: branches/quickbook-dev/libs/geometry/doc/concept/linestring.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/concept/linestring.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/concept/linestring.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,7 +16,7 @@
[concept Linestring..linestring]
A linestring is ['a Curve with linear interpolation between Points].
-([@http://portal.opengeospatial.org/files/?artifact_id=25355 opengeospatial]).
+(__ogc_sf__).
[heading Concept Definition]
@@ -27,9 +27,19 @@
* The type defined by the metafunction `range_value<...>::type` must fulfill
the [link geometry.reference.concepts.concept_point Point Concept]
+[heading Rules]
+
+Besides the Concepts, which are checks on compile-time, there are rules that
+valid linestrings must fulfill. Most algorithms work on any linestring, so either
+self-crossing or not. However, for correct results using the overlay algorithms
+(intersection and difference algorithms in combination with a polygon)
+self-intersections can disturb the process and result in incorrect results.
+
[heading Available Models]
* [link geometry.reference.models.model_linestring model::linestring]
* a std::vector (requires registration)
* a std::deque (requires registration)
+[see_boost_range_sample Linestring]
+
[endsect]
Modified: branches/quickbook-dev/libs/geometry/doc/concept/multi_polygon.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/concept/multi_polygon.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/concept/multi_polygon.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,19 @@
* It must behave like a Boost.Range Random Access Range
* The type defined by the metafunction `range_value<...>::type` must fulfill
the [link geometry.reference.concepts.concept_polygon Polygon Concept]
+
+[heading Rules]
+
+Besides the Concepts, which are checks on compile-time, there are
+rules that valid MultiPolygons must fulfill. See the
+[link geometry.reference.concepts.concept_polygon Polygon Concept] for more information
+on the rules a polygon (and also a multi polygon) must fulfill.
+
+Additionally:
+
+* Individual polygons making up a multi-polygon may not intersect each other,
+ but tangencies are allowed.
+* One polygon might be located within the interior ring of another polygon.
[heading Available Models]
* [link geometry.reference.models.model_multi_polygon model::multi_polygon]
Modified: branches/quickbook-dev/libs/geometry/doc/concept/polygon.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/concept/polygon.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/concept/polygon.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,8 +15,8 @@
[heading Description]
[concept Polygon..polygon]
-A polygon is ['A polygon is a planar surface defined by one exterior boundary and zero or more interior boundaries.]
-([@http://portal.opengeospatial.org/files/?artifact_id=25355 opengeospatial]).
+A polygon is ['A polygon is a planar surface defined by one exterior boundary and zero or more interior boundaries]
+(__ogc_sf__).
So the definition of a Boost.Geometry polygon differs a bit from e.g. Wiki, where a polygon does not have holes. A
polygon of Boost.Geometry is a polygon with or without holes.
@@ -34,6 +34,36 @@
* there must be a specialization of `traits::exterior_ring` with two functions named `get`, returning the exterior ring, one being const, the other being non const
* there must be a specialization of `traits::interior_rings` with two functions named `get`, returning the interior rings, one being const, the other being non const
+[heading Rules]
+
+Besides the Concepts, which are checks on compile-time, there are some other
+rules that valid polygons must fulfill. This follows the opengeospatial rules (see link
+above).
+
+* Polygons are simple geometric objects (See also [@http://en.wikipedia.org/wiki/Simple_polygon wiki]
+ 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.
+* 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.
+* There should be no self intersections, but self tangencies (between
+ exterior/interior rings) are allowed (as long as the interior is a connected
+ point set.
+* There should be no cut lines, spikes or punctures.
+* The interior rings should be located within the exterior ring. Interior rings
+ may not be located within each other.
+
+The algorithms such as intersection, area, centroid, union, etc. do not check
+validity. There will be an algorithm is_valid which checks for
+validity against these rules, at runtime, and which can be called (by the library
+user) before.
+
+If the input is invalid, the output might be invalid too. For example: if a polygon
+which should be closed is not closed, the area will be incorrect.
+
[heading Available Models]
* [link geometry.reference.models.model_polygon polygon]
* a Boost.Polygon polygon_with_holes_data (requires `#include boost/geometry/geometries/adapted/boost_polygon/polygon.hpp>`)
Modified: branches/quickbook-dev/libs/geometry/doc/concept/ring.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/concept/ring.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/concept/ring.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,11 +28,19 @@
* there might be a specialization of `traits::point_order` defining the order or orientation of its points, `clockwise` or `counterclockwise`
* there might be a specialization of `traits::closure` defining the closure, `open` or `closed`
+[heading Rules]
+
+Besides the Concepts, which are checks on compile-time, there are
+rules that valid rings must fulfill. See the
+[link geometry.reference.concepts.concept_polygon Polygon Concept] for more information
+on the rules a polygon (and also a ring) must fulfill.
+
[heading Available Models]
* [link geometry.reference.models.model_ring ring]
* a Boost.Polygon polygon_data (requires `#include boost/geometry/geometries/adapted/boost_polygon/ring.hpp>`)
* a std::vector (requires `#include boost/geometry/geometries/adapted/std_as_ring.hpp>`)
* a std::deque (requires `#include boost/geometry/geometries/adapted/std_as_ring.hpp>`)
+[see_boost_range_sample Ring]
[endsect]
Modified: branches/quickbook-dev/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp (original)
+++ branches/quickbook-dev/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,7 @@
\defgroup convex_hull convex hull: calculate the convex hull of a geometry
\defgroup core core: meta-functions for geometry types
\defgroup correct correct: correct geometries
+\defgroup covered_by covered_by: detect if a geometry is inside or on the border of another geometry, a.o. point-in-polygon (border included)
\defgroup cs coordinate systems
\defgroup difference difference: difference of two geometries
\defgroup disjoint disjoint: detect if geometries are not spatially related
Modified: branches/quickbook-dev/libs/geometry/doc/generated/append_status.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/generated/append_status.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/generated/append_status.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,3 +1,4 @@
+[/NOTE: adapted manually, multi-linestring/multi-polygon do compile but not run!]
[heading Supported geometries]
[table
[[ ][Point][Range]]
@@ -8,6 +9,6 @@
[[Ring][ [$img/ok.png] ][ [$img/ok.png] ]]
[[Polygon][ [$img/ok.png] ][ [$img/ok.png] ]]
[[MultiPoint][ [$img/ok.png] ][ [$img/ok.png] ]]
-[[MultiLinestring][ [$img/ok.png] ][ [$img/ok.png] ]]
-[[MultiPolygon][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ]]
]
Modified: branches/quickbook-dev/libs/geometry/doc/generated/convert_status.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/generated/convert_status.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/generated/convert_status.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,7 +7,7 @@
[[Linestring][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
[[Ring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
[[Polygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
-[[MultiPoint][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
-[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ]]
-[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ]]
]
Modified: branches/quickbook-dev/libs/geometry/doc/generated/within_status.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/generated/within_status.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/generated/within_status.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,5 +1,13 @@
[heading Supported geometries]
[table
-[[ ][Box][Ring][Polygon][MultiPolygon]]
-[[Point][[$img/ok.png]][[$img/ok.png]][[$img/ok.png]][[$img/ok.png]]]
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Segment][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPoint][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
]
Modified: branches/quickbook-dev/libs/geometry/doc/geometry.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/geometry.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/geometry.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -12,7 +12,6 @@
[library Geometry
[quickbook 1.5]
- [version 1.0]
[authors [Gehrels, Barend], [Lalande, Bruno], [Loskot, Mateusz]]
[copyright 2009-2012 Barend Gehrels, Bruno Lalande, Mateusz Loskot]
[purpose Documentation of Boost.Geometry library]
@@ -61,10 +60,6 @@
[template qbk_ret[what] Returns [what]]
[template qbk_out[what] GeometryOut is a [what]]
-[template concept[name type] The [name] Concept describes the requirements for a [type] type.
-All algorithms in Boost.Geometry will check any geometry arguments against the concept requirements.]
-
-
[def __boost__ Boost]
[def __boost_geometry__ Boost.Geometry]
[def __boost_array__ Boost.Array]
@@ -78,6 +73,35 @@
[def __ttmath__ [@http://www.ttmath.org/ ttmath]]
[def __ogc__ [@http://www.opengeospatial.org OGC]]
+[def __ogc_sf__ [@http://www.opengeospatial.org/standards/sfa OGC Simple Feature Specification]]
+
+[/Templates]
+[template concept[name type]
+The [name] Concept describes the requirements for a [type] type.
+All algorithms in Boost.Geometry will check any geometry arguments against the concept requirements.
+]
+
+[template heading_conformance_no_ogc[function]
+[heading Conformance]
+The function [function] is not defined by OGC.
+]
+
+[template heading_conformance_ogc[function ogc_function]
+[heading Conformance]
+The function [function] implements function [ogc_function] from the __ogc_sf__.
+]
+
+[template conformance_std[function std_function]
+The function [function] conforms to the [std_function] of the C++ std-library.
+]
+
+[template see_boost_range_sample[concept]
+[note See also the sample in the [@../../../range/doc/html/range/reference/extending/method_2.html Boost.Range documentation]
+ showing how a type can be adapted to a Boost.Range to fulfill the concept of a [concept]
+]
+]
+
+
[heading Contributions]
Boost.Geometry contains contributions by:
Modified: branches/quickbook-dev/libs/geometry/doc/html/index.html
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/html/index.html (original)
+++ branches/quickbook-dev/libs/geometry/doc/html/index.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,10 +1,10 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Chapter 1. Geometry 1.0</title>
+<title>Chapter 1. Geometry</title>
<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="index.html" title="Chapter 1. Geometry 1.0">
+<link rel="home" href="index.html" title="Chapter 1. Geometry">
<link rel="next" href="geometry/introduction.html" title="Introduction">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -21,7 +21,7 @@
<div class="chapter">
<div class="titlepage"><div>
<div><h2 class="title">
-<a name="geometry"></a>Chapter 1. Geometry 1.0</h2></div>
+<a name="geometry"></a>Chapter 1. Geometry</h2></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Barend</span> <span class="surname">Gehrels</span>
</h3></div></div>
@@ -31,9 +31,9 @@
<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 © 2012 Barend Gehrels, Bruno Lalande, Mateusz Loskot</p></div>
+<div><p class="copyright">Copyright © 2009 -2012 Barend Gehrels, Bruno Lalande, Mateusz Loskot</p></div>
<div><div class="legalnotice">
-<a name="id666441"></a><p>
+<a name="id876741"></a><p>
Distributed under 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)
</p>
@@ -43,37 +43,38 @@
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="section">Introduction</span></dt>
-<dt><span class="section">Quick Start</span></dt>
-<dt><span class="section">Design Rationale</span></dt>
+<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">Indexes</span></dt>
<dd><dl>
-<dt><span class="section">Reference matrix</span></dt>
+<dt><span class="section"> Reference matrix</span></dt>
<dt><span class="section">Alphabetical Index</span></dt>
</dl></dd>
-<dt><span class="section">Reference</span></dt>
+<dt><span class="section"> Reference</span></dt>
<dd><dl>
-<dt><span class="section">Access Functions</span></dt>
-<dt><span class="section">Adapted models</span></dt>
-<dt><span class="section">Algorithms</span></dt>
-<dt><span class="section">Arithmetic</span></dt>
-<dt><span class="section">Concepts</span></dt>
-<dt><span class="section">Constants</span></dt>
-<dt><span class="section">Coordinate Systems</span></dt>
-<dt><span class="section">Core Metafunctions</span></dt>
-<dt><span class="section">Enumerations</span></dt>
-<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">Strategies</span></dt>
-<dt><span class="section">Views</span></dt>
+<dt><span class="section"> Access Functions</span></dt>
+<dt><span class="section"> Adapted models</span></dt>
+<dt><span class="section"> Algorithms</span></dt>
+<dt><span class="section"> Arithmetic</span></dt>
+<dt><span class="section"> Concepts</span></dt>
+<dt><span class="section"> Constants</span></dt>
+<dt><span class="section"> Coordinate Systems</span></dt>
+<dt><span class="section"> Core Metafunctions</span></dt>
+<dt><span class="section"> Enumerations</span></dt>
+<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"> Strategies</span></dt>
+<dt><span class="section"> Views</span></dt>
</dl></dd>
-<dt><span class="section">About this documentation</span></dt>
+<dt><span class="section"> Release Notes</span></dt>
+<dt><span class="section"> About this documentation</span></dt>
<dt><span class="section">Acknowledgments</span></dt>
</dl>
</div>
<a name="geometry.contributions"></a><h3>
-<a name="geometry.contributions-heading"></a>
+<a name="id876760"></a>
<a class="link" href="index.html#geometry.contributions">Contributions</a>
</h3>
<p>
@@ -87,24 +88,24 @@
Alfredo Correa (adaption of Boost.Array)
</li>
<li class="listitem">
- Adam Wulkiewicz (spatial indexes) <sup>[<a name="id697753" href="#ftn.id697753" class="footnote">1</a>]</sup>
+ Adam Wulkiewicz (spatial indexes) <sup>[<a name="id876797" href="#ftn.id876797" class="footnote">1</a>]</sup>
</li>
<li class="listitem">
- Federico Fernández (spatial indexes) <sup>[<a name="id697767" href="#ftn.id697767" class="footnote">2</a>]</sup>
+ Federico Fernández (spatial indexes) <sup>[<a name="id876812" href="#ftn.id876812" class="footnote">2</a>]</sup>
</li>
</ul></div>
<div class="footnotes">
<br><hr width="100" align="left">
-<div class="footnote"><p><sup>[<a name="ftn.id697753" href="#id697753" class="para">1</a>] </sup>
+<div class="footnote"><p><sup>[<a name="ftn.id876797" href="#id876797" class="para">1</a>] </sup>
Currently an extension
</p></div>
-<div class="footnote"><p><sup>[<a name="ftn.id697767" href="#id697767" class="para">2</a>] </sup>
+<div class="footnote"><p><sup>[<a name="ftn.id876812" href="#id876812" 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: January 13, 2012 at 11:52:50 GMT</small></p></td>
+<td align="left"><p><small>Last revised: February 12, 2012 at 17:00:38 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
Modified: branches/quickbook-dev/libs/geometry/doc/introduction.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/introduction.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/introduction.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -37,27 +37,34 @@
* conventions from boost
* conventions from the std library
-* conventions and names from one of the __ogc__ standards on geometry
+* conventions and names from one of the __ogc__ standards on geometry and, more
+ specificly, from the __ogc_sf__
-The library was released with Boost 1.47.0 and from that point on it is oficially part of the Boost C++ Libraries.
+The library was first released with Boost 1.47.0 and from that point on it is
+officially part of the Boost C++ Libraries.
-Latest stable version of the source code is included in the [@http://www.boost.org/users/download/ Boost packaged releases].
-It can also be downloaded from the current [@http://svn.boost.org/svn/boost/branches/release Boost release branch]
+Latest stable version of the source code is included in the
+[@http://www.boost.org/users/download/ Boost packaged releases].
+It can also be downloaded from the current
+[@http://svn.boost.org/svn/boost/branches/release Boost release branch]
in the Boost Subversion repository.
-The library development upstream is available from the [@http://svn.boost.org/svn/boost/trunk Boost trunk] in the Boost Subversion repository.
-
-Note that the library [*extensions] are not distributed in the official Boost releases, but only available
-in the [@http://svn.boost.org/svn/boost/trunk/boost/geometry/extensions/ Boost trunk]
+The library development upstream is available from the
+[@http://svn.boost.org/svn/boost/trunk Boost trunk] in the Boost Subversion
+repository.
+
+Note that the library [*extensions] are not distributed in the official Boost
+releases, but only available
+in the [@http://svn.boost.org/svn/boost/trunk/boost/geometry/extensions/ Boost
+trunk]
and that they are subject to change.
__boost_geometry__ was accepted by Boost at November 28, 2009
([@http://permalink.gmane.org/gmane.comp.lib.boost.announce/246 review report]).
-There are two mailing lists
-where __boost_geometry__ is discussed: the boost developers list, and also the
-[@http://lists.osgeo.org/mailman/listinfo/ggl GGL mailing list] at osgeo, at which, at the moment of writing, more than 70 people
-are subscribed. The mailing list is also accessible from
-[@http://boost-geometry.203548.n3.nabble.com/ Nabble] as Boost Geometry.
+There is a __boost_geometry__ [@http://lists.boost.org/mailman/listinfo.cgi/geometry
+mailing list]. The mailing list and its messages are also accessible from
+[@http://boost-geometry.203548.n3.nabble.com/ Nabble] as Boost Geometry. Also on
+the Boost Developers list and on the Boost Users list __boost_geometry__ is discussed.
[endsect]
Modified: branches/quickbook-dev/libs/geometry/doc/make_qbk.py
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/make_qbk.py (original)
+++ branches/quickbook-dev/libs/geometry/doc/make_qbk.py 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -68,7 +68,7 @@
call_doxygen()
algorithms = ["append", "assign", "make", "clear"
- , "area", "buffer", "centroid", "convert", "correct"
+ , "area", "buffer", "centroid", "convert", "correct", "covered_by"
, "convex_hull", "difference", "disjoint", "distance"
, "envelope", "equals", "expand", "for_each", "intersection", "intersects"
, "length", "num_geometries", "num_interior_rings", "num_points"
@@ -148,4 +148,5 @@
group_to_quickbook("register")
group_to_quickbook("enum")
+# Use either bjam or b2 or ../../../b2 (the last should be done on Release branch)
os.system("bjam")
Modified: branches/quickbook-dev/libs/geometry/doc/other/testcases/multi_overlay_cases.ppt
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/geometry/doc/other/testcases/overlay_line_poly_cases.ppt
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/geometry/doc/other/testcases/relate.ppt
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/geometry/doc/quickref.xml
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/quickref.xml (original)
+++ branches/quickbook-dev/libs/geometry/doc/quickref.xml 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -112,8 +112,6 @@
</entry>
<entry valign="top">
<bridgehead renderas="sect3">1-dimensional (adapted)</bridgehead>
- <simplelist type="vert" columns="1">
- </simplelist>
</entry>
<entry valign="top">
<bridgehead renderas="sect3">2-dimensional (adapted)</bridgehead>
@@ -319,6 +317,7 @@
</simplelist>
<bridgehead renderas="sect3">Predicates</bridgehead>
<simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.covered_by">covered_by</link></member>
<member><link linkend="geometry.reference.algorithms.disjoint">disjoint</link></member>
<member><link linkend="geometry.reference.algorithms.equals">equals</link></member>
<member><link linkend="geometry.reference.algorithms.intersects">intersects</link></member>
Modified: branches/quickbook-dev/libs/geometry/doc/readme.txt
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/readme.txt (original)
+++ branches/quickbook-dev/libs/geometry/doc/readme.txt 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -30,3 +30,15 @@
because it is used in the final URL and we want to have "reference" in it]
src: examples used in documentation and tools (doxygen_xml2qbk)
+Per new algorithm (e.g. foo), one should add:
+1) in file boost/geometry/algorithms/foo.hpp, include a "\ingroup foo" in the doxygen comments
+2) in file doc/doxy/doxygen_input/groups/groups.hpp, define the group "foo"
+3) in file doc/make_qbk.py, include the algorithm "foo"
+4) in file doc/reference.qbk, include the foo.qbk ([include generated/foo.qbk])
+5) in file doc/quickref.xml, include a section on foo conform other sections
+6) in file doc/src/docutils/tools/support_status/support_status.cpp include the algorithm (3 places) (optionally)
+7) in file doc/reference/foo.qbk (to be created), include the support status and write other text, and include examples (optionally)
+8) in file doc/imports.qbk, include the example foo.cpp (if any)
+9) create file doc/src/examples/algorithm/foo.cpp (optional)
+
+
Modified: branches/quickbook-dev/libs/geometry/doc/reference.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -84,6 +84,10 @@
[include generated/convex_hull.qbk]
[include generated/correct.qbk]
+[section:covered_by covered_by]
+[include generated/covered_by.qbk]
+[endsect]
+
[include generated/difference.qbk]
[include generated/disjoint.qbk]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/append.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/append.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/append.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,12 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ append]
+
+[heading_conformance_no_ogc __this_function__]
+
+[include generated/append_status.qbk]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/area.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/area.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/area.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ area]
+
+[heading_conformance_ogc __this_function__..Area]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/buffer.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/buffer.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/buffer.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,13 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ buffer]
+
+[heading_conformance_ogc __this_function__..Buffer]
+[note The current implemetation only enlarges a box, which is not defined by OGC.
+ A next version of the library will contain a more complete implementation
+]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/centroid.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/centroid.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/centroid.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ centroid]
+
+[heading_conformance_ogc __this_function__..Centroid]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/clear.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/clear.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/clear.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,6 +11,10 @@
=============================================================================/]
[def __is_cleared__ is cleared]
+[def __this_function__ clear]
+
+[heading_conformance_no_ogc __this_function__]
+[conformance_std __this_function__..__this_function__() method]
[include generated/clear_status.qbk]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/comparable_distance.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/comparable_distance.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/comparable_distance.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ comparable_distance]
+
+[heading_conformance_no_ogc __this_function__]
+
[heading Behaviour]
There is no (not yet) version with a strategy.
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/convert.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/convert.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/convert.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,11 +10,14 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
-[tip convert is not defined within OGC or ISO]
-[tip convert is modelled as source -> target
- (where assign is modelled as target := source)]
+[def __this_function__ convert]
+
+[heading_conformance_no_ogc __this_function__]
[include generated/convert_status.qbk]
+[note In this status matrix above: columns are source types
+ and rows are target types. So a box can be converted to a ring, polygon
+ or multi-polygon, but not vice versa.]
[heading Complexity]
Linear
@@ -26,4 +29,5 @@
[heading See also]
* [link geometry.reference.algorithms.assign.assign assign]
-
+[note convert is modelled as source -> target
+ (where assign is modelled as target := source)]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/convex_hull.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/convex_hull.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/convex_hull.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ convex_hull]
+
+[heading_conformance_ogc __this_function__..ConvexHull()]
+
[include generated/convex_hull_status.qbk]
[heading Complexity]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/correct.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/correct.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/correct.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,6 +11,11 @@
=============================================================================/]
[def __corrected__ is corrected]
+[def __this_function__ correct]
+
+[heading_conformance_no_ogc __this_function__]
+
+[include generated/correct_status.qbk]
[heading Behavior]
[table
@@ -22,8 +27,6 @@
[[__other__][__does_nothing__]]
]
-[tip Correct is not defined within OGC or ISO]
-
[heading Complexity]
Linear
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -8,7 +8,13 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
-[include reference/algorithms/overlay_behavior.qbk]
+[def __this_function__ difference]
+
+[heading_conformance_ogc __this_function__..Difference]
+
+[include reference/algorithms/difference_behavior.qbk]
+
+[include reference/algorithms/geometry_rules.qbk]
[heading Example]
[difference] [difference_output]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference_inserter.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference_inserter.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/difference_inserter.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -8,7 +8,9 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
-[include reference/algorithms/overlay_behavior.qbk]
+[include reference/algorithms/difference_behavior.qbk]
+
+[include reference/algorithms/geometry_rules.qbk]
[heading Example]
[difference_inserter] [difference_inserter_output]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/distance.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/distance.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/distance.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ distance]
+
+[heading_conformance_ogc __this_function__..Distance]
+
[include generated/distance_status.qbk]
[heading Complexity]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/equals.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/equals.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/equals.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ equals]
+
+[heading_conformance_ogc __this_function__..Equals]
+
[include generated/equals_status.qbk]
[heading Complexity]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/expand.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/expand.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/expand.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,8 +10,12 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ expand]
[def __apply_expand__ Box is expanded to include the specified]
+[heading_conformance_no_ogc __this_function__]
+
+
[heading Behavior]
[table
[[Case] [Behavior] ]
@@ -20,7 +24,6 @@
[[__box__ / __other__][__nyiversion__]]
]
-[tip Expand is not defined within OGC or ISO]
[note To use expand with another geometry type then specified, use expand(make_envelope<box_type>(geometry)]
[heading Complexity]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/intersection.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/intersection.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/intersection.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,14 +10,20 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ intersection]
+
+[heading_conformance_ogc __this_function__..Intersection]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
[[[qbk_out __point__]][Calculates intersection points of input geometries]]
[[[qbk_out __linestring__]][Calculates intersection linestrings of input geometries (NYI)]]
-[[[qbk_out __polygon__]][Calculates intersection polygons input (multi)polygons and/or boxes]]
+[[[qbk_out __polygon__]][Calculates intersection polygons of input (multi)polygons and/or boxes]]
]
+[include reference/algorithms/geometry_rules.qbk]
+
[heading Example]
[intersection]
[intersection_output]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/intersects.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/intersects.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/intersects.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,11 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ intersects]
+
+[heading_conformance_ogc __this_function__..Intersects]
+[? __one_parameter__ The version with one parameter is additional and not described in the OGC standard]
+
[heading Examples]
[intersects_linestring]
[intersects_linestring_output]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/length.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/length.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/length.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ length]
+
+[heading_conformance_ogc __this_function__..Length]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_geometries.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_geometries.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_geometries.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ num_geometries]
+
+[heading_conformance_ogc __this_function__..NumGeometries]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_interior_rings.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_interior_rings.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_interior_rings.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,11 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ num_interior_ring]
+
+[heading_conformance_ogc __this_function__..NumInteriorRing]
+[note __boost_geometry__ adds an "s"]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_points.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_points.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/num_points.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,12 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ num_points]
+
+[heading_conformance_ogc __this_function__..NumPoints]
+[note __this_function__ can be called for any geometry and not just linestrings
+(as the standard describes)]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Deleted: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/overlay_behavior.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/overlay_behavior.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,19 +0,0 @@
-[/============================================================================
- Boost.Geometry (aka GGL, Generic Geometry Library)
-
- Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
- 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)
-=============================================================================/]
-
-[heading Behavior]
-[table
-[[Case] [Behavior] ]
-[[__2dim__][All combinations of: box, ring, polygon, multi_polygon]]
-[[__other__][__nyiversion__]]
-[[__sph__][__nyiversion__]]
-[[Three dimensional][__nyiversion__]]
-]
-
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/perimeter.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/perimeter.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/perimeter.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,14 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ perimeter]
+
+[heading_conformance_no_ogc __this_function__]
+[note PostGIS contains an algorithm with the same name and the
+ same functionality.
+ See the [@http://www.postgis.org/docs/ST_Perimeter.html PostGIS documentation].
+]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/reverse.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/reverse.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/reverse.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ reverse]
+
+[heading_conformance_no_ogc __this_function__]
+[conformance_std __this_function__..std::__this_function__ function]
[heading Behavior]
[table
@@ -27,8 +31,6 @@
[note The reverse of a (multi)polygon or ring might make a valid geometry invalid because the (counter)clockwise orientation reverses.]
-[tip Conforms to std::reverse functionality. It is not defined within OGC or ISO]
-
[heading Complexity]
Linear
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/simplify.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/simplify.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/simplify.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,23 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ simplify]
+
+[heading_conformance_no_ogc __this_function__]
+[note PostGIS contains an algorithm with the same name and the
+ same functionality.
+ See the [@http://www.postgis.org/docs/ST_Simplify.html PostGIS documentation].
+]
+[note SQL Server contains an algorithm Reduce() with the same functionality.
+ See the [@http://msdn.microsoft.com/en-us/library/bb933814.aspx MSDN documentation].
+]
+
+[heading Behavior]
+Simplification is done using [@http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm Douglas-Peucker] (if the default strategy is used).
+[note Geometries might become invalid by using simplify. The simplification
+process might create self-intersections.
+]
+
[heading Examples]
[simplify]
[simplify_output]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/sym_difference.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/sym_difference.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/sym_difference.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,13 +10,13 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
-[heading Behavior]
-[table
-[[Case] [Behavior] ]
-[[__2dim__][All combinations of: box, ring, polygon, multi_polygon]]
-[[__other__][Not supported]]
+[def __this_function__ sym_difference]
-]
+[heading_conformance_ogc __this_function__..SymDifference]
+
+[include reference/algorithms/difference_behavior.qbk]
+
+[include reference/algorithms/geometry_rules.qbk]
[heading Example]
[sym_difference]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/transform.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/transform.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/transform.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ transform]
+
+[heading_conformance_no_ogc __this_function__]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/union.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/union.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/union.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,11 +10,19 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
+[def __this_function__ union]
+
+[heading_conformance_ogc __this_function__..Union]
+[note __boost_geometry__ adds an underscore to avoid using the `union` keyword]
+
[heading Behavior]
[table
[[Case] [Behavior] ]
+[[[qbk_out __polygon__]][Calculates union polygons of input (multi)polygons and/or boxes]]
]
+[include reference/algorithms/geometry_rules.qbk]
+
[heading Example]
[union]
[union_output]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/unique.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/unique.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/unique.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,6 +11,10 @@
=============================================================================/]
[def __applies_unique__ Removes all consecutive duplicate points]
+[def __this_function__ unique]
+
+[heading_conformance_no_ogc __this_function__]
+[conformance_std __this_function__..std::__this_function__ function]
[heading Behavior]
[table
@@ -26,8 +30,6 @@
[[__multi_polygon__][__applies_unique__ in all contained polygons (all rings)]]
]
-[tip Conforms to std::unique functionality. It is not defined within OGC or ISO]
-
[heading Complexity]
Linear
Modified: branches/quickbook-dev/libs/geometry/doc/reference/algorithms/within.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/algorithms/within.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/algorithms/within.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,8 +10,16 @@
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================/]
-[include generated/within_status.qbk]
+[def __this_function__ within]
+
+[heading_conformance_ogc __this_function__..Within]
+[note OGC defines within as completely within and not on the border. See the notes for within / on the border]
+[include generated/within_status.qbk]
+[note In this status matrix above: columns are types of first parameter
+ and rows are types of second parameter. So a point can be checked to be
+ within a polygon, but not vice versa.]
+
[heading Notes]
If a point is located exactly on the border of a geometry, the result depends on the strategy.
The default strategy ([link geometry.reference.strategies.strategy_within_winding Winding (coordinate system agnostic)])
@@ -23,3 +31,5 @@
[heading Complexity]
Linear
+[heading See also]
+* [link geometry.reference.algorithms.covered_by covered_by]
Modified: branches/quickbook-dev/libs/geometry/doc/reference/geometries/point.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/reference/geometries/point.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/reference/geometries/point.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,3 +13,6 @@
[heading Examples]
[point]
[point_output]
+
+[include reference/geometries/point_assign_warning.qbk]
+
Modified: branches/quickbook-dev/libs/geometry/doc/release_notes.qbk
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/release_notes.qbk (original)
+++ branches/quickbook-dev/libs/geometry/doc/release_notes.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,40 +13,74 @@
[section:release_notes Release Notes]
[/=================]
+[heading Boost 1.50]
+[/=================]
+
+[*Breaking changes]
+
+[*Bugfixes]
+* the return type of comparable projected point strategy for integer points was wrong (integer), fixed
+
+[*Solved tickets]
+
+* [@https://svn.boost.org/trac/boost/ticket/6585 6585] patch for alternative syntax multipoint, applied
+* [@https://svn.boost.org/trac/boost/ticket/6584 6584] patch for bug in distance, applied
+* [@https://svn.boost.org/trac/boost/ticket/5730 5730] same issue as 6584, fixed
+* [@https://svn.boost.org/trac/boost/ticket/6166 6166] patch for missing transformation, applied
+
+[*Additional functionality]
+
+[*Documentation]
+
+[*Internal changes]
+
+
+[/=================]
[heading Boost 1.49]
[/=================]
+[*Breaking changes]
+
+* point_xy was accidentally included in one of the headerfiles. If the point_xy class is used, it should be included explicitly now.
+
[*Bugfixes]
* bugfix: distance for multi-geometries ignored specified distance strategy. Fixed
-* bugfix in difference for polygon/multi_polygon (reported 2011/10/24 on GGL-list)
+* bugfix: difference for polygon/multi_polygon (reported 2011/10/24 on GGL-list)
* bugfix: raise exception for calculation of distances of multi-geometrie(s) where one of them is empty
* bugfix: multi DSV did not correctly use settings, fixed
* bugfix: self-intersections could sometimes be missed (introduced in 1.48), fixed
* bugfix: convex hull crashed on empty range (e.g. empty multi point), fixed
+* bugfix: area/centroid/side/intersection/distance did not work for "int" type filled with large (but not overflowing) integers. Fixed.
+* bugfix: disjoint/intersect did not work for degenerate linestrings. Fixed.
+* bugfix: covered_by did not compile for a ring. Fixed.
[*Solved tickets]
+* [@https://svn.boost.org/trac/boost/ticket/6019 6019] convex_hull / area, fixed.
+* [@https://svn.boost.org/trac/boost/ticket/6021 6021] convex_hull / append (multipoint), fixed.
* [@https://svn.boost.org/trac/boost/ticket/6028 6028] Documentation: closure, fixed.
* [@https://svn.boost.org/trac/boost/ticket/6178 6178] Missing headerfile, fixed.
-* [@https://svn.boost.org/trac/boost/ticket/6021 6021] convex hull of multipoint, fixed.
[*Additional functionality]
* support for line/polygon intersections and differences
* support for convert of segment/box of different point types
* support for append for multi point
-* scalar functions (distance, area, length, perimeter) now throw an empty_input_exception on empty input
+* the scalar function distance now throws an empty_input_exception on empty input
[*Documentation]
-* updated support status
+* updated support status in several algorithms
+* updated conformance to OGC or std
+* other updates and fixes
[*Internal changes]
-* updates in specializations/not_implemented for distance/convert/assign/area
+* updates in specializations/not_implemented for distance/convert/assign/area/with/covered_by
* move of wkt/dsv to io folder, making domains redundant
-* strategy concepts assigned to zero to avoid clang warnings (patched by Vishnu)
+* warnings: strategy concepts assigned to zero to avoid clang warnings (patched by Vishnu)
+* warnings: there were several unused parameters, for which gcc/clang warned (patched by Christophe)
[/=================]
[heading Boost 1.48]
Modified: branches/quickbook-dev/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp (original)
+++ branches/quickbook-dev/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,12 +20,21 @@
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/geometries/geometries.hpp>
#include <boost/geometry/multi/geometries/multi_geometries.hpp>
-#include <boost/geometry/multi/multi.hpp>
#include <boost/geometry/algorithms/append.hpp>
#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
#include <boost/geometry/algorithms/convert.hpp>
#include <boost/geometry/algorithms/convex_hull.hpp>
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/covered_by.hpp>
#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/multi/algorithms/append.hpp>
+#include <boost/geometry/multi/algorithms/area.hpp>
+#include <boost/geometry/multi/algorithms/clear.hpp>
+#include <boost/geometry/multi/algorithms/convert.hpp>
+#include <boost/geometry/multi/algorithms/correct.hpp>
+#include <boost/geometry/multi/algorithms/covered_by.hpp>
+#include <boost/geometry/multi/algorithms/distance.hpp>
#include <boost/geometry/strategies/strategies.hpp>
#include "text_outputter.hpp"
@@ -71,7 +80,10 @@
DECLARE_UNARY_ALGORITHM (clear)
DECLARE_BINARY_ALGORITHM(convert)
DECLARE_UNARY_ALGORITHM (convex_hull)
+DECLARE_UNARY_ALGORITHM (correct)
+DECLARE_BINARY_ALGORITHM(covered_by)
DECLARE_BINARY_ALGORITHM(distance)
+DECLARE_BINARY_ALGORITHM(within)
template <template <typename> class Dispatcher, typename Outputter, typename G>
@@ -158,7 +170,7 @@
Outputter outputter(name);
outputter.header(name);
- outputter.template table_header();
+ outputter.table_header();
boost::mpl::for_each<Types>(unary_test<Dispatcher, Outputter>(outputter));
outputter.table_footer();
@@ -185,7 +197,10 @@
test_unary_algorithm<clear, all_types, OutputFactory>("clear");
test_binary_algorithm<convert, all_types, all_types, OutputFactory>("convert");
test_unary_algorithm<convex_hull, all_types, OutputFactory>("convex_hull");
+ test_unary_algorithm<correct, all_types, OutputFactory>("correct");
+ test_binary_algorithm<covered_by, all_types, all_types, OutputFactory>("covered_by");
test_binary_algorithm<distance, all_types, all_types, OutputFactory>("distance");
+ test_binary_algorithm<within, all_types, all_types, OutputFactory>("within");
}
Modified: branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/append.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/append.cpp (original)
+++ branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/append.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -32,14 +32,14 @@
// Append a range
append(poly, tuple_list_of(0, 0)(0, 10)(11, 11)(10, 0)); /*< tuple_list_of delivers a range and can therefore be used in boost::geometry::append >*/
- // Append a point (in this case the closing point
+ // Append a point (in this case the closing point)
append(poly, make_tuple(0, 0));
// Create an interior ring (append does not do this automatically)
boost::geometry::interior_rings(poly).resize(1);
// Append a range to the interior ring
- append(poly, tuple_list_of(2, 2)(2, 5)(6, 6)(5, 2), 0);
+ append(poly, tuple_list_of(2, 2)(2, 5)(6, 6)(5, 2), 0); /*< The last parameter ring_index 0 denotes the first interior ring >*/
// Append a point to the first interior ring
append(poly, make_tuple(2, 2), 0);
Modified: branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/convex_hull.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/convex_hull.cpp (original)
+++ branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/convex_hull.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -37,7 +37,7 @@
<< "hull: " << dsv(hull) << std::endl
;
- /*<-*/ create_svg("envelope.svg", poly, hull); /*->*/
+ /*<-*/ create_svg("hull.svg", poly, hull); /*->*/
return 0;
}
Modified: branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/expand.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/expand.cpp (original)
+++ branches/quickbook-dev/libs/geometry/doc/src/examples/algorithms/expand.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -14,6 +14,8 @@
#include <list>
#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
int main()
{
Modified: branches/quickbook-dev/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,10 @@
//
// Linestring Polygon Overlay Example
+// NOTE: this example is obsolete. Boost.Geometry can now
+// overlay linestrings/polygons.
+// This sample will be removed in next version.
+
#include <fstream>
#include <iostream>
#include <string>
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/contrib/gd-2.0.35/boost_geometry_readme.txt
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/contrib/gd-2.0.35/boost_geometry_readme.txt (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/contrib/gd-2.0.35/boost_geometry_readme.txt 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -8,11 +8,13 @@
Download gd from
-http://www.libgd.og/
+http://www.libgd.org/
+(currently from: https://bitbucket.org/pierrejoye/gd-libgd/downloads)
+
and extract to this folder.
+(currently: extract from ../src/ into this folder)
Nothing has to be installed.
This is used in x02_gd_example.cpp
-
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/soci.vsprops
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/soci.vsprops (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/soci.vsprops 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,10 +7,10 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""$(SOCI_ROOT)/src/core";"$(SOCI_ROOT)/src/backends/postgresql""
- PreprocessorDefinitions="SOCI_USE_BOOST"
+ PreprocessorDefinitions="SOCI_USE_BOOST;SOCI_LIB_PREFIX=\"libsoci_\";SOCI_LIB_SUFFIX=\".so\""
/>
<UserMacro
Name="SOCI_ROOT"
- Value="contrib/soci-3.0.0"
+ Value="contrib/soci-3.1.0"
/>
</VisualStudioPropertySheet>
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x02_gd_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x02_gd_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x02_gd_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -27,14 +27,12 @@
#include <boost/foreach.hpp>
-#include <boost/geometry/geometry.hpp>
-#include <boost/geometry/multi/multi.hpp>
-#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
#include <boost/geometry/extensions/gis/latlong/latlong.hpp>
#include <boost/geometry/extensions/gis/geographic/strategies/area_huiller_earth.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
-
#include <gd.h>
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x02_gd_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x02_gd_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x02_gd_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -182,6 +182,10 @@
>
</File>
<File
+ RelativePath="$(GD)\gd_color.c"
+ >
+ </File>
+ <File
RelativePath="$(GD)\gd_gd.c"
>
</File>
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_a_soci_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_a_soci_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_a_soci_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -36,7 +36,6 @@
#include <boost/geometry/geometry.hpp>
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_a_soci_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_a_soci_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_a_soci_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -210,6 +210,26 @@
</FileConfiguration>
</File>
<File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="$(SOCI_ROOT)\src\backends\postgresql\factory.cpp"
>
<FileConfiguration
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_b_soci_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_b_soci_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_b_soci_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -210,6 +210,26 @@
</FileConfiguration>
</File>
<File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="$(SOCI_ROOT)\src\backends\postgresql\factory.cpp"
>
<FileConfiguration
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_c_soci_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_c_soci_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_c_soci_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -210,6 +210,26 @@
</FileConfiguration>
</File>
<File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="$(SOCI_ROOT)\src\backends\postgresql\factory.cpp"
>
<FileConfiguration
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_d_soci_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_d_soci_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_d_soci_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,12 +28,13 @@
#include <string>
#include <vector>
-#include <boost/geometry/geometry.hpp>
-#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry.hpp>
+
#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
#include <boost/geometry/extensions/gis/io/wkb/read_wkb.hpp>
#include <boost/geometry/extensions/gis/io/wkb/utility.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
int main()
{
@@ -65,7 +66,7 @@
if (!boost::geometry::hex2wkb(*it, std::back_inserter(wkb)))
throw std::runtime_error("hex2wkb translation failed");
- boost::geometry::model::d2::polygon parcel;
+ boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > parcel;
if (!boost::geometry::read_wkb(wkb.begin(), wkb.end(), parcel))
throw std::runtime_error("read_wkb failed");
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_d_soci_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_d_soci_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x03_d_soci_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -210,6 +210,26 @@
</FileConfiguration>
</File>
<File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="$(SOCI_ROOT)\src\backends\postgresql\factory.cpp"
>
<FileConfiguration
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,13 +18,13 @@
#include <boost/scoped_array.hpp>
#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
+
#include <boost/geometry/geometries/register/point.hpp>
#include <boost/geometry/geometries/register/ring.hpp>
-#include <boost/geometry/multi/multi.hpp>
#include <boost/geometry/extensions/algorithms/selected.hpp>
-#include <boost/geometry/io/wkt/read.hpp>
-#include <boost/geometry/multi/io/wkt/read.hpp>
// wxWidgets, if these headers are NOT found, adapt include path (and lib path)
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x05_shapelib_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x05_shapelib_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x05_shapelib_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,8 +20,8 @@
#include "shapefil.h"
#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
-#include <boost/geometry/io/wkt/iomanip.hpp>
using namespace boost::geometry;
Modified: branches/quickbook-dev/libs/geometry/example/with_external_libs/x06_qt_world_mapper.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example/with_external_libs/x06_qt_world_mapper.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example/with_external_libs/x06_qt_world_mapper.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,13 +23,15 @@
#include <boost/foreach.hpp>
#include <boost/geometry/geometry.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
+
#include <boost/geometry/geometries/register/point.hpp>
#include <boost/geometry/geometries/register/ring.hpp>
-#include <boost/geometry/multi/multi.hpp>
#include <boost/geometry/extensions/algorithms/selected.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -9,8 +9,10 @@
#include "shapefil.h"
#include <boost/noncopyable.hpp>
-#include <boost/geometry/geometry.hpp>
-#include <boost/geometry/multi/multi.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
#include <boost/geometry/extensions/gis/io/shapelib/shape_creator.hpp>
#include <boost/geometry/extensions/gis/io/shapelib/shp_create_object.hpp>
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\shapelib"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\..\boost.vsprops;.\shapelib.vsprops"
+ InheritedPropertySheets="..\..\..\boost.vsprops;.\shapelib.vsprops"
CharacterSet="1"
>
<Tool
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../../..;../../../.."
+ AdditionalIncludeDirectories="../../../../../..;../../../.."
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -93,7 +93,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\shapelib"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\..\boost.vsprops;.\shapelib.vsprops"
+ InheritedPropertySheets="..\..\..\boost.vsprops;.\shapelib.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -114,7 +114,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../../..;../../../.."
+ AdditionalIncludeDirectories="../../../../../..;../../../.."
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.vsprops
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.vsprops (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/io/shapelib/shapelib.vsprops 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,6 @@
/>
<UserMacro
Name="SHAPELIB"
- Value="../../../../with_external_libs/contrib/shapelib-1.3.0b2"
+ Value="../../../../example/with_external_libs/contrib/shapelib-1.3.0b2"
/>
</VisualStudioPropertySheet>
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/distance_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/distance_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/distance_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -61,12 +61,12 @@
transform(city3, city3_rad);
/*
- projection::sterea_ellipsoid<model::ll::point<radian>, xy_point> proj
- (projection::init(
+ projections::sterea_ellipsoid<model::ll::point<radian>, xy_point> proj
+ (projections::init(
"+lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m"));
*/
- projection::laea_ellipsoid<model::ll::point<radian>, xy_point> proj
- (projection::init(
+ projections::laea_ellipsoid<model::ll::point<radian>, xy_point> proj
+ (projections::init(
" +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m"));
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/distance_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/distance_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/distance_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\distance_example"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../.."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS"
MinimalRebuild="true"
RuntimeLibrary="3"
@@ -96,7 +96,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\distance_example"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -117,7 +117,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../.."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/point_ll_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/point_ll_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/latlong/point_ll_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\point_ll_example"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../.."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
RuntimeLibrary="3"
@@ -96,7 +96,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\point_ll_example"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -117,7 +117,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../.."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,3 +16,5 @@
exe p01_projection_example : p01_projection_example.cpp ;
exe p02_projfactory_example : p02_projfactory_example.cpp ;
exe p03_projmap_example : p03_projmap_example.cpp ;
+exe p04_example : p04_example.cpp ;
+exe p05_example : p05_example.cpp ;
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p01_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p01_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p01_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\p01_example"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../.."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS"
MinimalRebuild="true"
RuntimeLibrary="3"
@@ -95,7 +95,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\p01_example"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -120,7 +120,7 @@
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
WholeProgramOptimization="false"
- AdditionalIncludeDirectories="../../../../../.."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS"
GeneratePreprocessedFile="0"
RuntimeLibrary="0"
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p01_projection_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p01_projection_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p01_projection_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -8,10 +8,10 @@
//
// Projection example 1, direct
-#include <boost/geometry/geometry.hpp>
+#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/extensions/algorithms/parse.hpp>
-#include <boost/geometry/io/wkt/iomanip.hpp>
+
#include <boost/geometry/extensions/gis/latlong/latlong.hpp>
#include <boost/geometry/extensions/gis/projections/parameters.hpp>
#include <boost/geometry/extensions/gis/projections/proj/robin.hpp>
@@ -21,14 +21,14 @@
using namespace boost::geometry;
// Initialize projection parameters
- projection::parameters par = projection::init("+ellps=WGS84 +units=m");
+ projections::parameters par = projections::init("+ellps=WGS84 +units=m");
// Construct a Robinson projection, using specified point types
// (This delivers a projection without virtual methods. Note that in p02 example
// the projection is created using a factory, which delivers a projection with virtual methods)
typedef model::ll::point<degree> point_ll_deg;
typedef model::d2::point_xy<double> point_xy;
- projection::robin_spheroid<point_ll_deg, point_xy> prj(par);
+ projections::robin_spheroid<point_ll_deg, point_xy> prj(par);
// Define Amsterdam / Barcelona in decimal degrees / degrees/minutes
point_ll_deg amsterdam = parse<point_ll_deg>("52.4N", "5.9E");
@@ -41,7 +41,7 @@
// Therefore the forward function does not throw but returns false)
if (prj.forward(amsterdam, pa) && prj.forward(barcelona, pb))
{
- std::cout << "Amsterdam: " << pa << std::endl << "Barcelona: " << pb << std::endl;
+ std::cout << "Amsterdam: " << wkt(pa) << std::endl << "Barcelona: " << wkt(pb) << std::endl;
std::cout << "Distance (unprojected):" << distance(amsterdam, barcelona) / 1000.0 << " km" << std::endl;
std::cout << "Distance ( projected):" << distance(pa, pb) / 1000.0 << " km" << std::endl;
@@ -52,8 +52,8 @@
point_ll_deg a1;
if (prj.inverse(pa, a1))
{
- std::cout << "Amsterdam (original): " << amsterdam << std::endl
- << "Amsterdam (projected, and back):" << a1 << std::endl;
+ std::cout << "Amsterdam (original): " << wkt(amsterdam) << std::endl
+ << "Amsterdam (projected, and back):" << wkt(a1) << std::endl;
std::cout << "Distance a-a': " << distance(amsterdam, a1) << " meter" << std::endl;
}
}
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p02_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p02_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p02_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\p02_example"
ConfigurationType="1"
- InheritedPropertySheets="../../../boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS"
MinimalRebuild="true"
RuntimeLibrary="3"
@@ -95,7 +95,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\p02_example"
ConfigurationType="1"
- InheritedPropertySheets="../../../boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -120,7 +120,7 @@
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
WholeProgramOptimization="false"
- AdditionalIncludeDirectories="../../../../../..;."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS"
GeneratePreprocessedFile="0"
RuntimeLibrary="0"
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p02_projfactory_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p02_projfactory_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p02_projfactory_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -8,9 +8,9 @@
//
// Projection example 2, using factory
-#include <boost/geometry/geometry.hpp>
+#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
-#include <boost/geometry/io/wkt/iomanip.hpp>
+
#include <boost/geometry/extensions/gis/latlong/latlong.hpp>
#include <boost/geometry/extensions/gis/projections/parameters.hpp>
#include <boost/geometry/extensions/gis/projections/factory.hpp>
@@ -22,7 +22,7 @@
using namespace boost::geometry;
// Initialize projection parameters. For construction using a factory the projection name is required.
- projection::parameters par = projection::init("+proj=robin +ellps=WGS84 +units=m");
+ projections::parameters par = projections::init("+proj=robin +ellps=WGS84 +units=m");
// Construct the specified projection, using specified point types
// Note that this is the only difference from p01_projection_example. It constructs a projection
@@ -30,8 +30,8 @@
// convenience we use a boost shared pointer here.
typedef model::ll::point<degree> point_ll_deg;
typedef model::d2::point_xy<double> point_xy;
- projection::factory<point_ll_deg, point_xy> fac;
- boost::shared_ptr<projection::projection<point_ll_deg, point_xy> > prj(fac.create_new(par));
+ projections::factory<point_ll_deg, point_xy> fac;
+ boost::shared_ptr<projections::projection<point_ll_deg, point_xy> > prj(fac.create_new(par));
// Define Amsterdam / Barcelona in decimal degrees / degrees/minutes
point_ll_deg amsterdam(longitude<>(5.9), latitude<>(52.4));
@@ -45,7 +45,7 @@
// Do the forward projection
if (prj->forward(amsterdam, pa) && prj->forward(barcelona, pb))
{
- std::cout << "Amsterdam: " << pa << std::endl << "Barcelona: " << pb << std::endl;
+ std::cout << "Amsterdam: " << wkt(pa) << std::endl << "Barcelona: " << wkt(pb) << std::endl;
std::cout << "Distance (unprojected):" << distance(amsterdam, barcelona) / 1000.0 << " km" << std::endl;
std::cout << "Distance ( projected):" << distance(pa, pb) / 1000.0 << " km" << std::endl;
@@ -54,8 +54,8 @@
point_ll_deg a1;
if (prj->inverse(pa, a1))
{
- std::cout << "Amsterdam (original): " << amsterdam << std::endl
- << "Amsterdam (projected, and back):" << a1 << std::endl;
+ std::cout << "Amsterdam (original): " << wkt(amsterdam) << std::endl
+ << "Amsterdam (projected, and back):" << wkt(a1) << std::endl;
std::cout << "Distance a-a': " << distance(amsterdam, a1) << " meter" << std::endl;
}
}
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p03_example.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p03_example.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p03_example.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\p03_example"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories=".;../../../../../.."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS"
MinimalRebuild="true"
RuntimeLibrary="3"
@@ -95,7 +95,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\p03_example"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -120,7 +120,7 @@
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
WholeProgramOptimization="false"
- AdditionalIncludeDirectories=".;../../../../../.."
+ AdditionalIncludeDirectories=".;../../../../.."
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS"
GeneratePreprocessedFile="0"
RuntimeLibrary="0"
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p03_projmap_example.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p03_projmap_example.cpp (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/p03_projmap_example.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -6,16 +6,16 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
-// Projection example 3, combined with shapelib and GD
+// Projection example 3, combined with shapelib and SVG
#include <fstream>
-#include <boost/geometry/geometry.hpp>
+#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/register/point.hpp>
#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
#include <boost/geometry/extensions/io/svg/write_svg.hpp>
-#include <boost/geometry/multi/io/wkt/read.hpp>
#include <boost/geometry/extensions/gis/latlong/latlong.hpp>
#include <boost/geometry/extensions/gis/projections/project_transformer.hpp>
@@ -61,7 +61,7 @@
std::vector<model::polygon<point_xy> > xy_polygons;
// Declare transformation strategy which contains a projection
- projection::project_transformer
+ projections::project_transformer
<
point_ll_deg,
point_xy
@@ -109,7 +109,7 @@
// Create the background
boost::geometry::model::box<svg_point> box;
- boost::geometry::assign(box, 0, 0, 800, 600);
+ boost::geometry::assign_values(box, 0, 0, 800, 600);
out << boost::geometry::svg(box, "fill:rgb(0,0,255)") << std::endl;
for (std::vector<model::polygon<point_xy> >::const_iterator it = xy_polygons.begin();
@@ -132,7 +132,7 @@
// Note, file location: trunk/libs/geometry/example/data
// update path below if necessary
read_wkt_and_project_and_write_svg(
- "../../../data/world.wkt",
+ "../../../example/data/world.wkt",
"+proj=moll +ellps=clrk66",
"world.svg");
}
Modified: branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/projection_examples.sln
==============================================================================
--- branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/projection_examples.sln (original)
+++ branches/quickbook-dev/libs/geometry/example_extensions/gis/projections/projection_examples.sln 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -6,6 +6,10 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "p03_example", "p03_example.vcproj", "{130DA4D1-E7E6-4E51-9D97-FC048995FEAC}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "p04_example", "p04_example.vcproj", "{D819FA4A-8C50-4A1A-83A2-85F9493C8614}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "p05_example", "p05_example.vcproj", "{A85549E1-F545-4398-A4E7-258ED821AB76}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -24,6 +28,14 @@
{130DA4D1-E7E6-4E51-9D97-FC048995FEAC}.Debug|Win32.Build.0 = Debug|Win32
{130DA4D1-E7E6-4E51-9D97-FC048995FEAC}.Release|Win32.ActiveCfg = Release|Win32
{130DA4D1-E7E6-4E51-9D97-FC048995FEAC}.Release|Win32.Build.0 = Release|Win32
+ {D819FA4A-8C50-4A1A-83A2-85F9493C8614}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D819FA4A-8C50-4A1A-83A2-85F9493C8614}.Debug|Win32.Build.0 = Debug|Win32
+ {D819FA4A-8C50-4A1A-83A2-85F9493C8614}.Release|Win32.ActiveCfg = Release|Win32
+ {D819FA4A-8C50-4A1A-83A2-85F9493C8614}.Release|Win32.Build.0 = Release|Win32
+ {A85549E1-F545-4398-A4E7-258ED821AB76}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A85549E1-F545-4398-A4E7-258ED821AB76}.Debug|Win32.Build.0 = Debug|Win32
+ {A85549E1-F545-4398-A4E7-258ED821AB76}.Release|Win32.ActiveCfg = Release|Win32
+ {A85549E1-F545-4398-A4E7-258ED821AB76}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/area.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/area.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/area.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -204,6 +204,24 @@
test_empty_input(ring_empty);
}
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::polygon<int_point_type> int_poly;
+ bg::model::polygon<double_point_type> double_poly;
+
+ std::string const polygon_li = "POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))";
+ bg::read_wkt(polygon_li, int_poly);
+ bg::read_wkt(polygon_li, double_poly);
+
+ double int_area = bg::area(int_poly);
+ double double_area = bg::area(double_poly);
+
+ BOOST_CHECK_CLOSE(int_area, double_area, 0.0001);
+}
+
int test_main(int, char* [])
{
test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
@@ -222,7 +240,9 @@
test_spherical<bg::model::point<ttmath_big, 2, bg::cs::spherical_equatorial<bg::degree> > >();
#endif
- test_empty_input<bg::model::d2::point_xy<int> >();
+ test_large_integers();
+
+ // test_empty_input<bg::model::d2::point_xy<int> >();
return 0;
}
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/centroid.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/centroid.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/centroid.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -101,11 +101,34 @@
test_centroid_exception<bg::model::ring<P> >();
}
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::polygon<int_point_type> int_poly;
+ bg::model::polygon<double_point_type> double_poly;
+
+ std::string const polygon_li = "POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))";
+ bg::read_wkt(polygon_li, int_poly);
+ bg::read_wkt(polygon_li, double_poly);
+
+ int_point_type int_centroid;
+ double_point_type double_centroid;
+
+ bg::centroid(int_poly, int_centroid);
+ bg::centroid(double_poly, double_centroid);
+
+ int_point_type double_centroid_as_int;
+ bg::assign(int_centroid, double_centroid_as_int);
+
+ BOOST_CHECK_EQUAL(bg::get<0>(int_centroid), bg::get<0>(double_centroid_as_int));
+ BOOST_CHECK_EQUAL(bg::get<1>(int_centroid), bg::get<1>(double_centroid_as_int));
+}
+
int test_main(int, char* [])
{
- test_exceptions<bg::model::d2::point_xy<double> >();
-
test_2d<bg::model::d2::point_xy<double> >();
test_2d<boost::tuple<float, float> >();
test_2d<bg::model::d2::point_xy<float> >();
@@ -119,5 +142,8 @@
test_3d<boost::tuple<ttmath_big, ttmath_big, ttmath_big> >();
#endif
+ test_large_integers();
+ test_exceptions<bg::model::d2::point_xy<double> >();
+
return 0;
}
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/correct.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/correct.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/correct.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -170,7 +170,7 @@
//test_all<float[2]>(); not yet because cannot be copied, for polygon
//test_all<double[2]>();
- //test_all<point_xy<int> >();
+ test_all<bg::model::d2::point_xy<int> >();
test_all<bg::model::d2::point_xy<float> >();
test_all<bg::model::d2::point_xy<double> >();
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -297,8 +297,43 @@
4, "0..4|4..5|5..8|8..11", "+|-|+|-");
}
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ std::string const polygon_li = "POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))";
+ bg::model::polygon<int_point_type> int_poly;
+ bg::model::polygon<double_point_type> double_poly;
+ bg::read_wkt(polygon_li, int_poly);
+ bg::read_wkt(polygon_li, double_poly);
+
+ bg::sections<bg::model::box<int_point_type>, 1> int_sections;
+ bg::sections<bg::model::box<double_point_type>, 1> double_sections;
+
+ bg::sectionalize<false>(int_poly, int_sections);
+ bg::sectionalize<false>(double_poly, double_sections);
+
+ bool equally_sized = int_sections.size() == double_sections.size();
+ BOOST_CHECK(equally_sized);
+ if (! equally_sized)
+ {
+ return;
+ }
+
+ for (unsigned int i = 0; i < int_sections.size(); i++)
+ {
+ BOOST_CHECK(int_sections[i].begin_index == double_sections[i].begin_index);
+ BOOST_CHECK(int_sections[i].count == double_sections[i].count);
+ }
+
+}
+
+
int test_main(int, char* [])
{
+ test_large_integers();
+
//test_all<bg::model::d2::point_xy<float> >();
test_all<bg::model::d2::point_xy<double> >();
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/difference.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/difference.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/difference.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,6 +7,8 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+#define TEST_ISOVIST
+
//#define BOOST_GEOMETRY_CHECK_WITH_POSTGIS
//#define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
@@ -74,9 +76,6 @@
test_one_lp<LineString, LineString, Polygon>("case13", "LINESTRING(3 2,4 4,2 3)", poly_9, 0, 0, 0.0);
test_one_lp<LineString, LineString, Polygon>("case14", "LINESTRING(5 6,4 4,6 5)", poly_9, 1, 3, 2.0 * sqrt(5.0));
- //return;
- // The rest compiles but is NOT yet correct
-
test_one_lp<LineString, LineString, Polygon>("case15", "LINESTRING(0 2,1 2,1 3,0 3)", poly_9, 2, 4, 2.0);
test_one_lp<LineString, LineString, Polygon>("case16", "LINESTRING(2 2,1 2,1 3,2 3)", poly_9, 0, 0, 0.0);
@@ -87,6 +86,14 @@
test_one_lp<LineString, LineString, Polygon>("case20", "LINESTRING(1 2,1 3,2 3)", poly_9, 0, 0, 0.0);
test_one_lp<LineString, LineString, Polygon>("case21", "LINESTRING(1 2,1 4,4 4,4 1,2 1,2 2)", poly_9, 0, 0, 0.0);
+
+ // More collinear (opposite) cases
+ test_one_lp<LineString, LineString, Polygon>("case22", "LINESTRING(4 1,4 4,7 4)", poly_9, 1, 2, 3.0);
+ test_one_lp<LineString, LineString, Polygon>("case23", "LINESTRING(4 0,4 4,7 4)", poly_9, 2, 4, 4.0);
+ test_one_lp<LineString, LineString, Polygon>("case24", "LINESTRING(4 1,4 5,7 5)", poly_9, 1, 3, 4.0);
+ test_one_lp<LineString, LineString, Polygon>("case25", "LINESTRING(4 0,4 5,7 5)", poly_9, 2, 5, 5.0);
+ test_one_lp<LineString, LineString, Polygon>("case26", "LINESTRING(4 0,4 3,4 5,7 5)", poly_9, 2, 5, 5.0);
+ test_one_lp<LineString, LineString, Polygon>("case27", "LINESTRING(4 4,4 5,5 5)", poly_9, 1, 3, 2.0);
}
template <typename P>
@@ -253,12 +260,17 @@
***/
#ifdef _MSC_VER
- // Isovist (submitted by Brandon during Formal Review)
+#ifdef TEST_ISOVIST
test_one<polygon, polygon, polygon>("isovist",
isovist1[0], isovist1[1],
- 4, 0, 0.279121891701124,
- 4, 0, 224.889211358929,
- 0.01);
+ if_typed_tt<ct>(4, 2), 0, 0.279121891701124,
+ if_typed_tt<ct>(4, 3), 0, if_typed_tt<ct>(224.889211358929, 223.777),
+ if_typed_tt<ct>(0.001, 0.2));
+
+ // SQL Server gives: 0.279121891701124 and 224.889211358929
+ // PostGIS gives: 0.279121991127244 and 224.889205853156
+
+#endif
test_one<polygon, polygon, polygon>("ggl_list_20110306_javier",
ggl_list_20110306_javier[0], ggl_list_20110306_javier[1],
@@ -272,11 +284,14 @@
1, 0, 3200.4,
0.01);
- test_one<polygon, polygon, polygon>("ggl_list_20110716_enrico",
- ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
- 3, 0, 35723.8506317139,
- 1, 0, 58456.4964294434
- );
+ if (! boost::is_same<ct, float>::value)
+ {
+ test_one<polygon, polygon, polygon>("ggl_list_20110716_enrico",
+ ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
+ 3, 0, 35723.8506317139,
+ 1, 0, 58456.4964294434
+ );
+ }
test_one<polygon, polygon, polygon>("ggl_list_20110820_christophe",
ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1],
@@ -295,7 +310,7 @@
// Because we cannot predict this, we only test for MSVC
test_one<polygon, polygon, polygon>("ggl_list_20110627_phillip",
ggl_list_20110627_phillip[0], ggl_list_20110627_phillip[1],
- if_typed<ct, double>(0, 1), 0,
+ if_typed_tt<ct>(1, 0), 0,
if_typed_tt<ct>(0.0000000000001105367, 0.0),
1, 0, 3577.40960816756,
0.01
@@ -460,6 +475,7 @@
test_all<bg::model::d2::point_xy<float> >();
#ifdef HAVE_TTMATH
+ std::cout << "Testing TTMATH" << std::endl;
test_all<bg::model::d2::point_xy<ttmath_big> >();
//test_difference_parcel_precision<ttmath_big>();
#endif
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/disjoint.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/disjoint.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/disjoint.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -112,6 +112,67 @@
test_disjoint<ls, ls>("ls/ls 2", "linestring(0 0,1 1)", "linestring(1 0,2 1)", true);
test_disjoint<segment, segment>("s/s 1", "linestring(0 0,1 1)", "linestring(1 0,0 1)", false);
test_disjoint<segment, segment>("s/s 2", "linestring(0 0,1 1)", "linestring(1 0,2 1)", true);
+
+ // Collinear opposite
+ test_disjoint<ls, ls>("ls/ls co", "linestring(0 0,2 2)", "linestring(1 1,0 0)", false);
+ // Collinear opposite and equal
+ test_disjoint<ls, ls>("ls/ls co-e", "linestring(0 0,1 1)", "linestring(1 1,0 0)", false);
+
+
+ // Degenerate linestrings
+ {
+ // Submitted by Zachary on the Boost.Geometry Mailing List, on 2012-01-29
+ std::string const a = "linestring(100 10, 0 10)";
+ std::string const b = "linestring(50 10, 50 10)"; // one point only, with same y-coordinate
+ std::string const c = "linestring(100 10, 100 10)"; // idem, at left side
+ test_disjoint<ls, ls>("dls/dls 1", a, b, false);
+ test_disjoint<ls, ls>("dls/dls 2", b, a, false);
+ test_disjoint<segment, segment>("ds/ds 1", a, b, false);
+ test_disjoint<segment, segment>("ds/ds 2", b, a, false);
+ test_disjoint<ls, ls>("dls/dls 1", a, c, false);
+ }
+
+ // Linestrings making angles normally ignored
+ {
+ // These (non-disjoint) cases
+ // correspond to the test "segment_intersection_collinear"
+
+ // Collinear ('a')
+ // a1---------->a2
+ // b1--->b2
+ test_disjoint<ls, ls>("n1", "linestring(2 0,0 6)", "linestring(0 0,2 0)", false);
+
+ // a1---------->a2
+ // b1--->b2
+ test_disjoint<ls, ls>("n7", "linestring(2 0,6 0)", "linestring(6 0,8 0)", false);
+
+ // Collinear - opposite ('f')
+ // a1---------->a2
+ // b2<---b1
+ test_disjoint<ls, ls>("o1", "linestring(2 0,6 0)", "linestring(2 0,0 0)", false);
+ }
+
+ {
+ // Starting in the middle ('s')
+ // b2
+ // ^
+ // |
+ // |
+ // a1--------b1----->a2
+ test_disjoint<ls, ls>("case_s", "linestring(0 0,4 0)", "linestring(2 0,2 2)", false);
+
+ // Collinear, but disjoint
+ test_disjoint<ls, ls>("c-d", "linestring(2 0,6 0)", "linestring(7 0,8 0)", true);
+
+ // Parallel, disjoint
+ test_disjoint<ls, ls>("c-d", "linestring(2 0,6 0)", "linestring(2 1,6 1)", true);
+
+ // Error still there until 1.48 (reported "error", was reported to disjoint, so that's why it did no harm)
+ test_disjoint<ls, ls>("case_recursive_boxes_1",
+ "linestring(10 7,10 6)", "linestring(10 10,10 9)", true);
+
+ }
+
// TODO test_disjoint<segment, ls>("s/ls 1", "linestring(0 0,1 1)", "linestring(1 0,0 1)", false);
// TODO test_disjoint<segment, ls>("s/ls 2", "linestring(0 0,1 1)", "linestring(1 0,2 1)", true);
// TODO test_disjoint<ls, segment>("ls/s 1", "linestring(0 0,1 1)", "linestring(1 0,0 1)", false);
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/distance.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/distance.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/distance.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -194,7 +194,11 @@
test_geometry<P, P>("POINT(0 3)", "POINT(4 0)", 5.0);
test_geometry<P, bg::model::linestring<P> >("POINT(1 3)", "LINESTRING(1 1,4 4)", sqrt(2.0));
test_geometry<P, bg::model::linestring<P> >("POINT(3 1)", "LINESTRING(1 1,4 4)", sqrt(2.0));
+ test_geometry<P, bg::model::linestring<P> >("POINT(50 50)", "LINESTRING(50 40, 40 50)", sqrt(50.0));
+ test_geometry<P, bg::model::linestring<P> >("POINT(50 50)", "LINESTRING(50 40, 40 50, 0 90)", sqrt(50.0));
test_geometry<bg::model::linestring<P>, P>("LINESTRING(1 1,4 4)", "POINT(1 3)", sqrt(2.0));
+ test_geometry<bg::model::linestring<P>, P>("LINESTRING(50 40, 40 50)", "POINT(50 50)", sqrt(50.0));
+ test_geometry<bg::model::linestring<P>, P>("LINESTRING(50 40, 40 50, 0 90)", "POINT(50 50)", sqrt(50.0));
// Rings
test_geometry<P, bg::model::ring<P> >("POINT(1 3)", "POLYGON((1 1,4 4,5 0,1 1))", sqrt(2.0));
@@ -244,6 +248,49 @@
test_empty_input(p, ring_empty);
}
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ // point-point
+ {
+ std::string const a = "POINT(2544000 528000)";
+ std::string const b = "POINT(2768040 528000)";
+ int_point_type ia, ib;
+ double_point_type da, db;
+ bg::read_wkt(a, ia);
+ bg::read_wkt(b, ib);
+ bg::read_wkt(a, da);
+ bg::read_wkt(b, db);
+
+ BOOST_AUTO(idist, bg::distance(ia, ib));
+ BOOST_AUTO(ddist, bg::distance(da, db));
+
+ BOOST_CHECK_MESSAGE(std::abs(idist - ddist) < 0.1,
+ "within<a double> different from within<an int>");
+ }
+ // Point-segment
+ {
+ std::string const a = "POINT(2600000 529000)";
+ std::string const b = "LINESTRING(2544000 528000, 2768040 528000)";
+ int_point_type ia;
+ double_point_type da;
+ bg::model::segment<int_point_type> ib;
+ bg::model::segment<double_point_type> db;
+ bg::read_wkt(a, ia);
+ bg::read_wkt(b, ib);
+ bg::read_wkt(a, da);
+ bg::read_wkt(b, db);
+
+ BOOST_AUTO(idist, bg::distance(ia, ib));
+ BOOST_AUTO(ddist, bg::distance(da, db));
+
+ BOOST_CHECK_MESSAGE(std::abs(idist - ddist) < 0.1,
+ "within<a double> different from within<an int>");
+ }
+}
+
int test_main(int, char* [])
{
#ifdef TEST_ARRAY
@@ -253,6 +300,8 @@
//test_all<test::test_point>(); // located here because of 3D
#endif
+ test_large_integers();
+
test_all<bg::model::d2::point_xy<int> >();
test_all<boost::tuple<float, float> >();
test_all<bg::model::d2::point_xy<float> >();
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/intersection.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/intersection.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/intersection.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,6 +15,8 @@
#include <iostream>
#include <string>
+#define TEST_ISOVIST
+
//#define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
//#define BOOST_GEOMETRY_DEBUG_INTERSECTION
//#define BOOST_GEOMETRY_DEBUG_TRAVERSE
@@ -164,14 +166,17 @@
typedef typename bg::coordinate_type<Polygon>::type ct;
+#ifdef TEST_ISOVIST
#ifdef _MSC_VER
- // Isovist (submitted by Brandon during Formal Review)
test_one<Polygon, Polygon, Polygon>("isovist",
isovist1[0], isovist1[1],
- 1,
- if_typed<ct, float>(19, if_typed<ct, double>(20, 20)),
- 88.19203,
- if_typed<ct, float>(0.5, if_typed<ct, double>(0.1, 0.01)));
+ 1, 20, 88.19203,
+ if_typed_tt<ct>(0.01, 0.1));
+
+ // SQL Server gives: 88.1920416352664
+ // PostGIS gives: 88.19203677911
+
+#endif
#endif
//std::cout << typeid(ct).name() << std::endl;
@@ -191,13 +196,22 @@
1, if_typed_tt<ct>(6, 5), 11151.6618);
#ifdef _MSC_VER // gcc/linux behaves differently
- test_one<Polygon, Polygon, Polygon>("ggl_list_20110716_enrico",
- ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
- 3,
- if_typed<ct, float>(19, if_typed<ct, double>(22, 21)),
- 35723.8506317139);
+ if (! boost::is_same<ct, float>::value)
+ {
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110716_enrico",
+ ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
+ 3,
+ if_typed<ct, float>(19, if_typed<ct, double>(22, 21)),
+ 35723.8506317139);
+ }
#endif
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_f", buffer_rt_f[0], buffer_rt_f[1],
+ 1, 4, 0.00029437899183903937, 0.01);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_g", buffer_rt_g[0], buffer_rt_g[1],
+ 1, 0, 2.914213562373);
+
return;
@@ -496,6 +510,7 @@
test_all<bg::model::d2::point_xy<float> >();
#if defined(HAVE_TTMATH)
+ std::cout << "Testing TTMATH" << std::endl;
test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/intersects.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/intersects.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/intersects.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,6 +11,8 @@
#include <boost/geometry/geometries/geometries.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/util/rational.hpp>
+
template <typename P>
void test_all()
@@ -118,6 +120,9 @@
{
test_all<bg::model::d2::point_xy<double> >();
+ test_all<bg::model::d2::point_xy<boost::rational<int> > >();
+
+
#if defined(HAVE_TTMATH)
test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/length.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/length.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/length.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -49,7 +49,7 @@
test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
- test_empty_input<bg::model::d2::point_xy<int> >();
+ // test_empty_input<bg::model::d2::point_xy<int> >();
return 0;
}
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/get_turn_info.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/get_turn_info.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/get_turn_info.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -47,7 +47,11 @@
typedef std::vector<turn_info> tp_vector;
turn_info model;
tp_vector info;
- bg::detail::overlay::get_turn_info<P, P, turn_info>::apply(pi, pj, pk, qi, qj, qk,
+ bg::detail::overlay::get_turn_info
+ <
+ P, P, turn_info,
+ bg::detail::overlay::assign_null_policy
+ >::apply(pi, pj, pk, qi, qj, qk,
model, std::back_inserter(info));
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/overlay_cases.hpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/overlay_cases.hpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/overlay_cases.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -469,7 +469,8 @@
};
-
+// ticket_17 is keyholed, so has a hole formed by an deliberate intersection
+// This will fail the intersection/traversal process
static std::string ticket_17[2] = {
"POLYGON ((-122.28139163 37.37319149,-122.28100699 37.37273669,-122.28002186 37.37303123,-122.27979681 37.37290072,-122.28007349 37.37240493,-122.27977334 37.37220360,-122.27819720 37.37288580,-122.27714184 37.37275161,-122.27678628 37.37253167,-122.27766437 37.37180973,-122.27804382 37.37121453,-122.27687664 37.37101354,-122.27645829 37.37203386,-122.27604423 37.37249110,-122.27632234 37.37343339,-122.27760980 37.37391082,-122.27812478 37.37800320,-122.26117222 37.39121007,-122.25572289 37.39566631,-122.25547269 37.39564971,-122.25366304 37.39552993,-122.24919976 37.39580268,-122.24417933 37.39366907,-122.24051443 37.39094143,-122.23246277 37.38100418,-122.23606766 37.38141338,-122.24001587 37.37738940,-122.23666848 37.37609347,-122.23057450 37.37882170,-122.22679803 37.37807143,-122.22525727 37.37448817,-122.22523229 37.37443000,-122.23083199 37.37609347,-122.23033486 37.37777891,-122.23169030 37.37732117,-122.23229178 37.37709687,-122.23237761 37.37631249,-122.23297776 37.37438834,-122.23872850 37.37
165986,-122.24044511 37.36934068,-122.24671067 37.36865847,-122.24825570 37.36981819,-122.25151719 37.36947713,-122.25357721 37.36756706,-122.26001451 37.36579354,-122.25615213 37.36545239,-122.25486458 37.36245083,-122.25357721 37.36108651,-122.25194642 37.36013139,-122.24885652 37.35958557,-122.24911401 37.35849399,-122.25357721 37.35808470,-122.25675286 37.35897159,-122.25855539 37.35753887,-122.26181687 37.35828939,-122.26713837 37.35897159,-122.26782510 37.36108651,-122.26662339 37.36456559,-122.27288911 37.36722601,-122.27366159 37.36531602,-122.27168740 37.36470213,-122.27391900 37.36374701,-122.27074326 37.36245083,-122.27134408 37.35951742,-122.27426240 37.36135926,-122.27709482 37.36115474,-122.27966974 37.36231438,-122.27958391 37.36463382,-122.27572152 37.36463382,-122.27563569 37.36524779,-122.27700899 37.36593000,-122.27709482 37.36763529,-122.27554978 37.36838573,-122.27667254 37.36931478,-122.27677932 37.36932073,-122.27769362 37.36853987,-122.27942490 37.36830803,-122.28178776 37.36677917,-1
22.28509559 37.36443500,-122.28845129 37.36413744,-122.29194403 37.36695946,-122.29382577 37.36726817,-122.29600414 37.36898512,-122.29733083 37.36995398,-122.29593239 37.37141436,-122.29416649 37.37075898,-122.29325026 37.37108436,-122.29652910 37.37311697,-122.29584237 37.37374461,-122.29537583 37.37573372,-122.29487677 37.37752502,-122.30923212 37.37593011,-122.31122484 37.38230086,-122.31467994 37.38092472,-122.31715663 37.38252181,-122.32307970 37.38166978,-122.31985618 37.37667694,-122.32210304 37.37580220,-122.32581446 37.37589532,-122.32401730 37.37331839,-122.32960417 37.37189020,-122.33465527 37.37331906,-122.33425328 37.37623680,-122.33620676 37.37726132,-122.33397986 37.37822382,-122.33358918 37.38036590,-122.33202637 37.37986918,-122.33147954 37.38101784,-122.33394080 37.38198017,-122.33545239 37.38587943,-122.33478058 37.38785697,-122.33386050 37.38723721,-122.33350041 37.38571137,-122.33122003 37.38548891,-122.33140008 37.38650606,-122.33366042 37.38817490,-122.33244019 37.39157602,-122.332981
57 37.39419201,-122.33164013 37.39477028,-122.33202017 37.39518351,-122.33358038 37.39499282,-122.33376050 37.39597811,-122.33550067 37.39734478,-122.33556069 37.39481797,-122.33344040 37.39292676,-122.33638094 37.38892189,-122.34240644 37.38852719,-122.34906293 37.38726898,-122.35072321 37.39338769,-122.34910291 37.39445252,-122.34796272 37.39410291,-122.34449043 37.39640534,-122.34500223 37.39729709,-122.34936291 37.39670910,-122.35098322 37.39531066,-122.35364623 37.39554510,-122.35434369 37.39612111,-122.35798429 37.39600988,-122.35768430 37.39478621,-122.36334519 37.39206871,-122.36604726 37.39203267,-122.36778592 37.39335592,-122.36518870 37.40022011,-122.36554552 37.40247752,-122.36370519 37.40331974,-122.36270506 37.40530591,-122.36320512 37.40670418,-122.36149849 37.40851392,-122.36730580 37.41054938,-122.37263720 37.41378932,-122.37161871 37.42076600,-122.36566153 37.42006292,-122.36520547 37.42742106,-122.37165953 37.43661157,-122.35943972 37.44459022,-122.35356359 37.44600810,-122.33792254 37.457
96329,-122.35228518 37.47478091,-122.35127080 37.48181199,-122.34867342 37.48487322,-122.34359717 37.48801082,-122.33388431 37.48677650,-122.33142321 37.48429747,-122.32929580 37.48473149,-122.32609609 37.48291144,-122.32344850 37.48228229,-122.31924364 37.48410234,-122.31677299 37.48114051,-122.31431751 37.47848973,-122.31259201 37.47682190,-122.31515972 37.47568196,-122.31691389 37.47360309,-122.31292494 37.46960081,-122.31130153 37.46937743,-122.30889894 37.47124987,-122.30612839 37.47011613,-122.30149630 37.46568378,-122.30064277 37.46363784,-122.29283821 37.45922376,-122.28630141 37.45415497,-122.28883099 37.44629920,-122.28316717 37.44197138,-122.27554148 37.42297597,-122.25597410 37.40553692,-122.25196579 37.40129593,-122.25012043 37.40049143,-122.24823207 37.39897758,-122.24754551 37.39740941,-122.24778582 37.39621607,-122.24934787 37.39599102,-122.25005170 37.39871849,-122.25222328 37.39863668,-122.25342491 37.39737529,-122.25520162 37.39667289,-122.25528737 37.39522726,-122.27747460 37.37809616,-12
2.27977493 37.37858717,-122.28157729 37.37920106,-122.28322534 37.37952846,-122.28416939 37.38092656,-122.28621223 37.37984219,-122.28638389 37.37613857,-122.28382607 37.37843722,-122.27930278 37.37718220,-122.28196361 37.37652740,-122.28295058 37.37568167,-122.28216101 37.37523148,-122.28114822 37.37543608,-122.27934569 37.37528613,-122.27996369 37.37448121,-122.28104521 37.37454944,-122.28185197 37.37422883,-122.28290767 37.37474038,-122.28376597 37.37467224,-122.28428104 37.37399012,-122.28402346 37.37338989,-122.28610922 37.37364914,-122.28651264 37.37327388,-122.28672722 37.37207343,-122.28628398 37.37205448,-122.28574460 37.37166682,-122.28479711 37.37200981,-122.28327731 37.37137228,-122.28285511 37.37100700,-122.28279409 37.37125669,-122.28315527 37.37173756,-122.28321872 37.37220569,-122.28187007 37.37231918,-122.28193109 37.37294908,-122.28139163 37.37319149))",
"BOX(-122.280 37.377,-122.277 37.379)"};
@@ -479,6 +480,7 @@
"POLYGON((184861.118 606901.158,184893.787 606898.483,184925.043 606913.4,184927.174 606951.759,184912.9 606987.146,184877.87 606989.232,184885.103 607023.774,184899.058 607022.743,184906.008 607044.948,184966.465 607025.02,184968.442 606961.3,185024.768 606947.402,185024.544 606941.355,185027.007 606937.323,185030.366 606934.187,185035.516 606933.963,185040.442 606935.531,185042.905 606939.115,185088.364 606931.385,185089.139 607015.509,185095.2 607011.3,185118.827 606995.545,185126.813 606991.995,185177.727 606973.799,185181.482 606966.676,185193.571 606977.795,185193.711 606960.3,185189.352 606779.02,185167.515 606783.844,185086.96 606801.241,185011.707 606817.809,185000 606819.304,184994.034 606819.794,184976.398 606819.572,184956.654 606817.131,184934.913 606813.137,184893.097 606804.927,184884.445 606831.555,184866.919 606883.481,184861.118 606901.158),(184907.556 607013.301,184905.782 607009.972,184906.004 607005.978,184908.444 606998.877,184912.215 606994.218,184919.314 606993.996,184922.42 6069
95.771,184925.747 606998.877,184926.413 607002.872,184925.747 607007.753,184922.42 607012.191,184917.096 607015.298,184911.771 607015.298,184907.556 607013.301))"};
+// Isovist (submitted by Brandon during Formal Review)
static std::string isovist[2] =
{
"POLYGON((37.29449462890625 1.7902572154998779, 46.296027072709599 -2.4984308554828116, 45.389434814453125 -4.5143837928771973, 47.585065917176543 -6.1314922196594779, 46.523914387974358 -8.5152102535033496, 42.699958801269531 -4.4278755187988281, 42.577877044677734 -4.4900407791137695, 42.577911376953125 -4.4901103973388672, 40.758884429931641 -5.418975830078125, 40.6978759765625 -5.4500408172607422, 41.590042114257813 -7.2021245956420898, 57.297810222148939 -37.546793343968417, 50.974888957147442 -30.277285722290763, 37.140213012695313 1.3446992635726929, 37.000419616699219 1.664225697517395, 37.29449462890625 1.7902572154998779))",
@@ -512,6 +514,9 @@
};
+// Send on ggl-list by Christoph/Angus at 2011-08-19/20
+// This polygon combination fails to union in <float> but do in <double> or <ttmath>
+// It had previosly an error which has been fixed at 2011-08-30
static std::string ggl_list_20110820_christophe[2] =
{
"POLYGON((17.763942722600319 32.23605727739968,19.192448808558737 30.807551191441263,16.000000000000000 30.000000000000000,17.763942722600319 32.236057277399681))",
@@ -549,4 +554,52 @@
"POLYGON ((484 290, 558 359, 543 309, 484 290))"
};
+static std::string ticket_5103[2] =
+ {
+ "POLYGON((-92810838 3618230,-94606872 1822196,-94999302 2214626,-93203268 4010660,-92810838 3618230))",
+ "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 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))",
+ "POLYGON((2500 1600,2500 2300,3200 2300,3200 1600,2500 1600))",
+ "POLYGON((1716 1554,2076 2250,2436 2352,2796 1248,3156 2484,3516 2688,3156 2483,2796 1247,2436 2351,2076 2249, 1716 1554))",
+ };
+
+static std::string buffer_rt_a[2] =
+ {
+ "POLYGON((1 7,1 8,1.0012 8.04907,1.00482 8.09802,1.01082 8.14673,1.01921 8.19509,1.02997 8.24298,1.04306 8.29028,1.05846 8.33689,1.07612 8.38268,1.09601 8.42756,1.11808 8.4714,1.14227 8.5141,1.16853 8.55557,1.19679 8.5957,1.22699 8.63439,1.25905 8.67156,1.29289 8.70711,1.32844 8.74095,1.36561 8.77301,1.4043 8.80321,1.44443 8.83147,1.4859 8.85773,1.5286 8.88192,1.57244 8.90399,1.61732 8.92388,1.66311 8.94154,1.70972 8.95694,1.75702 8.97003,1.80491 8.98079,1.85327 8.98918,1.90198 8.99518,1.95093 8.9988,2 9,3 9,3.04907 8.9988,3.09802 8.99518,3.14673 8.98918,3.19509 8.98079,3.24298 8.97003,3.29028 8.95694,3.33689 8.94154,3.38268 8.92388,3.42756 8.90399,3.4714 8.88192,3.5141 8.85773,3.55557 8.83147,3.5957 8.80321,3.63439 8.77301,3.67156 8.74095,3.70711 8.70711,3.74095 8.67156,3.77301 8.63439,3.80321 8.5957,3.83147 8.55557,3.85773 8.5141,3.88192 8.4714,3.90399 8.42756,3.92388 8.38268,3.94154 8.33689,3.95694 8.29028,3.97003 8.24298,3.98079 8.19509,3.98918 8.14673,3.99518 8.09802,3.9988 8.04907,4 8,4 7,3.9988 6
.95093,3.99518 6.90198,3.98918 6.85327,3.98079 6.80491,3.97003 6.75702,3.95694 6.70972,3.94154 6.66311,3.92388 6.61732,3.90399 6.57244,3.88192 6.5286,3.85773 6.4859,3.83147 6.44443,3.80321 6.4043,3.77301 6.36561,3.74095 6.32844,3.70711 6.29289,3.67156 6.25905,3.63439 6.22699,3.5957 6.19679,3.55557 6.16853,3.5141 6.14227,3.4714 6.11808,3.42756 6.09601,3.38268 6.07612,3.33689 6.05846,3.29028 6.04306,3.24298 6.02997,3.19509 6.01921,3.14673 6.01082,3.09802 6.00482,3.04907 6.0012,3 6,2 6,1.95093 6.0012,1.90198 6.00482,1.85327 6.01082,1.80491 6.01921,1.75702 6.02997,1.70972 6.04306,1.66311 6.05846,1.61732 6.07612,1.57244 6.09601,1.5286 6.11808,1.4859 6.14227,1.44443 6.16853,1.4043 6.19679,1.36561 6.22699,1.32844 6.25905,1.29289 6.29289,1.25905 6.32844,1.22699 6.36561,1.19679 6.4043,1.16853 6.44443,1.14227 6.4859,1.11808 6.5286,1.09601 6.57244,1.07612 6.61732,1.05846 6.66311,1.04306 6.70972,1.02997 6.75702,1.01921 6.80491,1.01082 6.85327,1.00482 6.90198,1.0012 6.95093,1 7))",
+ "POLYGON((3 6,4 6,4.04907 5.9988,4.09802 5.99518,4.14673 5.98918,4.19509 5.98079,4.24298 5.97003,4.29028 5.95694,4.33689 5.94154,4.38268 5.92388,4.42756 5.90399,4.4714 5.88192,4.5141 5.85773,4.55557 5.83147,4.5957 5.80321,4.63439 5.77301,4.67156 5.74095,4.70711 5.70711,4.74095 5.67156,4.77301 5.63439,4.80321 5.5957,4.83147 5.55557,4.85773 5.5141,4.88192 5.4714,4.90399 5.42756,4.92388 5.38268,4.94154 5.33689,4.95694 5.29028,4.97003 5.24298,4.98079 5.19509,4.98918 5.14673,4.99518 5.09802,4.9988 5.04907,5 5,5 4,4.9988 3.95093,4.99518 3.90198,4.98918 3.85327,4.98079 3.80491,4.97003 3.75702,4.95694 3.70972,4.94154 3.66311,4.92388 3.61732,4.90399 3.57244,4.88192 3.5286,4.85773 3.4859,4.83147 3.44443,4.80321 3.4043,4.77301 3.36561,4.74095 3.32844,4.70711 3.29289,4.67156 3.25905,4.63439 3.22699,4.5957 3.19679,4.55557 3.16853,4.5141 3.14227,4.4714 3.11808,4.42756 3.09601,4.38268 3.07612,4.33689 3.05846,4.29028 3.04306,4.24298 3.02997,4.19509 3.01921,4.14673 3.01082,4.09802 3.00482,4.04907 3.0012,4 3,3 3,3 3,2 3,
1.95093 3.0012,1.90198 3.00482,1.85327 3.01082,1.80491 3.01921,1.75702 3.02997,1.70972 3.04306,1.66311 3.05846,1.61732 3.07612,1.57244 3.09601,1.5286 3.11808,1.4859 3.14227,1.44443 3.16853,1.4043 3.19679,1.36561 3.22699,1.32844 3.25905,1.29289 3.29289,1.25905 3.32844,1.22699 3.36561,1.19679 3.4043,1.16853 3.44443,1.14227 3.4859,1.11808 3.5286,1.09601 3.57244,1.07612 3.61732,1.05846 3.66311,1.04306 3.70972,1.02997 3.75702,1.01921 3.80491,1.01082 3.85327,1.00482 3.90198,1.0012 3.95093,1 4,1 5,1.0012 5.04907,1.00482 5.09802,1.01082 5.14673,1.01921 5.19509,1.02997 5.24298,1.04306 5.29028,1.05846 5.33689,1.07612 5.38268,1.09601 5.42756,1.11808 5.4714,1.14227 5.5141,1.16853 5.55557,1.19679 5.5957,1.22699 5.63439,1.25905 5.67156,1.29289 5.70711,1.32844 5.74095,1.36561 5.77301,1.4043 5.80321,1.44443 5.83147,1.4859 5.85773,1.5286 5.88192,1.57244 5.90399,1.61732 5.92388,1.66311 5.94154,1.70972 5.95694,1.75702 5.97003,1.80491 5.98079,1.85327 5.98918,1.90198 5.99518,1.95093 5.9988,2 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6
,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6))"
+ };
+
+static std::string buffer_rt_f[2] =
+ {
+ "POLYGON((-0.29999999999999999 6.0000000000000000,-0.29999999999999999 7.0000000000000000,-0.30000000000000027 7.7242640687119302,0.21213203435596423 7.2121320343559638,1.2121320343559643 6.2121320343559638,1.7242640687119293 5.7000000000000002,1.0000000000000000 5.7000000000000002,0.00000000000000000 5.7000000000000002,-0.30000000000000027 5.7000000000000002,-0.29999999999999999 6.0000000000000000))",
+ "POLYGON((1.3000000000000000 9.0000000000000000,1.3000000000000000 8.0000000000000000,1.3000000000000007 7.7000000000000002,1.0000000000000000 7.7000000000000002,0.00000000000000000 7.7000000000000002,-0.29999999999999982 7.7000000000000002,-0.29999999999999999 8.0000000000000000,-0.29999999999999999 9.0000000000000000,-0.29999999999999982 9.3000000000000007,0.00000000000000000 9.3000000000000007,1.0000000000000000 9.3000000000000007,1.3000000000000007 9.3000000000000007,1.3000000000000000 9.0000000000000000))"
+ };
+
+static std::string buffer_rt_g[2] =
+ {
+ "POLYGON((2.0 8.0,2.0 9.0,2.0 10.0,3.0 10.0,4.0 10.0,6.4142135623730958 10.0,4.7071067811865479 8.2928932188134521,3.7071067811865475 7.2928932188134521,2.0 5.5857864376269051,2.0 8.0))",
+ "POLYGON((0.0 6.0,0.0 7.0,0.0 8.0,1.0 8.0,2.0 8.0,4.4142135623730958 8.0,2.7071067811865475 6.2928932188134521,1.7071067811865475 5.2928932188134521,-0.0 3.5857864376269042,0.0 6.0))"
+ };
+
+static std::string buffer_rt_g_boxes[5] =
+ {
+ "POLYGON((0 0,0 4,4 4,4 0,0 0))",
+ "POLYGON((2 2,2 4,6 4,6 2,2 2))",
+ "POLYGON((2 2,2 4,6 4,8 4,8 2,2 2))",
+ "POLYGON((2 2,2 4,6 4,6 6,8 6,8 2,2 2))",
+
+ "POLYGON((0 0,0 4,4 4,4 5,5 5,5 1,4 1,4 0,0 0))"
+ };
+
+// From buffer-robustness-test with segment-intersection "touching" with r ~ 1.16
+static std::string buffer_rt_i[2] =
+ {
+ "POLYGON((1.0 1.0,1.0 2.0,1.0 3.0,2.0 3.0,3.0 3.0,5.4142135623730949 3.0,3.7071067811865475 1.2928932188134525,2.7071067811865475 0.29289321881345254,1.0 -1.4142135623730949,1.0 1.0))",
+ "POLYGON((2.0 2.0,2.0 3.0,2.0 4.0,3.0 4.0,4.0 4.0,6.4142135623730958 4.0,4.7071067811865479 2.2928932188134525,3.7071067811865475 1.2928932188134525,2.0 -0.41421356237309387,2.0 2.0))"
+ };
+
#endif // BOOST_GEOMETRY_TEST_OVERLAY_CASES_HPP
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,6 +17,7 @@
#define BOOST_GEOMETRY_NO_BOOST_TEST
#define BOOST_GEOMETRY_TIME_OVERLAY
+#include <test_overlay_p_q.hpp>
#include <boost/program_options.hpp>
#include <boost/random/linear_congruential.hpp>
@@ -25,15 +26,6 @@
#include <boost/random/variate_generator.hpp>
#include <boost/timer.hpp>
-#include <test_overlay_p_q.hpp>
-
-#include <boost/geometry/geometry.hpp>
-#include <boost/geometry/multi/multi.hpp>
-#include <boost/geometry/multi/geometries/multi_polygon.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
-
-
template <typename Polygon>
inline void make_polygon(Polygon& polygon, int count_x, int count_y, int index, int offset)
{
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,20 +7,14 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#include <iostream>
-#include <string>
#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
#define BOOST_GEOMETRY_NO_BOOST_TEST
-#include <boost/program_options.hpp>
-#include <boost/timer.hpp>
-
#include <test_overlay_p_q.hpp>
-#include <boost/geometry/geometry.hpp>
-#include <boost/geometry/multi/multi.hpp>
-
+#include <boost/program_options.hpp>
+#include <boost/timer.hpp>
template <typename Polygon>
inline void make_pie(Polygon& polygon,
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -12,25 +12,12 @@
#define BOOST_GEOMETRY_NO_BOOST_TEST
-// For mixing int/float
-#if defined(_MSC_VER)
-#pragma warning( disable : 4267 )
-#endif
+#include <test_overlay_p_q.hpp>
#include <boost/program_options.hpp>
-
-//#include <algorithms/test_intersection.hpp>
-//#include <algorithms/test_overlay.hpp>
-
-
#include <boost/timer.hpp>
-#include <boost/geometry/geometry.hpp>
-#include <test_overlay_p_q.hpp>
-
-
-
template <typename Polygon>
inline void make_star(Polygon& polygon,
int count, double factor1, double factor2, long double offset = 0)
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersects.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersects.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/intersects.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,6 +17,7 @@
#define BOOST_GEOMETRY_NO_BOOST_TEST
//#define BOOST_GEOMETRY_TIME_OVERLAY
+#include <test_overlay_p_q.hpp>
#include <boost/program_options.hpp>
#include <boost/random/linear_congruential.hpp>
@@ -25,14 +26,6 @@
#include <boost/random/variate_generator.hpp>
#include <boost/timer.hpp>
-#include <test_overlay_p_q.hpp>
-
-#include <boost/geometry/geometry.hpp>
-#include <boost/geometry/multi/multi.hpp>
-#include <boost/geometry/multi/geometries/multi_polygon.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
-
template <typename MultiPolygon>
inline void make_polygon(MultiPolygon& mp, int count_x, int count_y, int index, int width_x)
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,16 +7,12 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#include <iostream>
-#include <sstream>
-#include <fstream>
-#include <iomanip>
-#include <string>
-
#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
#define BOOST_GEOMETRY_NO_BOOST_TEST
+#include <test_overlay_p_q.hpp>
+
#include <boost/program_options.hpp>
#include <boost/timer.hpp>
#include <boost/random/linear_congruential.hpp>
@@ -25,13 +21,6 @@
#include <boost/random/variate_generator.hpp>
-#include <test_overlay_p_q.hpp>
-
-#include <boost/geometry/geometry.hpp>
-
-#include <boost/geometry/geometries/point_xy.hpp>
-
-
struct star_params
{
int count; // points of ellipse, not of star
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,15 +7,10 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#include <iostream>
-#include <sstream>
-#include <fstream>
-#include <iomanip>
-#include <string>
-
#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
#define BOOST_GEOMETRY_NO_BOOST_TEST
+#include <test_overlay_p_q.hpp>
#include <boost/program_options.hpp>
#include <boost/random/linear_congruential.hpp>
@@ -24,15 +19,6 @@
#include <boost/random/variate_generator.hpp>
#include <boost/timer.hpp>
-#include <test_overlay_p_q.hpp>
-
-#include <boost/geometry/geometry.hpp>
-#include <boost/geometry/multi/multi.hpp>
-#include <boost/geometry/geometries/point_xy.hpp>
-#include <boost/geometry/multi/geometries/multi_polygon.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
-
template <typename Polygon, typename Generator>
inline void make_polygon(Polygon& polygon, Generator& generator, bool triangular)
@@ -98,6 +84,7 @@
std::ostringstream out;
out << "recursive_box_" << index++ << "_" << level;
+
if (! test_overlay_p_q
<
polygon,
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/star_comb.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/star_comb.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/star_comb.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,17 +7,14 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#include <iostream>
-#include <sstream>
-#include <fstream>
-#include <iomanip>
-#include <string>
#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
#define BOOST_GEOMETRY_NO_BOOST_TEST
#define BOOST_GEOMETRY_TIME_OVERLAY
+#include <test_overlay_p_q.hpp>
+
#include <boost/program_options.hpp>
#include <boost/random/linear_congruential.hpp>
#include <boost/random/uniform_int.hpp>
@@ -26,14 +23,6 @@
#include <boost/timer.hpp>
#include <star_comb.hpp>
-#include <test_overlay_p_q.hpp>
-
-#include <boost/geometry/geometry.hpp>
-#include <boost/geometry/multi/multi.hpp>
-#include <boost/geometry/geometries/point_xy.hpp>
-#include <boost/geometry/multi/geometries/multi_polygon.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
-#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
template <typename Polygon>
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,6 +15,8 @@
//#define BOOST_GEOMETRY_ROBUSTNESS_USE_DIFFERENCE
+#include <geometry_test_common.hpp>
+
// For mixing int/float
#if defined(_MSC_VER)
#pragma warning( disable : 4244 )
@@ -22,19 +24,13 @@
#endif
-#include <boost/geometry/geometry.hpp>
-
-#include <boost/geometry/io/wkt/wkt.hpp>
-
-#include <boost/geometry/multi/multi.hpp>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/multi/geometries/multi_polygon.hpp>
-#include <boost/geometry/multi/io/wkt/wkt.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>
-#include <geometry_test_common.hpp>
-
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
struct p_q_settings
{
@@ -51,6 +47,19 @@
{}
};
+template <typename Geometry>
+inline typename bg::default_area_result<Geometry>::type p_q_area(Geometry const& g)
+{
+ try
+ {
+ return bg::area(g);
+ }
+ catch(bg::empty_input_exception const&)
+ {
+ return 0;
+ }
+}
+
template <typename OutputType, typename CalculationType, typename G1, typename G2>
static bool test_overlay_p_q(std::string const& caseid,
G1 const& p, G2 const& q,
@@ -63,15 +72,15 @@
bg::model::multi_polygon<OutputType> out_i, out_u, out_d, out_d2;
- CalculationType area_p = bg::area(p);
- CalculationType area_q = bg::area(q);
+ CalculationType area_p = p_q_area(p);
+ CalculationType area_q = p_q_area(q);
CalculationType area_d1 = 0, area_d2 = 0;
bg::intersection(p, q, out_i);
- CalculationType area_i = bg::area(out_i);
+ CalculationType area_i = p_q_area(out_i);
bg::union_(p, q, out_u);
- CalculationType area_u = bg::area(out_u);
+ CalculationType area_u = p_q_area(out_u);
double sum = (area_p + area_q) - area_u - area_i;
@@ -81,8 +90,8 @@
{
bg::difference(p, q, out_d);
bg::difference(q, p, out_d2);
- area_d1 = bg::area(out_d);
- area_d2 = bg::area(out_d2);
+ area_d1 = p_q_area(out_d);
+ area_d2 = p_q_area(out_d2);
double sum_d1 = (area_u - area_q) - area_d1;
double sum_d2 = (area_u - area_p) - area_d2;
bool wrong_d1 = std::abs(sum_d1) > settings.tolerance;
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/overlay/traverse.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/overlay/traverse.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/overlay/traverse.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,6 +7,9 @@
// 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
#include <iostream>
#include <iomanip>
@@ -23,16 +26,18 @@
#include <geometry_test_common.hpp>
-//#define BOOST_GEOMETRY_DEBUG_ENRICH
+// #define BOOST_GEOMETRY_DEBUG_ENRICH
//#define BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER
-#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
-#define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
+// #define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+// #define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
#define BOOST_GEOMETRY_TEST_OVERLAY_NOT_EXCHANGED
-
+#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+# define BOOST_GEOMETRY_DEBUG_IDENTIFIER
+#endif
#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
@@ -756,11 +761,11 @@
test_traverse<polygon, polygon, operation_union>::apply("hv3", 1, 1624.22079205664, hv_3[0], hv_3[1], deviation);
test_traverse<polygon, polygon, operation_intersection>::apply("hv3", 1, 1623.8265057282042, hv_3[0], hv_3[1], deviation);
- test_traverse<polygon, polygon, operation_union>::apply("hv4", 1, 1626.5146964146334, hv_4[0], hv_4[1], deviation);
- test_traverse<polygon, polygon, operation_intersection>::apply("hv4", 1, 1626.2580370864305, hv_4[0], hv_4[1], deviation);
if (! is_float)
{
+ test_traverse<polygon, polygon, operation_union>::apply("hv4", 1, 1626.5146964146334, hv_4[0], hv_4[1], deviation);
+ test_traverse<polygon, polygon, operation_intersection>::apply("hv4", 1, 1626.2580370864305, hv_4[0], hv_4[1], deviation);
test_traverse<polygon, polygon, operation_union>::apply("hv5", 1, 1624.2158307261871, hv_5[0], hv_5[1], deviation);
test_traverse<polygon, polygon, operation_intersection>::apply("hv5", 1, 1623.4506071521519, hv_5[0], hv_5[1], deviation);
@@ -830,13 +835,12 @@
and STUnion
*/
- // Boost.List during Formal Review, isovists Brandon
// For FP, they may deviate more.
test_traverse<polygon, polygon, operation_intersection>::apply("isov",
- 1, 88.1920416352664, isovist[0], isovist[1],
+ 1, 88.2558788829, isovist[0], isovist[1],
float_might_deviate_more);
test_traverse<polygon, polygon, operation_union>::apply("isov",
- 1, 313.360374193241, isovist[0], isovist[1],
+ 1, 313.29652252, isovist[0], isovist[1],
float_might_deviate_more);
}
@@ -884,16 +888,72 @@
test_traverse<polygon, polygon, operation_union>::apply("geos_4",
1, 2304.41633605957,
geos_4[0], geos_4[1]);
+
+ if (! is_float)
+ {
- return;
-
- // Cases below still have errors
+#if defined(_MSC_VER)
+ double const expected = if_typed_tt<T>(3.63794e-17, 0.0);
+#else
+ double const expected = if_typed<T, long double>(2.77555756156289135106e-17, 0.0);
+#endif
- // ticket#17
- test_traverse<polygon, box, operation_intersection>::apply("ticket_17", 2, 2.687433027e-006,
- ticket_17[0], ticket_17[1], 0.1);
- test_traverse<polygon, box, operation_union>::apply("ticket_17", 3, 0.00922511561516,
- ticket_17[0], ticket_17[1], 0.1);
+ // Calculate intersection/union of two triangles. Robustness case.
+ // ttmath can form a very small intersection triangle
+ // (which is even not accomplished by SQL Server/PostGIS)
+ std::string const caseid = "ggl_list_20110820_christophe";
+ test_traverse<polygon, polygon, operation_intersection>::apply(caseid,
+ 1, expected,
+ ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1]);
+ test_traverse<polygon, polygon, operation_union>::apply(caseid,
+ 1, 67.3550722317627,
+ ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1]);
+ }
+
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_f",
+ 1, 4.60853,
+ buffer_rt_f[0], buffer_rt_f[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("buffer_rt_f",
+ 1, 0.0002943725152286,
+ buffer_rt_f[0], buffer_rt_f[1]);
+
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g",
+ 1, 16.571,
+ buffer_rt_g[0], buffer_rt_g[1]);
+
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g_boxes1",
+ 1, 20,
+ buffer_rt_g_boxes[0], buffer_rt_g_boxes[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g_boxes2",
+ 1, 24,
+ buffer_rt_g_boxes[0], buffer_rt_g_boxes[2]);
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g_boxes3",
+ 1, 28,
+ buffer_rt_g_boxes[0], buffer_rt_g_boxes[3]);
+
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g_boxes43",
+ 1, 30,
+ buffer_rt_g_boxes[4], buffer_rt_g_boxes[3]);
+
+#ifdef BOOST_GEOMETRY_OVERLAY_NO_THROW
+ {
+ // NOTE: currently throws (normally)
+ std::string caseid = "ggl_list_20120229_volker";
+ test_traverse<polygon, polygon, operation_union>::apply(caseid,
+ 1, 99,
+ ggl_list_20120229_volker[0], ggl_list_20120229_volker[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply(caseid,
+ 1, 99,
+ ggl_list_20120229_volker[0], ggl_list_20120229_volker[1]);
+ caseid = "ggl_list_20120229_volker_2";
+ test_traverse<polygon, polygon, operation_union>::apply(caseid,
+ 1, 99,
+ ggl_list_20120229_volker[2], ggl_list_20120229_volker[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply(caseid,
+ 1, 99,
+ ggl_list_20120229_volker[2], ggl_list_20120229_volker[1]);
+ }
+#endif
}
template <typename T>
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/perimeter.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/perimeter.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/perimeter.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -57,7 +57,7 @@
test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
- test_empty_input<bg::model::d2::point_xy<int> >();
+ // test_empty_input<bg::model::d2::point_xy<int> >();
return 0;
}
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/test_convex_hull.hpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/test_convex_hull.hpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/test_convex_hull.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -40,7 +40,8 @@
<< " detected: " << n);
- BOOST_CHECK(bg::num_points(geometry) == size_original);
+ // We omit this check as it is not important for the hull algorithm
+ // BOOST_CHECK(bg::num_points(geometry) == size_original);
typename bg::default_area_result<Geometry>::type ah = bg::area(hull);
if (reverse)
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/test_difference.hpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/test_difference.hpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/test_difference.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -294,7 +294,8 @@
BOOST_CHECK_CLOSE(length, expected_length, 0.001);
- difference_output(caseid, g1, g2, pieces);
+ std::string lp = "lp_";
+ difference_output(lp + caseid, g1, g2, pieces);
}
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/union.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/union.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/union.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,6 +15,9 @@
#include <iostream>
#include <string>
+#define BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE
+#define TEST_ISOVIST
+
//#define BOOST_GEOMETRY_DEBUG_ASSEMBLE
//#define BOOST_GEOMETRY_DEBUG_IDENTIFIER
@@ -229,24 +232,65 @@
if_typed<ct, double>(5, if_typed_tt<ct>(8, 7)),
14729.07145);
-#ifdef TEST_ENRICO
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, 17),
129904.197692871);
-#endif
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110820_christophe",
+ ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1],
+ 1, 0, 8, 67.3550722317627);
+
+
+#ifdef TEST_ISOVIST
#ifdef _MSC_VER
- // Isovist (submitted by Brandon during Formal Review)
test_one<Polygon, Polygon, Polygon>("isovist",
isovist1[0], isovist1[1],
1,
0,
- if_typed<ct, float>(71,
- if_typed<ct, double>(70, 73)),
- 313.36036462);
+ if_typed<ct, float>(71, if_typed<ct, double>(70, 73)),
+ 313.36036462, 0.1);
+
+ // SQL Server gives: 313.360374193241
+ // PostGIS gives: 313.360364623393
+
#endif
+#endif
+
+ // Ticket 5103 https://svn.boost.org/trac/boost/ticket/5103
+ // This ticket was actually reported for Boost.Polygon
+ // We check it for Boost.Geometry as well.
+ // SQL Server gives: 2515271331437.69
+ // PostGIS gives: 2515271327070.52
+ // Boost.Geometry gives: 2515271327070.5237746891 (ttmath)
+ // 2515271327070.5156 (double)
+ // 2515271320603.0000 (int)
+ // Note the int-test was tested outside of this unit test. It is in two points 0.37 off (logical for an int).
+ // Because of the width of the polygon (400000 meter) this causes a substantial difference.
+
+ test_one<Polygon, Polygon, Polygon>("ticket_5103", ticket_5103[0], ticket_5103[1],
+ 1, 0, 25, 2515271327070.5);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_a", buffer_rt_a[0], buffer_rt_a[1],
+ 1, 0, 265, 19.280667);
+
+ // Robustness issues, followed out buffer-robustness-tests, test them also reverse
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_f", buffer_rt_f[0], buffer_rt_f[1],
+ 1, 0, if_typed<ct, double>(22, 23), 4.60853);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_f_rev", buffer_rt_f[1], buffer_rt_f[0],
+ 1, 0, if_typed<ct, double>(22, 23), 4.60853);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_g", buffer_rt_g[0], buffer_rt_g[1],
+ 1, 0, 17, 16.571);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_g_rev", buffer_rt_g[1], buffer_rt_g[0],
+ 1, 0, 17, 16.571);
+
+ 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],
+ 1, 0, 13, 13.6569);
+
}
template <typename P>
@@ -258,6 +302,7 @@
test_areal<ring, polygon>();
+#if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
// Open
test_areal<bg::model::ring<P, true, false>, bg::model::polygon<P, true, false> >();
@@ -266,6 +311,7 @@
// Counter clockwise and open
test_areal<bg::model::ring<P, false, false>, bg::model::polygon<P, false, false> >();
+#endif
test_one<polygon, box, polygon>("box_ring", example_box, example_ring,
1, 1, 15, 6.38875);
@@ -314,6 +360,7 @@
//test_all<bg::model::d2::point_xy<long double> >();
#if defined(HAVE_TTMATH)
+ std::cout << "Testing TTMATH" << std::endl;
test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
#endif
Modified: branches/quickbook-dev/libs/geometry/test/algorithms/within.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/algorithms/within.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/algorithms/within.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -218,8 +218,33 @@
}
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ std::string const polygon_li = "POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))";
+ bg::model::polygon<int_point_type> int_poly;
+ bg::model::polygon<double_point_type> double_poly;
+ bg::read_wkt(polygon_li, int_poly);
+ bg::read_wkt(polygon_li, double_poly);
+
+ std::string const point_li = "POINT(1592000 583950)";
+ int_point_type int_point;
+ double_point_type double_point;
+ bg::read_wkt(point_li, int_point);
+ bg::read_wkt(point_li, double_point);
+
+ bool wi = bg::within(int_point, int_poly);
+ bool wd = bg::within(double_point, double_poly);
+
+ BOOST_CHECK_MESSAGE(wi == wd, "within<a double> different from within<an int>");
+}
+
int test_main( int , char* [] )
{
+ test_large_integers();
+
test_all<bg::model::d2::point_xy<int> >();
test_all<bg::model::d2::point_xy<double> >();
Modified: branches/quickbook-dev/libs/geometry/test/geometry_test_common.hpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/geometry_test_common.hpp (original)
+++ branches/quickbook-dev/libs/geometry/test/geometry_test_common.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -111,11 +111,11 @@
#endif
-template <typename CoordinateType, typename T>
-inline T if_typed_tt(T value_tt, T value)
+template <typename CoordinateType, typename T1, typename T2>
+inline T1 if_typed_tt(T1 value_tt, T2 value)
{
#if defined(HAVE_TTMATH)
- return boost::is_same<CoordinateType, ttmath_big>::value ? value_tt : value;
+ return boost::is_same<CoordinateType, ttmath_big>::type::value ? value_tt : value;
#else
return value;
#endif
Modified: branches/quickbook-dev/libs/geometry/test/io/wkt/wkt.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/io/wkt/wkt.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/io/wkt/wkt.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -12,7 +12,6 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-//#include <iostream>
#include <sstream>
#include <string>
@@ -58,40 +57,27 @@
BOOST_CHECK_CLOSE(double(bg::perimeter(geometry)), peri, 0.0001);
}
- // String comparison: only for int/double/float etc
- // GMP/CLN add +e01, L0, etc
- if (boost::is_fundamental
- <
- typename bg::coordinate_type<G>::type
- >::type::value)
- {
- std::ostringstream out;
- out << bg::wkt(geometry);
- BOOST_CHECK_EQUAL(boost::to_upper_copy(out.str()),
- boost::to_upper_copy(wkt));
- }
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+ BOOST_CHECK_EQUAL(boost::to_upper_copy(out.str()),
+ boost::to_upper_copy(wkt));
}
template <typename G>
void test_relaxed_wkt(std::string const& wkt, std::string const& expected)
{
- if (boost::is_fundamental
- <
- typename bg::coordinate_type<G>::type
- >::type::value)
- {
- std::string e;
- G geometry;
- bg::read_wkt(wkt, geometry);
- std::ostringstream out;
- out << bg::wkt(geometry);
+ std::string e;
+ G geometry;
+ bg::read_wkt(wkt, geometry);
+ std::ostringstream out;
+ out << bg::wkt(geometry);
- BOOST_CHECK_EQUAL(boost::to_upper_copy(out.str()), boost::to_upper_copy(expected));
- }
+ BOOST_CHECK_EQUAL(boost::to_upper_copy(out.str()), boost::to_upper_copy(expected));
}
+
template <typename G>
void test_wrong_wkt(std::string const& wkt, std::string const& start)
{
@@ -106,8 +92,29 @@
e = ex.what();
boost::to_lower(e);
}
- BOOST_CHECK_MESSAGE(boost::starts_with(e, start), " Expected:"
- << start << " Got:" << e << " with WKT: " << wkt);
+ catch(...)
+ {
+ e = "other exception";
+ }
+
+ bool check = true;
+
+#if defined(HAVE_TTMATH)
+ // For ttmath we skip bad lexical casts
+ typedef typename bg::coordinate_type<G>::type ct;
+
+ if (boost::is_same<ct, ttmath_big>::type::value
+ && boost::starts_with(start, "bad lexical cast"))
+ {
+ check = false;
+ }
+#endif
+
+ if (check)
+ {
+ BOOST_CHECK_MESSAGE(boost::starts_with(e, start), " Expected:"
+ << start << " Got:" << e << " with WKT: " << wkt);
+ }
}
template <typename G>
@@ -126,7 +133,7 @@
using namespace boost::geometry;
typedef bg::model::point<T, 2, bg::cs::cartesian> P;
- test_wkt<P >("POINT(1 2)", 1);
+ test_wkt<P>("POINT(1 2)", 1);
test_wkt<bg::model::linestring<P> >("LINESTRING(1 1,2 2,3 3)", 3, 2 * sqrt(2.0));
test_wkt<bg::model::polygon<P> >("POLYGON((0 0,0 4,4 4,4 0,0 0)"
",(1 1,1 2,2 2,2 1,1 1),(1 1,1 2,2 2,2 1,1 1))", 15, 0, 18, 24);
Modified: branches/quickbook-dev/libs/geometry/test/io/wkt/wkt.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/io/wkt/wkt.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test/io/wkt/wkt.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\wkt"
ConfigurationType="1"
- InheritedPropertySheets="..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
CharacterSet="1"
>
<Tool
@@ -93,7 +93,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\wkt"
ConfigurationType="1"
- InheritedPropertySheets="..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
Modified: branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_convex_hull.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_convex_hull.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_convex_hull.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -47,9 +47,28 @@
typedef bg::model::multi_point<P> mp;
typedef bg::model::multi_linestring<bg::model::linestring<P> > ml;
typedef bg::model::multi_polygon<bg::model::polygon<P> > mpoly;
- test_geometry<mp>("multipoint((1.1 1.1), (2.5 2.1), (3.1 3.1), (4.9 1.1), (3.1 1.9))", 5, 4, 3.8);
+
+ // All points below in upper-points and lower-points
+ test_geometry<mp>("MULTIPOINT((0 0),(5 0),(1 1),(4 1))", -1, 5, 4.0);
+ test_geometry<mp>("MULTIPOINT((0 1),(5 1),(1 0),(4 0))", -1, 5, 4.0);
+
+ // All points in vertical line (this delivers an empty polygon with 2 points and a closing point)
+ test_geometry<mp>("MULTIPOINT((1 0),(5 0),(3 0),(4 0),(2 0))", -1, 3, 0.0);
+
+ // One point only
+ test_geometry<mp>("MULTIPOINT((1 0))", -1, 3, 0.0);
+
+ // Problem of 6019, reproduced by the convex hull robustness test:
+ test_geometry<mp>("MULTIPOINT((2 9),(1 3),(9 4),(1 1),(1 0),(7 9),(2 5),(3 7),(3 6),(2 4))",
+ -1, 6, 48.0);
+
+ // Ticket 6019:
+ test_geometry<mp>("MULTIPOINT((0 53),(0 103),(0 53),(0 3),(0 3),(0 0),(1 0),(1 1),(2 1),(2 0),(2 0),(2 0),(3 0),(3 1),(4 1),(4 0),(5 0),(0 3),(10 3),(10 2),(10 2),(10 2),(5 2),(5 0),(5 0),(55 0),(105 0))",
+ -1, 4, 5407.5);
// Ticket 6021:
test_geometry<mp>("multipoint((0 53), (0 103), (1 53))", 3, 4, 25);
+
+ test_geometry<mp>("multipoint((1.1 1.1), (2.5 2.1), (3.1 3.1), (4.9 1.1), (3.1 1.9))", 5, 4, 3.8);
test_geometry<ml>("multilinestring((2 4, 3 4, 3 5), (4 3,4 4,5 4))", 6, 5, 3.0);
test_geometry<mpoly>("multipolygon(((1 4,1 6,2 5,3 5,4 6,4 4,1 4)), ((4 2,4 3,6 3,6 2,4 2)))", 12, 7, 14.0);
Modified: branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_difference.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_difference.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_difference.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -13,6 +13,11 @@
// #define BOOST_GEOMETRY_DEBUG_ASSEMBLE
//#define BOOST_GEOMETRY_CHECK_WITH_SQLSERVER
+//#define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
+//#define BOOST_GEOMETRY_DEBUG_FOLLOW
+//#define BOOST_GEOMETRY_DEBUG_TRAVERSE
+
+
#include <algorithms/test_difference.hpp>
#include <algorithms/test_overlay.hpp>
#include <multi/algorithms/overlay/multi_overlay_cases.hpp>
@@ -151,10 +156,25 @@
typedef typename bg::point_type<Polygon>::type Point;
typedef bg::model::ring<Point> Ring;
- test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_1", "LINESTRING(2 0,2 5)", case_multi_simplex[0], 3, 5, 1.30);
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_1", "LINESTRING(2 0,2 5)", case_multi_simplex[0], 2, 4, 1.30);
test_one_lp<LineString, MultiLineString, Polygon>("case_p_mls_1", "MULTILINESTRING((2 0,2 5),(3 0,3 5))", case_single_simplex, 3, 6, 2.5);
- test_one_lp<LineString, MultiLineString, MultiPolygon>("case_mp_mls_1", "MULTILINESTRING((2 0,2 5),(3 0,3 5))", case_multi_simplex[0], 6, 11, 3.1666667);
+ test_one_lp<LineString, MultiLineString, MultiPolygon>("case_mp_mls_1", "MULTILINESTRING((2 0,2 5),(3 0,3 5))", case_multi_simplex[0], 5, 10, 3.1666667);
test_one_lp<LineString, MultiLineString, Ring>("case_r_mls_1", "MULTILINESTRING((2 0,2 5),(3 0,3 5))", case_single_simplex, 3, 6, 2.5);
+
+ // Collinear cases, with multiple turn points at the same location
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_2a", "LINESTRING(1 0,1 1,2 1,2 0)", "MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)),((1 1,1 2,2 2,2 1,1 1)))", 1, 2, 1.0);
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_2b", "LINESTRING(1 0,1 1,2 1,2 0)", "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((0 0,0 1,1 1,1 0,0 0)))", 1, 2, 1.0);
+
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_3",
+ "LINESTRING(6 6,6 7,7 7,7 6,8 6,8 7,9 7,9 6)",
+ "MULTIPOLYGON(((5 7,5 8,6 8,6 7,5 7)),((6 6,6 7,7 7,7 6,6 6)),((8 8,9 8,9 7,8 7,7 7,7 8,8 8)))", 2, 5, 3.0);
+
+ return;
+
+ // TODO: this case contains collinearities and should still be solved
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_4",
+ "LINESTRING(0 5,0 6,1 6,1 5,2 5,2 6,3 6,3 5,3 4,3 3,2 3,2 4,1 4,1 3,0 3,0 4)",
+ "MULTIPOLYGON(((0 2,0 3,1 2,0 2)),((2 5,3 6,3 5,2 5)),((1 5,1 6,2 6,2 5,1 5)),((2 3,2 4,3 4,2 3)),((0 3,1 4,1 3,0 3)),((4 3,3 3,3 5,4 5,4 4,4 3)))", 5, 11, 6.0);
}
@@ -175,7 +195,8 @@
test_all<bg::model::d2::point_xy<double> >();
#ifdef HAVE_TTMATH
- //test_all<bg::model::d2::point_xy<ttmath_big> >();
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
return 0;
Modified: branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_intersection.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_intersection.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_intersection.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -212,6 +212,7 @@
test_all<bg::model::d2::point_xy<double> >();
#ifdef HAVE_TTMATH
+ std::cout << "Testing TTMATH" << std::endl;
test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
Modified: branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_union.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_union.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/multi/algorithms/multi_union.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -105,7 +105,7 @@
1, 0, 14, 100.0); // Area from SQL Server
test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_3",
case_recursive_boxes_3[0], case_recursive_boxes_3[1],
- 18, 0, 160, 56.5); // Area from SQL Server
+ 17, 0, 159, 56.5); // Area from SQL Server
}
template <typename P>
@@ -134,7 +134,8 @@
test_all<bg::model::d2::point_xy<double> >();
#ifdef HAVE_TTMATH
- //test_all<bg::model::d2::point_xy<ttmath_big> >();
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
return 0;
Modified: branches/quickbook-dev/libs/geometry/test/multi/algorithms/overlay/multi_overlay_cases.hpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/multi/algorithms/overlay/multi_overlay_cases.hpp (original)
+++ branches/quickbook-dev/libs/geometry/test/multi/algorithms/overlay/multi_overlay_cases.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -293,7 +293,7 @@
{
// for intersection
"MULTIPOLYGON(((0 0,0 1,1 0,0 0)),((2 2,2 1,0 1,0 2,1 2,2 3,2 2)))",
- "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((1 2,0 1,0 3,1 4,1 2))))"
+ "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((1 2,0 1,0 3,1 4,1 2)))"
};
static std::string case_101_multi[2] =
Modified: branches/quickbook-dev/libs/geometry/test/multi/io/wkt/wkt.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/multi/io/wkt/wkt.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/multi/io/wkt/wkt.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -55,9 +55,30 @@
test_wkt<bg::model::multi_linestring<bg::model::linestring<P> > >("multilinestring((1 1,2 2,3 3),(4 4,5 5,6 6))", 6, 4 * sqrt(2.0));
test_wkt<bg::model::multi_polygon<bg::model::polygon<P> > >("multipolygon(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((0 0,0 4,4 4,4 0,0 0)))", 15, 0, 21, 28);
+ // Support for the official alternative syntax for multipoint
+ // (provided by Aleksey Tulinov):
+ test_relaxed_wkt<bg::model::multi_point<P> >("multipoint(1 2,3 4)", "multipoint((1 2),(3 4))");
+
test_wrong_wkt<bg::model::multi_polygon<bg::model::polygon<P> > >(
"MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),(0 0,0 4,4 4,4 0,0 0)))",
"expected '('");
+
+ test_wrong_wkt<bg::model::multi_linestring<bg::model::linestring<P> > >(
+ "MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10)), (0 0, 1 1)",
+ "too much tokens at ','");
+
+ test_wrong_wkt<bg::model::multi_point<P> >(
+ "MULTIPOINT((8 9), 10 11)",
+ "expected '(' at '10'");
+ test_wrong_wkt<bg::model::multi_point<P> >(
+ "MULTIPOINT(12 13, (14 15))",
+ "bad lexical cast: source type value could not be interpreted as target at '(' in 'multipoint(12 13, (14 15))'");
+ test_wrong_wkt<bg::model::multi_point<P> >(
+ "MULTIPOINT((16 17), (18 19)",
+ "expected ')' in 'multipoint((16 17), (18 19)'");
+ test_wrong_wkt<bg::model::multi_point<P> >(
+ "MULTIPOINT(16 17), (18 19)",
+ "too much tokens at ',' in 'multipoint(16 17), (18 19)'");
}
/*
Modified: branches/quickbook-dev/libs/geometry/test/multi/io/wkt/wkt.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/multi/io/wkt/wkt.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test/multi/io/wkt/wkt.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\wkt"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../../..;../../../.."
+ AdditionalIncludeDirectories="../../../../../..;../../.."
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -93,7 +93,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\wkt"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -114,7 +114,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../../..;../../../.."
+ AdditionalIncludeDirectories="../../../../../..;../../.."
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test/strategies/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/strategies/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/geometry/test/strategies/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -15,6 +15,7 @@
[ run projected_point.cpp ]
[ run pythagoras.cpp ]
[ run spherical_side.cpp ]
+ [ run transform_cs.cpp ]
[ run transformer.cpp ]
[ run within.cpp ]
;
Modified: branches/quickbook-dev/libs/geometry/test/strategies/projected_point.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/strategies/projected_point.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/strategies/projected_point.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -87,33 +87,62 @@
}
-template <typename P1, typename P2>
-void test_all_2d()
+template <typename P1, typename P2, typename T>
+void test_all_2d(std::string const& wkt_p,
+ std::string const& wkt_sp1,
+ std::string const& wkt_sp2,
+ T expected_distance)
{
P1 p;
P2 sp1, sp2;
- bg::read_wkt("POINT(1 1)", p);
- bg::read_wkt("POINT(0 0)", sp1);
- bg::read_wkt("POINT(2 3)", sp2);
-
- typedef typename bg::strategy::distance::projected_point
- <
- P1,
- P2
- > strategy_type;
-
- BOOST_CONCEPT_ASSERT
- (
- (bg::concept::PointSegmentDistanceStrategy<strategy_type>)
- );
-
+ bg::read_wkt(wkt_p, p);
+ bg::read_wkt(wkt_sp1, sp1);
+ bg::read_wkt(wkt_sp2, sp2);
+
+ {
+ typedef bg::strategy::distance::projected_point
+ <
+ P1,
+ P2
+ > strategy_type;
+
+ BOOST_CONCEPT_ASSERT
+ (
+ (bg::concept::PointSegmentDistanceStrategy<strategy_type>)
+ );
+
+ strategy_type strategy;
+ typedef typename bg::strategy::distance::services::return_type<strategy_type>::type return_type;
+ return_type d = strategy.apply(p, sp1, sp2);
+ BOOST_CHECK_CLOSE(d, expected_distance, 0.001);
+ }
+
+ // Test combination with the comparable strategy
+ {
+ typedef bg::strategy::distance::projected_point
+ <
+ P1,
+ P2,
+ void,
+ bg::strategy::distance::comparable::pythagoras<P1, P2>
+ > strategy_type;
+ strategy_type strategy;
+ typedef typename bg::strategy::distance::services::return_type<strategy_type>::type return_type;
+ return_type d = strategy.apply(p, sp1, sp2);
+ T expected_squared_distance = expected_distance * expected_distance;
+ BOOST_CHECK_CLOSE(d, expected_squared_distance, 0.01);
+ }
- strategy_type strategy;
- typedef typename bg::strategy::distance::services::return_type<strategy_type>::type return_type;
- return_type d = strategy.apply(p, sp1, sp2);
- BOOST_CHECK_CLOSE(d, return_type(0.27735203958327), 0.001);
}
+template <typename P1, typename P2>
+void test_all_2d()
+{
+ test_all_2d<P1, P2>("POINT(1 1)", "POINT(0 0)", "POINT(2 3)", 0.27735203958327);
+ test_all_2d<P1, P2>("POINT(2 2)", "POINT(1 4)", "POINT(4 1)", 0.5 * sqrt(2.0));
+ test_all_2d<P1, P2>("POINT(6 1)", "POINT(1 4)", "POINT(4 1)", 2.0);
+ test_all_2d<P1, P2>("POINT(1 6)", "POINT(1 4)", "POINT(4 1)", 2.0);
+}
template <typename P>
void test_all_2d()
Modified: branches/quickbook-dev/libs/geometry/test/strategies/pythagoras.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/strategies/pythagoras.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/strategies/pythagoras.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -233,6 +233,43 @@
"987654.32100001", "876543.21900001");
}
+template <typename CoordinateType>
+void test_integer(bool check_types)
+{
+ typedef bg::model::point<CoordinateType, 2, bg::cs::cartesian> point_type;
+
+ point_type p1, p2;
+ bg::assign_values(p1, 12345678, 23456789);
+ bg::assign_values(p2, 98765432, 87654321);
+
+ typedef bg::strategy::distance::pythagoras
+ <
+ point_type
+ > pythagoras_type;
+ pythagoras_type pythagoras;
+ BOOST_AUTO(distance, pythagoras.apply(p1, p2));
+ BOOST_CHECK_CLOSE(distance, 107655455.02347542, 0.001);
+
+ typedef typename bg::strategy::distance::services::comparable_type
+ <
+ pythagoras_type
+ >::type comparable_type;
+ comparable_type comparable;
+ BOOST_AUTO(cdistance, comparable.apply(p1, p2));
+ BOOST_CHECK_EQUAL(cdistance, 11589696996311540);
+
+ typedef BOOST_TYPEOF(cdistance) cdistance_type;
+ typedef BOOST_TYPEOF(distance) distance_type;
+
+ distance_type distance2 = sqrt(distance_type(cdistance));
+ BOOST_CHECK_CLOSE(distance, distance2, 0.001);
+
+ if (check_types)
+ {
+ BOOST_CHECK((boost::is_same<distance_type, double>::type::value));
+ BOOST_CHECK((boost::is_same<cdistance_type, boost::long_long_type>::type::value));
+ }
+}
template <typename P1, typename P2>
@@ -284,6 +321,10 @@
int test_main(int, char* [])
{
+ test_integer<int>(true);
+ test_integer<boost::long_long_type>(true);
+ test_integer<double>(false);
+
test_all_3d<int[3]>();
test_all_3d<float[3]>();
test_all_3d<double[3]>();
@@ -303,7 +344,8 @@
test_services<double[3], test::test_point, float>();
- time_compare<bg::model::point<double, 2, bg::cs::cartesian> >(10000);
+ // TODO move this to another non-unit test
+ // time_compare<bg::model::point<double, 2, bg::cs::cartesian> >(10000);
#if defined(HAVE_TTMATH)
Modified: branches/quickbook-dev/libs/geometry/test/strategies/segment_intersection_collinear.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/strategies/segment_intersection_collinear.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/strategies/segment_intersection_collinear.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -58,11 +58,6 @@
int expected_x2 = -99, int expected_y2 = -99)
{
-
-//#ifdef REPORT
- std::cout << "Case: " << case_id << std::endl;
-//#endif
-
typedef typename bg::coordinate_type<P>::type coordinate_type;
typedef bg::model::referring_segment<const P> segment_type;
@@ -243,6 +238,15 @@
6, 0, 2, 0,
'e', true, 0, 0,
2, 0, 6, 0);
+
+ // a1---------->a2
+ // b2<----------b1
+ test_segment_intersection<P>("case_recursive_boxes_1",
+ 10, 7, 10, 6,
+ 10, 10, 10, 9,
+ 'd', false, 0, 0,
+ -1, -1, -1, -1);
+
}
int test_main(int, char* [])
Modified: branches/quickbook-dev/libs/geometry/test/strategies/strategies_tests.sln
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/strategies/strategies_tests.sln (original)
+++ branches/quickbook-dev/libs/geometry/test/strategies/strategies_tests.sln 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,6 +18,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "within", "within.vcproj", "{AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "transform_cs", "transform_cs.vcproj", "{2128A5D9-C67E-4C00-A917-A79058C78FCC}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -60,6 +62,10 @@
{AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}.Debug|Win32.Build.0 = Debug|Win32
{AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}.Release|Win32.ActiveCfg = Release|Win32
{AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}.Release|Win32.Build.0 = Release|Win32
+ {2128A5D9-C67E-4C00-A917-A79058C78FCC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2128A5D9-C67E-4C00-A917-A79058C78FCC}.Debug|Win32.Build.0 = Debug|Win32
+ {2128A5D9-C67E-4C00-A917-A79058C78FCC}.Release|Win32.ActiveCfg = Release|Win32
+ {2128A5D9-C67E-4C00-A917-A79058C78FCC}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: branches/quickbook-dev/libs/geometry/test/util/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/util/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/geometry/test/util/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,7 @@
test-suite boost-geometry-util
:
+ [ run calculation_type.cpp ]
[ run for_each_coordinate.cpp ]
[ run rational.cpp ]
[ run select_most_precise.cpp ]
Modified: branches/quickbook-dev/libs/geometry/test/util/select_most_precise.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/util/select_most_precise.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test/util/select_most_precise.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,33 +18,14 @@
#include <boost/geometry/util/select_most_precise.hpp>
-#include <boost/mpl/int.hpp>
+struct user_defined {};
-
-using namespace boost::geometry;
-
-struct user_defined
-{
-};
-
-template <typename T> struct check_selection : public boost::mpl::int_<0> {};
-
-template <> struct check_selection<short int> : public boost::mpl::int_<1> {};
-template <> struct check_selection<int> : public boost::mpl::int_<2> {};
-template <> struct check_selection<float> : public boost::mpl::int_<11> {};
-template <> struct check_selection<double> : public boost::mpl::int_<12> {};
-template <> struct check_selection<long double> : public boost::mpl::int_<13> {};
-template <> struct check_selection<user_defined> : public boost::mpl::int_<99> {};
-
-template <> struct check_selection<void> : public boost::mpl::int_<98> {};
-
-
-template <typename T1, typename T2, typename TypeToBeSelected>
+template <typename T1, typename T2, typename ExpectedType>
void test()
{
typedef typename bg::select_most_precise<T1, T2>::type type;
- BOOST_CHECK_EQUAL(check_selection<type>::type::value,
- check_selection<TypeToBeSelected>::type::value);
+
+ BOOST_CHECK((boost::is_same<type, ExpectedType>::type::value));
}
int test_main(int, char* [])
Modified: branches/quickbook-dev/libs/geometry/test/util/util_tests.sln
==============================================================================
--- branches/quickbook-dev/libs/geometry/test/util/util_tests.sln (original)
+++ branches/quickbook-dev/libs/geometry/test/util/util_tests.sln 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rational", "rational.vcproj", "{6ABF6324-C1DC-4687-9895-B4CE2B27446F}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calculation_type", "calculation_type.vcproj", "{CF8FE803-A26B-4553-B605-9C28225B5595}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -36,6 +38,10 @@
{6ABF6324-C1DC-4687-9895-B4CE2B27446F}.Debug|Win32.Build.0 = Debug|Win32
{6ABF6324-C1DC-4687-9895-B4CE2B27446F}.Release|Win32.ActiveCfg = Release|Win32
{6ABF6324-C1DC-4687-9895-B4CE2B27446F}.Release|Win32.Build.0 = Release|Win32
+ {CF8FE803-A26B-4553-B605-9C28225B5595}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CF8FE803-A26B-4553-B605-9C28225B5595}.Debug|Win32.Build.0 = Debug|Win32
+ {CF8FE803-A26B-4553-B605-9C28225B5595}.Release|Win32.ActiveCfg = Release|Win32
+ {CF8FE803-A26B-4553-B605-9C28225B5595}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,5 +16,6 @@
:
[ run polygon_buffer.cpp ]
[ run linestring_buffer.cpp ]
+ [ run multi_polygon_buffer.cpp ]
;
Modified: branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/buffer.sln
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/buffer.sln (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/buffer.sln 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -4,6 +4,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "linestring_buffer", "linestring_buffer.vcproj", "{02387445-E879-49F4-8264-C7CF9C6B8B9D}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_polygon_buffer", "multi_polygon_buffer.vcproj", "{1E74F110-996E-44DD-A2EC-5D3B55425903}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -18,6 +20,10 @@
{02387445-E879-49F4-8264-C7CF9C6B8B9D}.Debug|Win32.Build.0 = Debug|Win32
{02387445-E879-49F4-8264-C7CF9C6B8B9D}.Release|Win32.ActiveCfg = Release|Win32
{02387445-E879-49F4-8264-C7CF9C6B8B9D}.Release|Win32.Build.0 = Release|Win32
+ {1E74F110-996E-44DD-A2EC-5D3B55425903}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1E74F110-996E-44DD-A2EC-5D3B55425903}.Debug|Win32.Build.0 = Debug|Win32
+ {1E74F110-996E-44DD-A2EC-5D3B55425903}.Release|Win32.ActiveCfg = Release|Win32
+ {1E74F110-996E-44DD-A2EC-5D3B55425903}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/linestring_buffer.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/linestring_buffer.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/linestring_buffer.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -31,6 +31,9 @@
static std::string const overlapping = "LINESTRING(0 0,4 5,7 4,10 6, 10 2,2 2)";
static std::string const curve = "LINESTRING(2 7,3 5,5 4,7 5,8 7)";
+static std::string const for_collinear = "LINESTRING(2 0,0 0,0 4,6 4,6 0,4 0)";
+static std::string const for_collinear2 = "LINESTRING(2 1,2 0,0 0,0 4,6 4,6 0,4 0,4 1)";
+
static std::string const chained2 = "LINESTRING(0 0,1 1,2 2)";
static std::string const chained3 = "LINESTRING(0 0,1 1,2 2,3 3)";
static std::string const chained4 = "LINESTRING(0 0,1 1,2 2,3 3,4 4)";
@@ -46,32 +49,55 @@
typedef bg::model::linestring<P> linestring;
typedef bg::model::polygon<P> polygon;
- double factor = +1.0; // does NOT yet work for negative buffer
- double right = factor * 1.0;
-
- test_one<linestring, buf::join_round, polygon>("simplex", simplex, 'r', 19.2093727122985, 1.5, right);
- test_one<linestring, buf::join_miter, polygon>("simplex", simplex, 'm', 19.2093727122985, 1.5, right);
-
- test_one<linestring, buf::join_round, polygon>("straight", straight, 'r', 19.2093727122985, 1.5, right);
- test_one<linestring, buf::join_miter, polygon>("straight", straight, 'm', 19.2093727122985, 1.5, right);
+ test_one<linestring, buf::join_round, polygon>("simplex", simplex, 'r', 19.209, 1.5, 1.5);
+ test_one<linestring, buf::join_miter, polygon>("simplex", simplex, 'm', 19.209, 1.5, 1.5);
- test_one<linestring, buf::join_round, polygon>("one_bend", one_bend, 'r', 28.4879539312069, 1.5, right);
- test_one<linestring, buf::join_miter, polygon>("one_bend", one_bend, 'm', 28.6962056928037, 1.5, right);
+ test_one<linestring, buf::join_miter, polygon>("simplex_asym_neg", simplex, 'm', 3.202, +1.5, -1.0);
+ test_one<linestring, buf::join_miter, polygon>("simplex_asym_pos", simplex, 'm', 3.202, -1.5, +1.0);
- test_one<linestring, buf::join_round, polygon>("two_bends", two_bends, 'r', 39.2220036534424, 1.5, right);
- test_one<linestring, buf::join_miter, polygon>("two_bends", two_bends, 'm', 39.5128595191957, 1.5, right);
+ //test_one<linestring, buf::join_round, polygon>("straight", straight, 'r', 19.2093727122985, 1.5, 1.5);
+ //test_one<linestring, buf::join_miter, polygon>("straight", straight, 'm', 19.2093727122985, 1.5, 1.5);
- test_one<linestring, buf::join_round, polygon>("overlapping", overlapping, 'r', 65.646005724872, 1.5, right);
- test_one<linestring, buf::join_miter, polygon>("overlapping", overlapping, 'm', 68.1395194809293, 1.5, right);
+ test_one<linestring, buf::join_round, polygon>("one_bend", one_bend, 'r', 28.488, 1.5, 1.5);
+ test_one<linestring, buf::join_miter, polygon>("one_bend", one_bend, 'm', 28.696, 1.5, 1.5);
+
+ test_one<linestring, buf::join_round, polygon>("two_bends", two_bends, 'r', 39.222, 1.5, 1.5);
+ test_one<linestring, buf::join_miter, polygon>("two_bends", two_bends, 'm', 39.513, 1.5, 1.5);
+ test_one<linestring, buf::join_round, polygon>("two_bends_left", two_bends, 'r', 20.028, 1.5, 0.0);
+ test_one<linestring, buf::join_miter, polygon>("two_bends_left", two_bends, 'm', 20.225, 1.5, 0.0);
+ test_one<linestring, buf::join_round, polygon>("two_bends_right", two_bends, 'r', 19.211, 0.0, 1.5);
+ test_one<linestring, buf::join_miter, polygon>("two_bends_right", two_bends, 'm', 19.288, 0.0, 1.5);
+
+
+ // Next (and all similar cases) which a offsetted-one-sided buffer has to be fixed.
+ //test_one<linestring, buf::join_miter, polygon>("two_bends_neg", two_bends, 'm', 99, +1.5, -1.0);
+ //test_one<linestring, buf::join_miter, polygon>("two_bends_pos", two_bends, 'm', 99, -1.5, +1.0);
+ //test_one<linestring, buf::join_round, polygon>("two_bends_neg", two_bends, 'r', 99, +1.5, -1.0);
+ //test_one<linestring, buf::join_round, polygon>("two_bends_pos", two_bends, 'r', 99, -1.5, +1.0);
+
+ test_one<linestring, buf::join_round, polygon>("overlapping150", overlapping, 'r', 65.646, 1.5, 1.5);
+ test_one<linestring, buf::join_miter, polygon>("overlapping150", overlapping, 'm', 68.140, 1.5, 1.5);
+ // Different cases with intersection points on flat and (left/right from line itself)
+ test_one<linestring, buf::join_round, polygon>("overlapping_asym_150_010", overlapping, 'r', 48.308, 1.5, 0.25);
+ test_one<linestring, buf::join_miter, polygon>("overlapping_asym_150_010", overlapping, 'm', 50.770, 1.5, 0.25);
+ test_one<linestring, buf::join_round, polygon>("overlapping_asym_150_075", overlapping, 'r', 58.506, 1.5, 0.75);
+ test_one<linestring, buf::join_miter, polygon>("overlapping_asym_150_075", overlapping, 'm', 60.985, 1.5, 0.75);
+ test_one<linestring, buf::join_round, polygon>("overlapping_asym_150_100", overlapping, 'r', 62.514, 1.5, 1.0);
+ test_one<linestring, buf::join_miter, polygon>("overlapping_asym_150_100", overlapping, 'm', 64.984, 1.5, 1.0);
+
+ test_one<linestring, buf::join_round, polygon>("for_collinear", for_collinear, 'r', 68.561, 2.0, 2.0);
+ test_one<linestring, buf::join_miter, polygon>("for_collinear", for_collinear, 'm', 72, 2.0, 2.0);
+ test_one<linestring, buf::join_round, polygon>("for_collinear2", for_collinear2, 'r', 74.387, 2.0, 2.0);
+ test_one<linestring, buf::join_miter, polygon>("for_collinear2", for_collinear2, 'm', 78.0, 2.0, 2.0);
+
+ //test_one<linestring, buf::join_round, polygon>("curve", curve, 'r', 99, 5.0, 3.0);
+ //test_one<linestring, buf::join_miter, polygon>("curve", curve, 'm', 99, 5.0, 3.0);
+
+ test_one<linestring, buf::join_round, polygon>("chained2", chained2, 'r', 11.3137, 2.5, 1.5);
+ test_one<linestring, buf::join_round, polygon>("chained3", chained3, 'r', 16.9706, 2.5, 1.5);
+ test_one<linestring, buf::join_round, polygon>("chained4", chained4, 'r', 22.6274, 2.5, 1.5);
- test_one<linestring, buf::join_round, polygon>("curve", curve, 'r', 65.646005724872, 5.0, factor * 3.0);
- test_one<linestring, buf::join_miter, polygon>("curve", curve, 'm', 68.1395194809293, 5.0, factor * 3.0);
-
- test_one<linestring, buf::join_round, polygon>("chained2", chained2, 'r', 65.646005724872, 2.5, factor * 1.5);
- test_one<linestring, buf::join_round, polygon>("chained3", chained3, 'r', 65.646005724872, 2.5, factor * 1.5);
- test_one<linestring, buf::join_round, polygon>("chained4", chained4, 'r', 65.646005724872, 2.5, factor * 1.5);
-
- test_one<linestring, buf::join_round, polygon>("reallife1", reallife1, 'r', 65.646005724872, 16.5, factor * 6.5);
+ //test_one<linestring, buf::join_round, polygon>("reallife1", reallife1, 'r', 99, 16.5, 6.5);
}
@@ -86,6 +112,5 @@
test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
//test_all<bg::model::point<tt, 2, bg::cs::cartesian> >();
-
return 0;
}
Modified: branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/polygon_buffer.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/polygon_buffer.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/polygon_buffer.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -19,12 +19,26 @@
= "POLYGON ((0 0,1 5,6 1,0 0))";
static std::string const concave_simplex
= "POLYGON ((0 0,3 5,3 3,5 3,0 0))";
+static std::string const chained_box
+ = "POLYGON((0 0,0 4,4 4,8 4,12 4,12 0,8 0,4 0,0 0))";
+
static std::string const donut_simplex
= "POLYGON ((0 0,1 9,8 1,0 0),(1 1,4 1,1 4,1 1))";
static std::string const letter_L
= "POLYGON ((0 0,0 4,1 4,1 1,3 1,3 0,0 0))";
static std::string const indentation
= "POLYGON ((0 0,0 5,4 5,4 4,3 3,2 4,2 1,3 2,4 1,4 0,0 0))";
+static std::string const funnelgate
+ = "POLYGON((0 0,0 7,7 7,7 0,5 0,5 1,6 6,1 6,2 1,2 0,0 0))";
+static std::string const gammagate
+ = "POLYGON((0 0,0 6,9 6,9 0,4 0,4 2,7 2,7 4,2 4,2 0,0 0))";
+static std::string const fork_a
+ = "POLYGON((0 0,0 6,9 6,9 0,4 0,4 2,7 2,7 4,6 4,6 5,5 5,5 4,4 4,4 5,3 5,3 4,2 4,2 0,0 0))";
+static std::string const fork_b
+ = "POLYGON((0 0,0 8,14 8,14 0,4 0,4 2,13 2,13 4,12 4,12 7,9 7,9 4,7 4,7 7,4 7,4 4,2 4,2 0,0 0))";
+static std::string const fork_c
+ = "POLYGON((0 0,0 9,12 9,12 0,4 0,4 4,6 4,6 2,8 2,8 4,10 4,10 7,6 7,6 6,2 6,2 0,0 0))";
+
static std::string const arrow
= "POLYGON ((1 0,1 5,0.5 4.5,2 10,3.5 4.5,3 5,3 0,1 0))";
static std::string const tipped_aitch
@@ -54,99 +68,162 @@
typedef bg::model::polygon<P> polygon_type;
- test_one<polygon_type, buf::join_miter, polygon_type>("L", letter_L, 'm', 14, 0.5);
- test_one<polygon_type, buf::join_round, polygon_type>("L", letter_L, 'r', 13.7254516100806, 0.5);
- test_one<polygon_type, buf::join_miter, polygon_type>("simplex", simplex, 'm', 52.8733092508931, 1.5);
- test_one<polygon_type, buf::join_round, polygon_type>("simplex", simplex, 'r', 47.9004943967109, 1.5);
- test_one<polygon_type, buf::join_miter, polygon_type>("concave_simplex", concave_simplex, 'm', 16.3861105439862, 0.5);
- test_one<polygon_type, buf::join_round, polygon_type>("concave_simplex", concave_simplex, 'r', 14.5563908986706, 0.5);
-
- test_one<polygon_type, buf::join_miter, polygon_type>("indentation4", indentation, 'm', 25.7741125496954, 0.4);
- test_one<polygon_type, buf::join_round, polygon_type>("indentation4", indentation, 'r', 25.5641980024698, 0.4);
-
- test_one<polygon_type, buf::join_miter, polygon_type>("indentation8", indentation, 'm', 35.594305909533, 0.8);
- test_one<polygon_type, buf::join_round, polygon_type>("indentation8", indentation, 'r', 35.0012686715019, 0.8);
- test_one<polygon_type, buf::join_miter, polygon_type>("indentation12", indentation, 'm', 46.3541038841777, 1.2);
- test_one<polygon_type, buf::join_round, polygon_type>("indentation12", indentation, 'r', 45.0197700986076, 1.2);
- test_one<polygon_type, buf::join_miter, polygon_type>("indentation4_neg", indentation, 'm', 6.99098413022335, -0.4);
+ test_one<polygon_type, buf::join_round, polygon_type>("simplex", simplex, 'r', 47.9408, 1.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("simplex", simplex, 'm', 52.8733, 1.5);
+ test_one<polygon_type, buf::join_round, polygon_type>("concave_simplex", concave_simplex, 'r', 14.5616, 0.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("concave_simplex", concave_simplex, 'm', 16.3861, 0.5);
+ test_one<polygon_type, buf::join_round, polygon_type>("chained_box", chained_box, 'r', 83.1403, 1.0);
+ test_one<polygon_type, buf::join_miter, polygon_type>("chained_box", chained_box, 'm', 84, 1.0);
+ test_one<polygon_type, buf::join_round, polygon_type>("L", letter_L, 'r', 13.7314, 0.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("L", letter_L, 'm', 14.0, 0.5);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation4", indentation, 'm', 25.7741, 0.4);
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation4", indentation, 'r', 25.5695, 0.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation5", indentation, 'm', 28.2426, 0.5);
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation5", indentation, 'r', 27.9953, 0.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation6", indentation, 'm', 30.6712, 0.6);
+
+ // SQL Server gives 30.34479159164
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation6", indentation, 'r', 30.3445, 0.6);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation7", indentation, 'm', 33.0958, 0.7);
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation7", indentation, 'r', 32.6533, 0.7);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation8", indentation, 'm', 35.5943, 0.8);
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation8", indentation, 'r', 35.0164, 0.8);
+ test_one<polygon_type, buf::join_miter, polygon_type>("indentation12", indentation, 'm', 46.3541, 1.2);
+ test_one<polygon_type, buf::join_round, polygon_type>("indentation12", indentation, 'r', 45.0537, 1.2);
+
+ // TODO: fix, the buffered pieces are currently counterclockwise, that should be reversed
+ //test_one<polygon_type, buf::join_miter, polygon_type>("indentation4_neg", indentation, 'm', 6.99098413022335, -0.4);
//test_one<polygon_type, buf::join_round, polygon_type>("indentation4_neg", indentation, 'r', 7.25523322189147, -0.4);
- test_one<polygon_type, buf::join_miter, polygon_type>("indentation8_neg", indentation, 'm', 1.36941992048731, -0.8);
+ //test_one<polygon_type, buf::join_miter, polygon_type>("indentation8_neg", indentation, 'm', 1.36941992048731, -0.8);
//test_one<polygon_type, buf::join_round, polygon_type>("indentation8_neg", indentation, 'r', 1.37375487490664, -0.8);
- test_one<polygon_type, buf::join_miter, polygon_type>("indentation12_neg", indentation, 'm', 0, -1.2);
+ //test_one<polygon_type, buf::join_miter, polygon_type>("indentation12_neg", indentation, 'm', 0, -1.2);
//test_one<polygon_type, buf::join_round, polygon_type>("indentation12_neg", indentation, 'r', 0, -1.2);
- test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex6", donut_simplex, 'm', 53.6479838666524, 0.6);
- test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex6", donut_simplex, 'r', 52.8197383107592, 0.6);
- test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex8", donut_simplex, 'm', 61.1323012599270, 0.8);
- test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex8", donut_simplex, 'r', 59.6598647161168, 0.8);
- test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex10", donut_simplex, 'm', 68.6698998096905, 1.0);
- test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex10", donut_simplex, 'r', 66.3692177099870, 1.0);
- test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex12", donut_simplex, 'm', 76.6051864381534, 1.2);
- test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex12", donut_simplex, 'r', 73.2922042145803, 1.2);
- test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex14", donut_simplex, 'm', 84.9742419554578, 1.4);
- test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex14", donut_simplex, 'r', 80.4649050400389, 1.4);
- test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex16", donut_simplex, 'm', 93.7770663616038, 1.6);
- test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex16", donut_simplex, 'r', 87.8873201863629, 1.6);
-
- test_one<polygon_type, buf::join_miter, polygon_type>("arrow4", arrow, 'm', 28.2654860719170, 0.4);
- test_one<polygon_type, buf::join_round, polygon_type>("arrow4", arrow, 'r', 27.0385824776218, 0.4);
- test_one<polygon_type, buf::join_miter, polygon_type>("arrow5", arrow, 'm', 31.5003260106997, 0.5);
- test_one<polygon_type, buf::join_round, polygon_type>("arrow5", arrow, 'r', 29.6211879021183, 0.5);
- test_one<polygon_type, buf::join_miter, polygon_type>("arrow6", arrow, 'm', 34.9025533178038, 0.6);
- test_one<polygon_type, buf::join_round, polygon_type>("arrow6", arrow, 'r', 32.2572740033805, 0.6);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex6", donut_simplex, 'm', 53.648, 0.6);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex6", donut_simplex, 'r', 52.820, 0.6);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex8", donut_simplex, 'm', 61.132, 0.8);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex8", donut_simplex, 'r', 59.6713, 0.8);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex10", donut_simplex, 'm', 68.670, 1.0);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex10", donut_simplex, 'r', 66.387, 1.0);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex12", donut_simplex, 'm', 76.605, 1.2);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex12", donut_simplex, 'r', 73.3179, 1.2);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex14", donut_simplex, 'm', 84.974, 1.4);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex14", donut_simplex, 'r', 80.500, 1.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("donut_simplex16", donut_simplex, 'm', 93.777, 1.6);
+ test_one<polygon_type, buf::join_round, polygon_type>("donut_simplex16", donut_simplex, 'r', 87.933, 1.6);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("arrow4", arrow, 'm', 28.265, 0.4);
+ test_one<polygon_type, buf::join_round, polygon_type>("arrow4", arrow, 'r', 27.039, 0.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("arrow5", arrow, 'm', 31.500, 0.5);
+ test_one<polygon_type, buf::join_round, polygon_type>("arrow5", arrow, 'r', 29.621, 0.5);
+ test_one<polygon_type, buf::join_miter, polygon_type>("arrow6", arrow, 'm', 34.903, 0.6);
+ test_one<polygon_type, buf::join_round, polygon_type>("arrow6", arrow, 'r', 32.268, 0.6);
test_one<polygon_type, buf::join_miter, polygon_type>("tipped_aitch3", tipped_aitch, 'm', 55.36, 0.3);
test_one<polygon_type, buf::join_miter, polygon_type>("tipped_aitch9", tipped_aitch, 'm', 77.44, 0.9);
test_one<polygon_type, buf::join_miter, polygon_type>("tipped_aitch13", tipped_aitch, 'm', 92.16, 1.3);
+ // SQL Server: 55.205415532967 76.6468846383224 90.642916957136
+ test_one<polygon_type, buf::join_round, polygon_type>("tipped_aitch3", tipped_aitch, 'r', 55.2053, 0.3);
+ test_one<polygon_type, buf::join_round, polygon_type>("tipped_aitch9", tipped_aitch, 'r', 76.6457, 0.9);
+ test_one<polygon_type, buf::join_round, polygon_type>("tipped_aitch13", tipped_aitch, 'r', 90.641, 1.3);
+
test_one<polygon_type, buf::join_miter, polygon_type>("snake4", snake, 'm', 64.44, 0.4);
test_one<polygon_type, buf::join_miter, polygon_type>("snake5", snake, 'm', 72, 0.5);
test_one<polygon_type, buf::join_miter, polygon_type>("snake6", snake, 'm', 75.44, 0.6);
test_one<polygon_type, buf::join_miter, polygon_type>("snake16", snake, 'm', 114.24, 1.6);
- //return;
-
-
- test_one<polygon_type, buf::join_round, polygon_type>("flower1", flower, 'r', 67.48584413272776, 0.1);
- test_one<polygon_type, buf::join_miter, polygon_type>("flower25", flower, 'm', 78.225583936485492, 0.25);
+ test_one<polygon_type, buf::join_miter, polygon_type>("funnelgate2", funnelgate, 'm', 120.982, 2);
+ test_one<polygon_type, buf::join_miter, polygon_type>("funnelgate3", funnelgate, 'm', 13*13, 3);
+ test_one<polygon_type, buf::join_miter, polygon_type>("funnelgate4", funnelgate, 'm', 15*15, 4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("gammagate1", gammagate, 'm', 88, 1);
+ test_one<polygon_type, buf::join_miter, polygon_type>("fork_a1", fork_a, 'm', 88, 1);
+ test_one<polygon_type, buf::join_miter, polygon_type>("fork_b1", fork_b, 'm', 154, 1);
+ test_one<polygon_type, buf::join_miter, polygon_type>("fork_c1", fork_c, 'm', 152, 1);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("gammagate2", gammagate, 'm', 130, 2);
+
+ test_one<polygon_type, buf::join_miter, polygon_type>("flower1", flower, 'm', 67.614, 0.1);
+ test_one<polygon_type, buf::join_miter, polygon_type>("flower20", flower, 'm', 74.894, 0.20);
+ test_one<polygon_type, buf::join_miter, polygon_type>("flower25", flower, 'm', 78.226, 0.25);
test_one<polygon_type, buf::join_miter, polygon_type>("flower30", flower, 'm', 81.492494146177947, 0.30);
- //test_one<polygon_type, buf::join_miter, polygon_type>("flower35", flower, 'm', 84.694183819917185, 0.35);
- test_one<polygon_type, buf::join_miter, polygon_type>("flower4", flower, 'm', 87.8306529577, 0.4);
+ test_one<polygon_type, buf::join_miter, polygon_type>("flower35", flower, 'm', 84.694183819917185, 0.35);
+ test_one<polygon_type, buf::join_miter, polygon_type>("flower40", flower, 'm', 87.8306529577, 0.40);
test_one<polygon_type, buf::join_miter, polygon_type>("flower45", flower, 'm', 90.901901559536029, 0.45);
test_one<polygon_type, buf::join_miter, polygon_type>("flower50", flower, 'm', 93.907929625415662, 0.50);
test_one<polygon_type, buf::join_miter, polygon_type>("flower55", flower, 'm', 96.848737155342079, 0.55);
test_one<polygon_type, buf::join_miter, polygon_type>("flower60", flower, 'm', 99.724324149315279, 0.60);
- test_one<polygon_type, buf::join_miter, polygon_type>("flower1", flower, 'm', 67.613949189084963, 0.1);
- test_one<polygon_type, buf::join_round, polygon_type>("flower25", flower, 'r', 78.0709684961456, 0.25);
- test_one<polygon_type, buf::join_round, polygon_type>("flower30", flower, 'r', 81.3528270913593, 0.30);
- test_one<polygon_type, buf::join_round, polygon_type>("flower35", flower, 'r', 84.5467340913191, 0.35);
- test_one<polygon_type, buf::join_round, polygon_type>("flower4", flower, 'r', 87.6653813523005, 0.4);
- test_one<polygon_type, buf::join_round, polygon_type>("flower45", flower, 'r', 90.7092077149493, 0.45);
- test_one<polygon_type, buf::join_round, polygon_type>("flower50", flower, 'r', 93.6802057531291, 0.50);
- test_one<polygon_type, buf::join_round, polygon_type>("flower55", flower, 'r', 96.5796252237181, 0.55);
- test_one<polygon_type, buf::join_round, polygon_type>("flower60", flower, 'r', 99.4081550761828, 0.60);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower10", flower, 'r', 67.486, 0.10);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower20", flower, 'r', 74.702, 0.20);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower25", flower, 'r', 78.071, 0.25);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower30", flower, 'r', 81.352, 0.30);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower35", flower, 'r', 84.547, 0.35);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower40", flower, 'r', 87.665, 0.40);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower45", flower, 'r', 90.709, 0.45);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower50", flower, 'r', 93.680, 0.50);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower55", flower, 'r', 96.580, 0.55);
+ test_one<polygon_type, buf::join_round, polygon_type>("flower60", flower, 'r', 99.408, 0.60);
- //test_one<polygon_type, buf::join_miter, polygon_type>("flower35", flower, 'm', 84.694183819917185, 0.35);
-
- for (int i = 1; i < 12; i++)
- {
- std::ostringstream out;
- out << "saw_" << i;
- test_one<polygon_type, buf::join_round, polygon_type>(out.str(), saw, 'r', 99.4081550761828, double(i) / 2.0);
- test_one<polygon_type, buf::join_miter, polygon_type>(out. str(), saw, 'm', 99.4081550761828, double(i) / 2.0);
- }
- for (int i = 1; i < 12; i++)
+ // Saw
{
- std::ostringstream out;
- out << "bowl_" << i;
- test_one<polygon_type, buf::join_round, polygon_type>(out.str(), bowl, 'r', 99.4081550761828, double(i) / 2.0);
- test_one<polygon_type, buf::join_miter, polygon_type>(out. str(), bowl, 'm', 99.4081550761828, double(i) / 2.0);
+ // SQL Server:
+// 68.6258859984014 90.2254986930165 112.799509089077 136.392823913949 161.224547934625 187.427508982734
+//215.063576036522 244.167935815974 274.764905445676 306.878264367143 340.530496138041 375.720107548269
+ int const n = 12;
+ double expected_round[n] =
+ {
+ 68.6252, 90.222, 112.792, 136.397, 161.230, 187.435,
+ 215.073, 244.179, 274.779, 306.894, 340.543, 375.734
+ };
+ double expected_miter[n] =
+ {
+ 70.7706, 98.804, 132.101, 170.661, 214.484, 263.57,
+ 317.92, 377.532, 442.408, 512.546, 587.948, 668.613
+ };
+
+ for (int i = 1; i <= n; i++)
+ {
+ std::ostringstream out;
+ out << "saw_" << i;
+ test_one<polygon_type, buf::join_round, polygon_type>(out.str(), saw, 'r', expected_round[i - 1], double(i) / 2.0);
+ test_one<polygon_type, buf::join_miter, polygon_type>(out.str(), saw, 'm', expected_miter[i - 1], double(i) / 2.0);
+ }
}
- test_one<polygon_type, buf::join_round, polygon_type>("county1", county1, 'r', 99.4081550761828, 0.01);
- test_one<polygon_type, buf::join_miter, polygon_type>("county1", county1, 'm', 99.4081550761828, 0.01);
+ // Bowl
+ {
+ // SQL Server values - see query below.
+//1 43.2425133175081 60.0257800296593 78.3497997564532 98.2145746255142 119.620102487345 142.482792724034
+//2 166.499856911107 191.763334982583 218.446279387336 246.615018368511 276.300134755606 307.518458532186
+
+ int const n = 12;
+ double expected_round[n] =
+ {
+ 43.2423, 60.025, 78.3477, 98.2109, 119.614, 142.487,
+ 166.505, 191.77, 218.455, 246.625, 276.312, 307.532
+ };
+
+
+ double expected_miter[n] =
+ {
+ 43.4895, 61.014, 80.5726, 102.166, 125.794, 151.374,
+ 178.599, 207.443, 237.904, 270.000, 304.0, 340.000
+ };
+ for (int i = 1; i <= n; i++)
+ {
+ std::ostringstream out;
+ out << "bowl_" << i;
+ test_one<polygon_type, buf::join_round, polygon_type>(out.str(), bowl, 'r', expected_round[i - 1], double(i) / 2.0);
+ test_one<polygon_type, buf::join_miter, polygon_type>(out.str(), bowl, 'm', expected_miter[i - 1], double(i) / 2.0);
+ }
+ }
+ test_one<polygon_type, buf::join_round, polygon_type>("county1", county1, 'r', 0.00114092, 0.01);
+ test_one<polygon_type, buf::join_miter, polygon_type>("county1", county1, 'm', 0.00132859, 0.01);
return;
@@ -228,6 +305,38 @@
{
test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
//test_all<bg::model::point<tt, 2, bg::cs::cartesian> >();
-
+
return 0;
}
+
+
+/*
+BOWL QUERY
+===
+with bowl as
+(
+ select geometry::STGeomFromText('POLYGON((1 2,1 7,2 7,3 5,5 4,7 5,8 7,9 7,9 2,1 2))',0) as q
+)
+select
+'1-6' as row
+,q.STBuffer(0.5).STArea() as b1
+,q.STBuffer(1.0).STArea() as b2
+,q.STBuffer(1.5).STArea() as b3
+,q.STBuffer(2.0).STArea() as b4
+,q.STBuffer(2.5).STArea() as b5
+,q.STBuffer(3.0).STArea() as b6
+
+from bowl
+union all
+select
+'7-12'
+,q.STBuffer(3.5).STArea() as b7
+,q.STBuffer(4.0).STArea() as b8
+,q.STBuffer(4.5).STArea() as b9
+,q.STBuffer(5.0).STArea() as b10
+,q.STBuffer(5.5).STArea() as b11
+,q.STBuffer(6.0).STArea() as b12
+from bowl
+
+
+*/
\ No newline at end of file
Modified: branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/test_buffer.hpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/test_buffer.hpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/algorithms/buffer/test_buffer.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -27,23 +27,15 @@
#include <boost/geometry/algorithms/union.hpp>
#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-#include <boost/geometry/extensions/algorithms/detail/overlay/dissolver.hpp>
#include <boost/geometry/geometries/geometries.hpp>
#include <boost/geometry/strategies/strategies.hpp>
#include <boost/geometry/algorithms/disjoint.hpp>
-#include <boost/geometry/extensions/algorithms/dissolve.hpp>
-//#include <boost/geometry/extensions/algorithms/detail/overlay/split_rings.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
-//#include <boost/geometry/extensions/algorithms/buffer.hpp>
-
-//#include <boost/geometry/extensions/algorithms/buffer/remove_within_distance.hpp>
-#include <boost/geometry/extensions/algorithms/buffer/linestring_buffer.hpp>
-#include <boost/geometry/extensions/algorithms/buffer/polygon_buffer.hpp>
-//#include <boost/geometry/extensions/algorithms/buffer/unioning_buffer.hpp>
-//#include <boost/geometry/extensions/algorithms/buffer/segmenting_buffer.hpp>
+#include <boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp>
#include <boost/geometry/extensions/strategies/buffer.hpp>
@@ -81,20 +73,13 @@
template
<
typename GeometryOut,
- template
- <
- typename
- , typename
-#if defined(BOOST_GEOMETRY_DEBUG_WITH_MAPPER)
- , typename
-#endif
- > class JoinStrategy,
+ template<typename, typename> class JoinStrategy,
typename Geometry
>
void test_buffer(std::string const& caseid, Geometry const& geometry,
char join,
- double expected_area,
- double distance_left, double distance_right)
+ bool check, double expected_area,
+ double distance_left, double distance_right, int expected_self_tangencies)
{
namespace bg = boost::geometry;
@@ -104,104 +89,118 @@
typedef typename bg::ring_type<GeometryOut>::type ring_type;
- std::ostringstream filename;
- filename << "buffer_"
- << (bg::geometry_id<Geometry>::value == 2 ? "line" : "poly") << "_"
+ typedef typename bg::tag<Geometry>::type tag;
+ std::string type = boost::is_same<tag, bg::polygon_tag>::value ? "poly"
+ : boost::is_same<tag, bg::linestring_tag>::value ? "line"
+ : boost::is_same<tag, bg::multi_polygon_tag>::value ? "multipoly"
+ : boost::is_same<tag, bg::multi_linestring_tag>::value ? "multiline"
+ : ""
+ ;
+
+ std::ostringstream complete;
+ complete
+ << type << "_"
<< caseid << "_"
<< string_from_type<coordinate_type>::name()
- << "_" << join
- << ".svg";
+ << "_" << join;
+
+ std::cout << complete.str() << std::endl;
+
+ std::ostringstream filename;
+ filename << "buffer_" << complete.str() << ".svg";
std::ofstream svg(filename.str().c_str());
- bg::svg_mapper<point_type> mapper(svg, 500, 500);
+ bg::svg_mapper<point_type> mapper(svg, 1000, 1000);
{
bg::model::box<point_type> box;
bg::envelope(geometry, box);
- double d = distance_left;
- if (distance_right > 0)
+ double d = std::abs(distance_left);
+ if (distance_right > -998)
+ {
+ d += std::abs(distance_right);
+ }
+ else
{
- d += distance_right;
+ distance_right = distance_left;
}
- bg::buffer(box, box, d * 1.1);
+ bg::buffer(box, box, d * (join == 'm' ? 2.0 : 1.1));
mapper.add(box);
}
-
-
typedef JoinStrategy
<
point_type,
typename bg::point_type<GeometryOut>::type
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , bg::svg_mapper<point_type>
-#endif
> join_strategy_type;
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- join_strategy_type join_strategy(mapper);
-#else
join_strategy_type join_strategy;
-#endif
+ typedef bg::strategy::buffer::distance_assymetric<coordinate_type> distance_strategy_type;
+ distance_strategy_type distance_strategy(distance_left, distance_right);
std::vector<GeometryOut> buffered;
-#ifdef BOOST_GEOMETRY_TEST_BUFFER_POLYGON
- {
- GeometryOut buffered_step1;
- bg::detail::buffer::polygon_buffer
- <
- Geometry, GeometryOut, join_strategy_type
- >::apply(geometry, buffered_step1,
- distance_left,
- join_strategy
+ bg::buffer_inserter<GeometryOut>(geometry, std::back_inserter(buffered),
+ distance_strategy,
+ join_strategy
#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , mapper
+ , mapper
#endif
- );
- buffered.push_back(buffered_step1);
- }
-#else
+ );
+
+ double area = 0;
+ BOOST_FOREACH(GeometryOut const& polygon, buffered)
{
- typedef bg::strategy::buffer::distance_assymetric<coordinate_type> distance;
- typedef bg::detail::buffer::intersecting_inserter
- <
- std::vector<GeometryOut>
- > inserter_type;
-
- inserter_type inserter(buffered);
-
- bg::detail::buffer::linestring_buffer
- <
- Geometry, GeometryOut, distance, join_strategy_type
- >::apply(geometry, inserter,
- distance(distance_left, distance_left / 2.0),
- join_strategy
-#ifdef BOOST_GEOMETRY_DEBUG_WITH_MAPPER
- , mapper
-#endif
- );
+ area += bg::area(polygon);
}
-#endif
- //std::cout << caseid << std::endl;
+ //std::cout << caseid << " " << distance_left << std::endl;
//std::cout << "INPUT: " << bg::wkt(geometry) << std::endl;
- //std::cout << "OUTPUT:" << std::endl;
+ //std::cout << "OUTPUT: " << area << std::endl;
//BOOST_FOREACH(GeometryOut const& polygon, buffered)
//{
// std::cout << bg::wkt(polygon) << std::endl;
//}
+ if (expected_area > -0.1)
+ {
+ BOOST_CHECK_MESSAGE
+ (
+ std::abs(area - expected_area) < 0.11,
+ complete.str() << " not as expected. "
+ << " Expected: " << expected_area
+ << " Detected: " << area
+ );
+
+ // Be sure resulting polygon does not contain
+ // self-intersections
+ // But indentation5 should contain 1 self-ip TODO give this check as an argument
+ if (expected_self_tangencies == 0
+ && ! boost::contains(complete.str(), "indentation5_d_r")
+ && ! boost::contains(complete.str(), "flower25_d_r"))
+ {
+ BOOST_FOREACH(GeometryOut const& polygon, buffered)
+ {
+ BOOST_CHECK_MESSAGE
+ (
+ ! bg::intersects(polygon),
+ complete.str() << " is self-intersecting. "
+ );
+ }
+ }
+ }
+
// Map input geometry in green
- mapper.map(geometry, "opacity:0.5;fill:rgb(0,128,0);stroke:rgb(0,128,0);stroke-width:1");
+ mapper.map(geometry, "opacity:0.5;fill:rgb(0,128,0);stroke:rgb(0,128,0);stroke-width:10");
BOOST_FOREACH(GeometryOut const& polygon, buffered)
{
- mapper.map(polygon, "opacity:0.8;fill:none;stroke:rgb(0,0,0);stroke-width:2");
+ mapper.map(polygon, "opacity:0.4;fill:rgb(255,255,128);stroke:rgb(0,0,0);stroke-width:3");
+ //mapper.map(polygon, "opacity:0.2;fill:none;stroke:rgb(255,0,0);stroke-width:3");
post_map(polygon, mapper);
}
}
@@ -214,19 +213,12 @@
template
<
typename Geometry,
- template
- <
- typename
- , typename
-#if defined(BOOST_GEOMETRY_DEBUG_WITH_MAPPER)
- , typename
-#endif
- > class JoinStrategy,
+ template<typename, typename> class JoinStrategy,
typename GeometryOut
>
void test_one(std::string const& caseid, std::string const& wkt,
char join, double expected_area,
- double distance_left, double distance_right = -999)
+ double distance_left, double distance_right = -999, int expected_self_tangencies = 0)
{
namespace bg = boost::geometry;
Geometry g;
@@ -234,13 +226,6 @@
typedef typename bg::point_type<Geometry>::type point_type;
- //std::cout << caseid << std::endl;
- if (join == 'm')
- {
- //return;
- }
-
-
#ifdef BOOST_GEOMETRY_CHECK_WITH_POSTGIS
std::cout
@@ -255,8 +240,10 @@
#endif
test_buffer<GeometryOut, JoinStrategy>
- (caseid, g, join, expected_area, distance_left, distance_right);
+ (caseid, g, join, false, expected_area,
+ distance_left, distance_right, expected_self_tangencies);
}
+
#endif
Modified: branches/quickbook-dev/libs/geometry/test_extensions/algorithms/offset.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/algorithms/offset.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/algorithms/offset.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -10,6 +10,8 @@
#include <iostream>
#include <string>
+#define TEST_WITH_SVG
+
#include <geometry_test_common.hpp>
#include <boost/geometry/geometries/geometries.hpp>
@@ -66,7 +68,6 @@
//BOOST_CHECK_EQUAL(holes, expected_hole_count);
BOOST_CHECK_CLOSE(length, expected_length, percentage);
-
#if defined(TEST_WITH_SVG)
{
std::ostringstream filename;
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/andoyer.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/andoyer.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/andoyer.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../..;../../../../../../boost/geometry/extensions/contrib"
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -114,7 +114,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../..;../..;../../../../../../boost/geometry/extensions/contrib"
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/area_ll.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/area_ll.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/area_ll.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -70,7 +70,7 @@
// For checking calculated area, use the Dutch projection (RD), this is EPSG code 28992
- bg::projection::sterea_ellipsoid<LL, XY> dutch_prj(bg::projection::init(28992));
+ bg::projections::sterea_ellipsoid<LL, XY> dutch_prj(bg::projections::init(28992));
// Add them in clockwise direction
bg::model::polygon<LL> randstad;
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/area_ll.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/area_ll.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/area_ll.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../..;../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -114,7 +114,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../..;../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/cross_track.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/cross_track.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/cross_track.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -114,7 +114,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../..;../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/distance_mixed.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/distance_mixed.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/distance_mixed.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;NOMINMAX"
ExceptionHandling="2"
BasicRuntimeChecks="3"
@@ -115,7 +115,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;NOMINMAX"
UsePrecompiledHeader="0"
WarningLevel="3"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,7 +17,7 @@
#include <geometry_test_common.hpp>
-#include <boost/geometry/algorithms/parse.hpp>
+#include <boost/geometry/extensions/algorithms/parse.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/strategies/strategies.hpp>
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -42,7 +42,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
RuntimeLibrary="1"
ExceptionHandling="2"
@@ -112,7 +112,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse_dms.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse_dms.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/parse_dms.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -114,7 +114,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/point_ll.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/point_ll.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/point_ll.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -114,7 +114,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test/"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/vincenty.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/vincenty.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/latlong/vincenty.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../..;../../../../../../boost/geometry/extensions/contrib"
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -114,7 +114,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../..;../..;../../../../../../boost/geometry/extensions/contrib"
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -42,7 +42,7 @@
typename bg::coordinate_type<P2>::type y,
std::string const& parameters)
{
- bg::projection::parameters par = bg::projection::detail::pj_init_plus(parameters);
+ bg::projections::parameters par = bg::projections::detail::pj_init_plus(parameters);
Prj prj(par);
P1 ll;
@@ -63,7 +63,7 @@
typedef bg::model::ll::point<bg::degree, coord_type> point_type;
// aea
- test_one<bg::projection::aea_ellipsoid<point_type, P>, point_type, P>
+ test_one<bg::projections::aea_ellipsoid<point_type, P>, point_type, P>
(4.897000, 52.371000, 334609.583974, 5218502.503686,
"+proj=aea +ellps=WGS84 +units=m +lat_1=55 +lat_2=65");
}
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\projection"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -42,7 +42,7 @@
Name="VCCLCompilerTool"
AdditionalOptions="/bigobj"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -94,7 +94,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\projection"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -116,7 +116,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/bigobj"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection_epsg.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection_epsg.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection_epsg.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -44,8 +44,8 @@
{
typedef typename bg::coordinate_type<P2>::type coord_type;
- typedef bg::projection::epsg_traits<E, P1, P2> epsg_traits;
- bg::projection::parameters par = bg::projection::detail::pj_init_plus(epsg_traits::par());
+ typedef bg::projections::epsg_traits<E, P1, P2> epsg_traits;
+ bg::projections::parameters par = bg::projections::detail::pj_init_plus(epsg_traits::par());
typedef typename epsg_traits::type prj_type;
prj_type prj(par);
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection_epsg.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection_epsg.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projection_epsg.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\projection_epsg"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -42,7 +42,7 @@
Name="VCCLCompilerTool"
AdditionalOptions="/bigobj"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -94,7 +94,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\projection_epsg"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -116,7 +116,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/bigobj"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projections.cpp
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projections.cpp (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projections.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -70,10 +70,10 @@
ll.lon(lon);
ll.lat(lat);
- bg::projection::parameters params = bg::projection::detail::pj_init_plus(parameters);
- bg::projection::factory<lonlat_type, P, bg::projection::parameters> pf;
+ bg::projections::parameters params = bg::projections::detail::pj_init_plus(parameters);
+ bg::projections::factory<lonlat_type, P, bg::projections::parameters> pf;
- boost::shared_ptr<bg::projection::projection<lonlat_type, P> > prj(pf.create_new(params));
+ boost::shared_ptr<bg::projections::projection<lonlat_type, P> > prj(pf.create_new(params));
P xy;
prj->forward(ll, xy);
@@ -98,10 +98,10 @@
bg::set<0>(xy, x);
bg::set<1>(xy, y);
- bg::projection::parameters params = bg::projection::detail::pj_init_plus(parameters);
- bg::projection::factory<lonlat_type, P, bg::projection::parameters> pf;
+ bg::projections::parameters params = bg::projections::detail::pj_init_plus(parameters);
+ bg::projections::factory<lonlat_type, P, bg::projections::parameters> pf;
- boost::shared_ptr<bg::projection::projection<lonlat_type, P> > prj(pf.create_new(params));
+ boost::shared_ptr<bg::projections::projection<lonlat_type, P> > prj(pf.create_new(params));
lonlat_type ll;
prj->inverse(xy, ll);
@@ -188,6 +188,7 @@
test_forward<P>("murd1", 4.897000, 52.371000, 333340.993642, 5839071.944597, "+proj=murd1 +ellps=WGS84 +units=m +lat_1=20n +lat_2=60n");
test_forward<P>("murd2", 4.897000, 52.371000, 317758.821713, 6759296.097305, "+proj=murd2 +ellps=WGS84 +units=m +lat_1=20n +lat_2=60n");
test_forward<P>("murd3", 4.897000, 52.371000, 331696.409000, 5839224.186916, "+proj=murd3 +ellps=WGS84 +units=m +lat_1=20n +lat_2=60n");
+ test_forward<P>("natearth", 4.897000, 52.371000, 409886.629231, 5862282.218987, "+proj=natearth +ellps=WGS84 +units=m");
test_forward<P>("nell", 4.897000, 52.371000, 454576.246081, 5355027.851999, "+proj=nell +ellps=WGS84 +units=m");
test_forward<P>("nell_h", 4.897000, 52.371000, 438979.742911, 5386970.539995, "+proj=nell_h +ellps=WGS84 +units=m");
test_forward<P>("nicol", 4.897000, 52.371000, 360493.071000, 5836451.532406, "+proj=nicol +ellps=WGS84 +units=m");
@@ -304,6 +305,7 @@
test_inverse<P>("murd1", 333340.993642, 5839071.944597, 4.897000, 52.371000, "+proj=murd1 +ellps=WGS84 +units=m +lat_1=20n +lat_2=60n");
test_inverse<P>("murd2", 317758.821713, 6759296.097305, 4.897000, 52.371000, "+proj=murd2 +ellps=WGS84 +units=m +lat_1=20n +lat_2=60n");
test_inverse<P>("murd3", 331696.409000, 5839224.186916, 4.897000, 52.371000, "+proj=murd3 +ellps=WGS84 +units=m +lat_1=20n +lat_2=60n");
+ test_inverse<P>("natearth", 409886.629231, 5862282.218987, 4.897000, 52.371000, "+proj=natearth +ellps=WGS84 +units=m");
test_inverse<P>("nell", 454576.246081, 5355027.851999, 4.897000, 52.371000, "+proj=nell +ellps=WGS84 +units=m");
test_inverse<P>("nell_h", 438979.742911, 5386970.539995, 4.897000, 52.371000, "+proj=nell_h +ellps=WGS84 +units=m");
test_inverse<P>("nsper", 0.521191, 7.919806, 4.897000, 52.371000, "+proj=nsper +ellps=WGS84 +units=m +a=10 +h=40000000");
Modified: branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projections.vcproj
==============================================================================
--- branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projections.vcproj (original)
+++ branches/quickbook-dev/libs/geometry/test_extensions/gis/projections/projections.vcproj 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,7 +20,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\projections"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
>
<Tool
@@ -42,7 +42,7 @@
Name="VCCLCompilerTool"
AdditionalOptions="/bigobj"
Optimization="0"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
ExceptionHandling="2"
RuntimeLibrary="1"
@@ -94,7 +94,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)\projections"
ConfigurationType="1"
- InheritedPropertySheets="..\..\..\boost.vsprops"
+ InheritedPropertySheets="..\..\boost.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -116,7 +116,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/bigobj"
- AdditionalIncludeDirectories="../../../../../..;../../.."
+ AdditionalIncludeDirectories="../../../../..;../../../test"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
ExceptionHandling="2"
UsePrecompiledHeader="0"
Modified: branches/quickbook-dev/libs/graph/doc/DijkstraVisitor.html
==============================================================================
--- branches/quickbook-dev/libs/graph/doc/DijkstraVisitor.html (original)
+++ branches/quickbook-dev/libs/graph/doc/DijkstraVisitor.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -80,7 +80,7 @@
<TR>
<TD><tt>w</tt></TD>
-<TD>An object of type <tt>DistanceMap</tt>.</TD>
+<TD>An object of type <tt>WeightMap</tt>.</TD>
</TR>
</table>
Modified: branches/quickbook-dev/libs/graph/doc/grid_graph.html
==============================================================================
--- branches/quickbook-dev/libs/graph/doc/grid_graph.html (original)
+++ branches/quickbook-dev/libs/graph/doc/grid_graph.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -69,7 +69,7 @@
<p>
Defined in
<a href="../../../boost/graph/grid_graph.hpp"><tt>boost/graph/grid_graph.hpp</tt></a>
- with all functions in the <tt>boost</tt> namespace. All examples are available in a single program file in libs/graph/example/grid_graph_example.cpp
+ with all functions in the <tt>boost</tt> namespace. A simple examples of creating and iterating over a grid_graph is available here libs/graph/example/grid_graph_example.cpp. An example of adding properties to a grid_graph is also available libs/graph/example/grid_graph_properties.cpp
</p>
<h4>Template Parameters</h4>
Modified: branches/quickbook-dev/libs/graph/doc/planar_face_traversal.html
==============================================================================
--- branches/quickbook-dev/libs/graph/doc/planar_face_traversal.html (original)
+++ branches/quickbook-dev/libs/graph/doc/planar_face_traversal.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -97,7 +97,7 @@
New face: 1 2 5 4
New face: 2 3 4 5
New face: 3 0 1 4
- New face: 2 3 0 1
+ New face: 1 0 3 2
</pre>
<h3>Visitor Event Points</h3>
Modified: branches/quickbook-dev/libs/graph/doc/table_of_contents.html
==============================================================================
--- branches/quickbook-dev/libs/graph/doc/table_of_contents.html (original)
+++ branches/quickbook-dev/libs/graph/doc/table_of_contents.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -101,6 +101,10 @@
<LI>Graph classes
<OL>
<LI>adjacency_list</li>
+ <OL>
+ <LI>directed_graph</li>
+ <LI>undirected_graph</li>
+ </OL>
<LI>adjacency_matrix</li>
<li>compressed_sparse_row_graph</li>
</OL></li>
Modified: branches/quickbook-dev/libs/graph/doc/topology.html
==============================================================================
--- branches/quickbook-dev/libs/graph/doc/topology.html (original)
+++ branches/quickbook-dev/libs/graph/doc/topology.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -124,8 +124,8 @@
struct point
{
point() { }
- double& operator[](std::size_t i) {return values[i];}
- const double& operator[](std::size_t i) const {return values[i];}
+ double& operator[](std::size_t i) {return values[i];}
+ const double& operator[](std::size_t i) const {return values[i];}
private:
double values[Dims];
@@ -157,7 +157,7 @@
{
public:
explicit hypercube_topology(double scaling = 1.0);
- hypercube_topology(RandomNumberGenerator& gen, double scaling = 1.0);
+ hypercube_topology(RandomNumberGenerator& gen, double scaling = 1.0);
point_type random_point() const;
};
</pre>
@@ -173,13 +173,13 @@
{
public:
explicit square_topology(double scaling = 1.0);
- square_topology(RandomNumberGenerator& gen, double scaling = 1.0);
+ square_topology(RandomNumberGenerator& gen, double scaling = 1.0);
};
</pre>
<a name="cube_topology"><h3>Class template <tt>cube_topology</tt></h3></a>
-<p>Class template <tt>cube_topology</tt> is a two-dimensional
+<p>Class template <tt>cube_topology</tt> is a three-dimensional
hypercube topology.
<pre>
@@ -188,7 +188,7 @@
{
public:
explicit cube_topology(double scaling = 1.0);
- cube_topology(RandomNumberGenerator& gen, double scaling = 1.0);
+ cube_topology(RandomNumberGenerator& gen, double scaling = 1.0);
};
</pre>
@@ -209,7 +209,7 @@
{
public:
explicit ball_topology(double radius = 1.0);
- ball_topology(RandomNumberGenerator& gen, double radius = 1.0);
+ ball_topology(RandomNumberGenerator& gen, double radius = 1.0);
point_type random_point() const;
};
</pre>
@@ -225,13 +225,13 @@
{
public:
explicit circle_topology(double radius = 1.0);
- circle_topology(RandomNumberGenerator& gen, double radius = 1.0);
+ circle_topology(RandomNumberGenerator& gen, double radius = 1.0);
};
</pre>
<a name="sphere_topology"><h3>Class template <tt>sphere_topology</tt></h3></a>
-<p>Class template <tt>sphere_topology</tt> is a two-dimensional
+<p>Class template <tt>sphere_topology</tt> is a three-dimensional
ball topology.
<pre>
@@ -240,7 +240,7 @@
{
public:
explicit sphere_topology(double radius = 1.0);
- sphere_topology(RandomNumberGenerator& gen, double radius = 1.0);
+ sphere_topology(RandomNumberGenerator& gen, double radius = 1.0);
};
</pre>
@@ -258,7 +258,7 @@
typedef <em>unspecified</em> point_type;
heart_topology();
- heart_topology(RandomNumberGenerator& gen);
+ heart_topology(RandomNumberGenerator& gen);
point_type random_point() const;
double distance(point_type a, point_type b) const;
point_type move_position_toward(point_type a, double fraction, point_type b) const;
Modified: branches/quickbook-dev/libs/graph/example/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/graph/example/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/graph/example/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,6 +20,7 @@
exe bron_kerbosch_clique_number : bron_kerbosch_clique_number.cpp ;
exe mcgregor_subgraphs_example : mcgregor_subgraphs_example.cpp ;
exe grid_graph_example : grid_graph_example.cpp ;
+exe grid_graph_properties : grid_graph_properties.cpp ;
exe bipartite_example : bipartite_example.cpp ;
exe fr_layout : fr_layout.cpp ;
exe canonical_ordering : canonical_ordering.cpp ;
@@ -33,3 +34,7 @@
exe bfs-example : bfs-example.cpp ;
exe bfs-example2 : bfs-example2.cpp ;
exe dfs-example : dfs-example.cpp ;
+exe adjacency_list_io : adjacency_list_io.cpp ;
+exe undirected_adjacency_list : undirected_adjacency_list.cpp ;
+exe directed_graph : directed_graph.cpp ;
+exe undirected_graph : undirected_graph.cpp ;
Deleted: branches/quickbook-dev/libs/graph/example/undirected.cpp
==============================================================================
--- branches/quickbook-dev/libs/graph/example/undirected.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,109 +0,0 @@
-//=======================================================================
-// Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee,
-//
-// Distributed under 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)
-//=======================================================================
-#include <boost/config.hpp>
-#include <iostream>
-#include <boost/graph/adjacency_list.hpp>
-using namespace boost;
-
-template < typename UndirectedGraph > void
-undirected_graph_demo1()
-{
- const int V = 3;
- UndirectedGraph undigraph(V);
- typename graph_traits < UndirectedGraph >::vertex_descriptor zero, one, two;
- typename graph_traits < UndirectedGraph >::out_edge_iterator out, out_end;
- typename graph_traits < UndirectedGraph >::in_edge_iterator in, in_end;
-
- zero = vertex(0, undigraph);
- one = vertex(1, undigraph);
- two = vertex(2, undigraph);
- add_edge(zero, one, undigraph);
- add_edge(zero, two, undigraph);
- add_edge(one, two, undigraph);
-
- std::cout << "out_edges(0): ";
- for (boost::tie(out, out_end) = out_edges(zero, undigraph); out != out_end; ++out)
- std::cout << *out;
- std::cout << std::endl << "in_edges(0): ";
- for (boost::tie(in, in_end) = in_edges(zero, undigraph); in != in_end; ++in)
- std::cout << *in;
- std::cout << std::endl;
-}
-
-template < typename DirectedGraph > void
-directed_graph_demo()
-{
- const int V = 2;
- DirectedGraph digraph(V);
- typename graph_traits < DirectedGraph >::vertex_descriptor u, v;
- typedef typename DirectedGraph::edge_property_type Weight;
- typename property_map < DirectedGraph, edge_weight_t >::type
- weight = get(edge_weight, digraph);
- typename graph_traits < DirectedGraph >::edge_descriptor e1, e2;
- bool found;
-
- u = vertex(0, digraph);
- v = vertex(1, digraph);
- add_edge(u, v, Weight(1.2), digraph);
- add_edge(v, u, Weight(2.4), digraph);
- boost::tie(e1, found) = edge(u, v, digraph);
- boost::tie(e2, found) = edge(v, u, digraph);
- std::cout << "in a directed graph is ";
-#ifdef __GNUC__
- // no boolalpha
- std::cout << "(u,v) == (v,u) ? " << (e1 == e2) << std::endl;
-#else
- std::cout << "(u,v) == (v,u) ? "
- << std::boolalpha << (e1 == e2) << std::endl;
-#endif
- std::cout << "weight[(u,v)] = " << get(weight, e1) << std::endl;
- std::cout << "weight[(v,u)] = " << get(weight, e2) << std::endl;
-}
-
-template < typename UndirectedGraph > void
-undirected_graph_demo2()
-{
- const int V = 2;
- UndirectedGraph undigraph(V);
- typename graph_traits < UndirectedGraph >::vertex_descriptor u, v;
- typedef typename UndirectedGraph::edge_property_type Weight;
- typename property_map < UndirectedGraph, edge_weight_t >::type
- weight = get(edge_weight, undigraph);
- typename graph_traits < UndirectedGraph >::edge_descriptor e1, e2;
- bool found;
-
- u = vertex(0, undigraph);
- v = vertex(1, undigraph);
- add_edge(u, v, Weight(3.1), undigraph);
- boost::tie(e1, found) = edge(u, v, undigraph);
- boost::tie(e2, found) = edge(v, u, undigraph);
- std::cout << "in an undirected graph is ";
-#ifdef __GNUC__
- std::cout << "(u,v) == (v,u) ? " << (e1 == e2) << std::endl;
-#else
- std::cout << "(u,v) == (v,u) ? "
- << std::boolalpha << (e1 == e2) << std::endl;
-#endif
- std::cout << "weight[(u,v)] = " << get(weight, e1) << std::endl;
- std::cout << "weight[(v,u)] = " << get(weight, e2) << std::endl;
-}
-
-
-int
-main()
-{
- typedef property < edge_weight_t, double >Weight;
- typedef adjacency_list < vecS, vecS, undirectedS,
- no_property, Weight > UndirectedGraph;
- typedef adjacency_list < vecS, vecS, directedS,
- no_property, Weight > DirectedGraph;
- undirected_graph_demo1 < UndirectedGraph > ();
- undirected_graph_demo2 < UndirectedGraph > ();
- directed_graph_demo < DirectedGraph > ();
- return 0;
-}
Deleted: branches/quickbook-dev/libs/graph/example/undirected.expected
==============================================================================
--- branches/quickbook-dev/libs/graph/example/undirected.expected 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,7 +0,0 @@
-in a directed graph is (u,v) == (v,u) ? 0
-weight[(u,v)] = 1.2
-weight[(v,u)] = 2.4
-in an undirected graph is (u,v) == (v,u) ? 1
-weight[(u,v)] = 3.1
-weight[(v,u)] = 3.1
-the edges incident to v: (0,1)
Modified: branches/quickbook-dev/libs/graph/src/read_graphviz_new.cpp
==============================================================================
--- branches/quickbook-dev/libs/graph/src/read_graphviz_new.cpp (original)
+++ branches/quickbook-dev/libs/graph/src/read_graphviz_new.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -787,6 +787,7 @@
for (properties::const_iterator i = root_graph_props.begin(); i != root_graph_props.end(); ++i) {
mg->set_graph_property(i->first, i->second);
}
+ mg->finish_building_graph();
}
} // end namespace read_graphviz_detail
Modified: branches/quickbook-dev/libs/graph/test/graphviz_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/graph/test/graphviz_test.cpp (original)
+++ branches/quickbook-dev/libs/graph/test/graphviz_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,6 +17,7 @@
#include <boost/graph/graphviz.hpp>
#include <boost/assign/std/map.hpp>
#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/compressed_sparse_row_graph.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/property_map/dynamic_property_map.hpp>
@@ -41,33 +42,46 @@
typedef std::map<node_t,float> mass_map_t;
typedef std::map<edge_t,double> weight_map_t;
-template <typename Directedness, typename OutEdgeList>
+template <typename graph_t, typename NameMap, typename MassMap, typename WeightMap>
+bool test_graph(std::istream& dotfile, graph_t& graph,
+ std::size_t correct_num_vertices,
+ mass_map_t const& masses,
+ weight_map_t const& weights,
+ std::string const& node_id,
+ std::string const& g_name,
+ NameMap name,
+ MassMap mass,
+ WeightMap weight);
+
+template <typename graph_t>
bool test_graph(std::istream& dotfile, std::size_t correct_num_vertices,
mass_map_t const& masses,
weight_map_t const& weights,
std::string const& node_id = "node_id",
std::string const& g_name = std::string()) {
+ graph_t g;
+ return test_graph(dotfile, g, correct_num_vertices, masses, weights, node_id, g_name,
+ get(vertex_name, g), get(vertex_color, g), get(edge_weight, g));
+}
+
+template <typename graph_t, typename NameMap, typename MassMap, typename WeightMap>
+bool test_graph(std::istream& dotfile, graph_t& graph,
+ std::size_t correct_num_vertices,
+ mass_map_t const& masses,
+ weight_map_t const& weights,
+ std::string const& node_id,
+ std::string const& g_name,
+ NameMap name,
+ MassMap mass,
+ WeightMap weight) {
- typedef property < vertex_name_t, std::string,
- property < vertex_color_t, float > > vertex_p;
- typedef property < edge_weight_t, double > edge_p;
- typedef property < graph_name_t, std::string > graph_p;
- typedef adjacency_list < OutEdgeList, vecS, Directedness,
- vertex_p, edge_p, graph_p > graph_t;
typedef typename graph_traits < graph_t >::edge_descriptor edge_t;
typedef typename graph_traits < graph_t >::vertex_descriptor vertex_t;
// Construct a graph and set up the dynamic_property_maps.
- graph_t graph(0);
dynamic_properties dp(ignore_other_properties);
- typename property_map<graph_t, vertex_name_t>::type name =
- get(vertex_name, graph);
dp.property(node_id,name);
- typename property_map<graph_t, vertex_color_t>::type mass =
- get(vertex_color, graph);
dp.property("mass",mass);
- typename property_map<graph_t, edge_weight_t>::type weight =
- get(edge_weight, graph);
dp.property("weight",weight);
boost::ref_property_map<graph_t*,std::string> gname(
@@ -139,19 +153,31 @@
typedef istringstream gs_t;
+ typedef property < vertex_name_t, std::string,
+ property < vertex_color_t, float > > vertex_p;
+ typedef property < edge_weight_t, double > edge_p;
+ typedef property < graph_name_t, std::string > graph_p;
+
+ struct vertex_p_bundled {std::string name; float color;};
+ struct edge_p_bundled {double weight;};
+
// Basic directed graph tests
BOOST_AUTO_TEST_CASE (basic_directed_graph_1) {
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("digraph { a node [mass = 7.7] c e [mass = 6.66] }");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,3,masses,weight_map_t())));
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,3,masses,weight_map_t())));
}
BOOST_AUTO_TEST_CASE (basic_directed_graph_2) {
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("e", 6.66f);
gs_t gs("digraph { a node [mass = 7.7] \"a\" e [mass = 6.66] }");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,2,masses,weight_map_t())));
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,2,masses,weight_map_t())));
}
BOOST_AUTO_TEST_CASE (basic_directed_graph_3) {
@@ -162,7 +188,9 @@
gs_t gs("digraph { a -> b eDge [weight = 7.7] "
"c -> d e-> f [weight = 6.66] "
"d ->e->a [weight=.5]}");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,6,mass_map_t(),weights)));
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,6,mass_map_t(),weights)));
}
// undirected graph with alternate node_id property name
@@ -170,8 +198,10 @@
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("graph { a node [mass = 7.7] c e [mass = 6.66] }");
- BOOST_CHECK((test_graph<undirectedS,vecS>(gs,3,masses,weight_map_t(),
- "nodenames")));
+ typedef adjacency_list < vecS, vecS, undirectedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,3,masses,weight_map_t(),
+ "nodenames")));
}
// Basic undirected graph tests
@@ -179,7 +209,9 @@
mass_map_t masses;
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("graph { a node [mass = 7.7] c e [mass =\\\n6.66] }");
- BOOST_CHECK((test_graph<undirectedS,vecS>(gs,3,masses,weight_map_t())));
+ typedef adjacency_list < vecS, vecS, undirectedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,3,masses,weight_map_t())));
}
BOOST_AUTO_TEST_CASE (basic_undirected_graph_2) {
@@ -188,7 +220,9 @@
(make_pair("c","d"),7.7)(make_pair("e","f"),6.66);
gs_t gs("graph { a -- b eDge [weight = 7.7] "
"c -- d e -- f [weight = 6.66] }");
- BOOST_CHECK((test_graph<undirectedS,vecS>(gs,6,mass_map_t(),weights)));
+ typedef adjacency_list < vecS, vecS, undirectedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,6,mass_map_t(),weights)));
}
// Mismatch directed graph test
@@ -197,7 +231,9 @@
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("graph { a nodE [mass = 7.7] c e [mass = 6.66] }");
try {
- test_graph<directedS,vecS>(gs,3,masses,weight_map_t());
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ test_graph<graph_t>(gs,3,masses,weight_map_t());
BOOST_ERROR("Failed to throw boost::undirected_graph_error.");
} catch (boost::undirected_graph_error&) {
} catch (boost::directed_graph_error&) {
@@ -211,7 +247,9 @@
insert ( masses ) ("a",0.0f) ("c",7.7f) ("e", 6.66f);
gs_t gs("digraph { a node [mass = 7.7] c e [mass = 6.66] }");
try {
- test_graph<undirectedS,vecS>(gs,3,masses,weight_map_t());
+ typedef adjacency_list < vecS, vecS, undirectedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ test_graph<graph_t>(gs,3,masses,weight_map_t());
BOOST_ERROR("Failed to throw boost::directed_graph_error.");
} catch (boost::directed_graph_error&) {}
}
@@ -223,7 +261,9 @@
insert( weights )(make_pair("a","b"),7.7);
gs_t gs("diGraph { a -> b [weight = 7.7] a -> b [weight = 7.7] }");
try {
- test_graph<directedS,setS>(gs,2,mass_map_t(),weights);
+ typedef adjacency_list < setS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ test_graph<graph_t>(gs,2,mass_map_t(),weights);
BOOST_ERROR("Failed to throw boost::bad_parallel_edge.");
} catch (boost::bad_parallel_edge&) {}
}
@@ -233,7 +273,9 @@
weight_map_t weights;
insert( weights )(make_pair("a","b"),7.7);
gs_t gs("digraph { a -> b [weight = 7.7] a -> b [weight = 7.7] }");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,2,mass_map_t(),weights)));
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,2,mass_map_t(),weights)));
}
// Graph Property Test 1
@@ -242,8 +284,10 @@
insert ( masses ) ("a",0.0f) ("c",0.0f) ("e", 6.66f);
gs_t gs("digraph { graph [name=\"foo \\\"escaped\\\"\"] a c e [mass = 6.66] }");
std::string graph_name("foo \"escaped\"");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,3,masses,weight_map_t(),"",
- graph_name)));
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,3,masses,weight_map_t(),"",
+ graph_name)));
}
// Graph Property Test 2
@@ -252,8 +296,10 @@
insert ( masses ) ("a",0.0f) ("c",0.0f) ("e", 6.66f);
gs_t gs("digraph { name=\"fo\"+ \"\\\no\" a c e [mass = 6.66] }");
std::string graph_name("foo");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,3,masses,weight_map_t(),"",
- graph_name)));
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,3,masses,weight_map_t(),"",
+ graph_name)));
}
// Graph Property Test 3 (HTML)
@@ -262,8 +308,10 @@
insert ( masses ) ("a",0.0f) ("c",0.0f) ("e", 6.66f);
std::string graph_name = "<html title=\"x'\" title2='y\"'>foo<b><![CDATA[><bad tag&>]]>bar</b>\n<br/>\nbaz</html>";
gs_t gs("digraph { name=" + graph_name + " a c e [mass = 6.66] }");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,3,masses,weight_map_t(),"",
- graph_name)));
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,3,masses,weight_map_t(),"",
+ graph_name)));
}
// Comments embedded in strings
@@ -274,7 +322,40 @@
"a1 [ label = \"//depot/path/to/file_29#9\" ];"
"a0 -> a1 [ color=gray ];"
"}");
- BOOST_CHECK((test_graph<directedS,vecS>(gs,2,mass_map_t(),weight_map_t())));
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,2,mass_map_t(),weight_map_t())));
}
+
+#if 0 // Currently broken
+ BOOST_AUTO_TEST_CASE (basic_csr_directed_graph) {
+ weight_map_t weights;
+ insert( weights )(make_pair("a","b"),0.0)
+ (make_pair("c","d"),7.7)(make_pair("e","f"),6.66)
+ (make_pair("d","e"),0.5)(make_pair("e","a"),0.5);
+ gs_t gs("digraph { a -> b eDge [weight = 7.7] "
+ "c -> d e-> f [weight = 6.66] "
+ "d ->e->a [weight=.5]}");
+ typedef compressed_sparse_row_graph<directedS, vertex_p_bundled, edge_p_bundled, graph_p > graph_t;
+ BOOST_CHECK((test_graph<graph_t>(gs,6,mass_map_t(),weights,"node_id","",&vertex_p_bundled::name,&vertex_p_bundled::color,&edge_p_bundled::weight)));
+ }
+#endif
+
+ BOOST_AUTO_TEST_CASE (basic_csr_directed_graph_ext_props) {
+ weight_map_t weights;
+ insert( weights )(make_pair("a","b"),0.0)
+ (make_pair("c","d"),7.7)(make_pair("e","f"),6.66)
+ (make_pair("d","e"),0.5)(make_pair("e","a"),0.5);
+ gs_t gs("digraph { a -> b eDge [weight = 7.7] "
+ "c -> d e-> f [weight = 6.66] "
+ "d ->e->a [weight=.5]}");
+ typedef compressed_sparse_row_graph<directedS, no_property, no_property, graph_p > graph_t;
+ graph_t g;
+ vector_property_map<std::string, property_map<graph_t, vertex_index_t>::const_type> vertex_name(get(vertex_index, g));
+ vector_property_map<float, property_map<graph_t, vertex_index_t>::const_type> vertex_color(get(vertex_index, g));
+ vector_property_map<double, property_map<graph_t, edge_index_t>::const_type> edge_weight(get(edge_index, g));
+ BOOST_CHECK((test_graph(gs,g,6,mass_map_t(),weights,"node_id","",vertex_name,vertex_color,edge_weight)));
+ }
+
// return 0;
// }
Deleted: branches/quickbook-dev/libs/graph_parallel/doc/small_world_1_70_6_0p02.png
==============================================================================
Binary file. No diff available.
Modified: branches/quickbook-dev/libs/heap/examples/interface.cpp
==============================================================================
--- branches/quickbook-dev/libs/heap/examples/interface.cpp (original)
+++ branches/quickbook-dev/libs/heap/examples/interface.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -193,10 +193,10 @@
pq.update(t3);
*t5 = 7;
- pq.increase(t5, 7);
+ pq.increase(t5);
*t1 = 0;
- pq.decrease(t1, 0);
+ pq.decrease(t1);
cout << "Priority Queue: update with fixup" << endl;
while (!pq.empty()) {
Modified: branches/quickbook-dev/libs/interprocess/doc/interprocess.qbk
==============================================================================
--- branches/quickbook-dev/libs/interprocess/doc/interprocess.qbk (original)
+++ branches/quickbook-dev/libs/interprocess/doc/interprocess.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1403,6 +1403,9 @@
[*Throws:] An exception derived from *interprocess_exception* on error.
+[important `boost::posix_time::ptime` absolute time points used by Boost.Interprocess synchronization mechanisms
+are UTC time points, not local time points]
+
[endsect]
[section:mutexes_interprocess_mutexes Boost.Interprocess Mutex Types And Headers]
@@ -1500,6 +1503,9 @@
For more information, check the
[classref boost::interprocess::scoped_lock scoped_lock's reference].
+[important `boost::posix_time::ptime` absolute time points used by Boost.Interprocess synchronization mechanisms
+are UTC time points, not local time points]
+
[endsect]
[section:mutexes_anonymous_example Anonymous mutex example]
@@ -1829,7 +1835,7 @@
[*Effects:]
The calling thread tries to acquire exclusive ownership of the mutex
-waiting if necessary until no other thread has has exclusive,
+waiting if necessary until no other thread has exclusive,
sharable or upgradable ownership of the mutex or abs_time is reached.
[*Returns:] If acquires exclusive ownership, returns true. Otherwise
@@ -1853,7 +1859,7 @@
[*Effects:]
The calling thread tries to obtain sharable ownership of the mutex, and if
-another thread has exclusive or upgradable ownership of the mutex,
+another thread has exclusive ownership of the mutex,
waits until it can obtain the ownership.
[*Throws:] *interprocess_exception* on error.
@@ -1862,7 +1868,7 @@
[*Effects:]
The calling thread tries to acquire sharable ownership of the mutex without
-waiting. If no other thread has has exclusive or upgradable ownership of
+waiting. If no other thread has exclusive ownership of
the mutex this succeeds.
[*Returns:] If it can acquire sharable ownership immediately returns true.
@@ -1874,8 +1880,8 @@
[*Effects:]
The calling thread tries to acquire sharable ownership of the mutex
-waiting if necessary until no other thread has has exclusive
-or upgradable ownership of the mutex or abs_time is reached.
+waiting if necessary until no other thread has exclusive
+ownership of the mutex or abs_time is reached.
[*Returns:] If acquires sharable ownership, returns true. Otherwise
returns false.
@@ -1907,7 +1913,7 @@
[*Effects:]
The calling thread tries to acquire upgradable ownership of the mutex without
-waiting. If no other thread has has exclusive or upgradable ownership of
+waiting. If no other thread has exclusive or upgradable ownership of
the mutex this succeeds.
[*Returns:] If it can acquire upgradable ownership immediately returns true.
@@ -1919,8 +1925,8 @@
[*Effects:]
The calling thread tries to acquire upgradable ownership of the mutex
-waiting if necessary until no other thread has has exclusive
-or upgradable ownership of the mutex or abs_time is reached.
+waiting if necessary until no other thread has exclusive
+ownership of the mutex or abs_time is reached.
[*Returns:] If acquires upgradable ownership, returns true. Otherwise
returns false.
@@ -2023,6 +2029,9 @@
[*Throws:] An exception derived from *interprocess_exception* on error.
+[important `boost::posix_time::ptime` absolute time points used by Boost.Interprocess synchronization mechanisms
+are UTC time points, not local time points]
+
[endsect]
[endsect]
@@ -2185,6 +2194,9 @@
[classref boost::interprocess::sharable_lock sharable_lock] offer
more features and operations, see their reference for more informations
+[important `boost::posix_time::ptime` absolute time points used by Boost.Interprocess synchronization mechanisms
+are UTC time points, not local time points]
+
[endsect]
[/section:upgradable_mutexes_example Anonymous Upgradable Mutex Example]
@@ -2339,6 +2351,9 @@
scoped_lock<Mutex> e_lock(move(s_lock, try_to_lock));
}
+[important `boost::posix_time::ptime` absolute time points used by Boost.Interprocess synchronization mechanisms
+are UTC time points, not local time points]
+
[endsect]
[section:lock_transfer_summary_upgradable Transfers To Upgradable Lock]
@@ -2602,7 +2617,7 @@
[*Effects:]
The calling thread tries to acquire exclusive ownership of the file lock
-waiting if necessary until no other thread has has exclusive or
+waiting if necessary until no other thread has exclusive or
sharable ownership of the file lock or abs_time is reached.
[*Returns:] If acquires exclusive ownership, returns true. Otherwise
@@ -2631,7 +2646,7 @@
[*Effects:]
The calling thread tries to acquire sharable ownership of the file
-lock without waiting. If no other thread has has exclusive ownership of
+lock without waiting. If no other thread has exclusive ownership of
the file lock, this succeeds.
[*Returns:] If it can acquire sharable ownership immediately returns true.
@@ -2643,7 +2658,7 @@
[*Effects:]
The calling thread tries to acquire sharable ownership of the file lock
-waiting if necessary until no other thread has has exclusive
+waiting if necessary until no other thread has exclusive
ownership of the file lock or abs_time is reached.
[*Returns:] If acquires sharable ownership, returns true. Otherwise
@@ -2662,6 +2677,9 @@
For more file locking methods, please
[classref boost::interprocess::file_lock file_lock reference].
+[important `boost::posix_time::ptime` absolute time points used by Boost.Interprocess synchronization mechanisms
+are UTC time points, not local time points]
+
[endsect]
[section:file_lock_scoped_locks Scoped Lock and Sharable Lock With File Locking]
@@ -6600,8 +6618,10 @@
[section:release_notes_boost_1_49_00 Boost 1.49 Release]
* Fixed bugs
+ [@https://svn.boost.org/trac/boost/ticket/6531 #6531],
[@https://svn.boost.org/trac/boost/ticket/6412 #6412],
[@https://svn.boost.org/trac/boost/ticket/6398 #6398],
+ [@https://svn.boost.org/trac/boost/ticket/6340 #6340],
[@https://svn.boost.org/trac/boost/ticket/6319 #6319],
[@https://svn.boost.org/trac/boost/ticket/6287 #6287],
[@https://svn.boost.org/trac/boost/ticket/6265 #6265],
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/blank.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/caution.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/draft.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/home.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/important.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/next.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/note.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/prev.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/tip.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/toc-blank.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/toc-minus.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/toc-plus.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/intrusive/doc/html/images/warning.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/iostreams/doc/classes/device.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/classes/device.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/classes/device.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -26,7 +26,7 @@
<H2>Description</H2>
<P>
- The class template <CODE>device</CODE>, its subcass <CODE>wdevice</CODE> and their specializations <CODE>source</CODE>, <CODE>sink</CODE>, <CODE>wsource</CODE> and <CODE>wsink</CODE> are provided by the Iostreams library to ease the definitions of new models of the various Device Concepts. These templates and <CODE>typedef</CODE>s are inteded to be used as base classes for user-defined Devices. They supply the member types <CODE>char_type</CODE> and <CODE>category</CODE> used by the Iostreams library.
+ The class template <CODE>device</CODE>, its subclass <CODE>wdevice</CODE> and their specializations <CODE>source</CODE>, <CODE>sink</CODE>, <CODE>wsource</CODE> and <CODE>wsink</CODE> are provided by the Iostreams library to ease the definitions of new models of the various Device Concepts. These templates and <CODE>typedef</CODE>s are intended to be used as base classes for user-defined Devices. They supply the member types <CODE>char_type</CODE> and <CODE>category</CODE> used by the Iostreams library.
</P>
<P>
The supplied <CODE>category</CODE> member is convertible to closable_tag
and to localizable_tag
. This allows users to define models of the concepts Closable and Localizable simply by providing definitions of member functions <CODE>close</CODE> and <CODE>imbue</CODE>.
Modified: branches/quickbook-dev/libs/iostreams/doc/classes/filter.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/classes/filter.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/classes/filter.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -63,7 +63,7 @@
<SPAN CLASS="keyword">typedef</SPAN> wfilter<dual_use> dual_use_wfilter;
<SPAN CLASS="keyword"><SPAN CLASS="keyword">template</SPAN></SPAN><<SPAN CLASS="keyword">typename</SPAN> Mode, <SPAN CLASS="keyword">typename</SPAN> Ch = <SPAN CLASS="keyword">char</SPAN>>
-<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#multichar_filter">multichar_filter</A> : filter<Mode, Ch> {
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#multichar_filter">multichar_filter</A> : filter<Mode, Ch> {
<SPAN CLASS="keyword">typedef</SPAN> <A STYLE="text-decoration:none" HREF="#category"><SPAN CLASS="omitted">see below</SPAN></A> category;
};
@@ -83,12 +83,12 @@
<SPAN CLASS="keyword">typedef</SPAN> <A STYLE="text-decoration:none" HREF="#category"><SPAN CLASS="omitted">see below</SPAN></A> category;
<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
- <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&);
+ <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&);
<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
- <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(std::ios_base::openmode, Device&);
+ <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&, std::ios_base::openmode);
- <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale&);
+ <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale&);
};
} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
@@ -104,7 +104,6 @@
<H4>Template parameters</H4>
<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
-<TR>
<TR>
<TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
<TD>A mode tag.</TD>
@@ -128,10 +127,10 @@
<H4><CODE>filter::close</CODE></H4>
<PRE CLASS="broken_ie"> <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
- <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&);
+ <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&);
<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
- <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(std::ios_base::openmode, Device&);</PRE>
+ <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&, std::ios_base::openmode);</PRE>
<P>
Both overloads are implemented as no-ops. The second is available only if Mode is convertible to bidirectional
. The first is available only if Mode is <I>not</I> convertible to bidirectional
.
@@ -142,7 +141,7 @@
<A NAME="imbue"></A>
<H4><CODE>filter::imbue</CODE></H4>
-<PRE CLASS="broken_ie"> <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale&);</PRE>
+<PRE CLASS="broken_ie"> <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale&);</PRE>
<P>
Implemented as a no-op. Required by Localizable.
@@ -159,7 +158,6 @@
<H4>Template parameters</H4>
<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
-<TR>
<TR>
<TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
<TD>A mode tag.</TD>
Modified: branches/quickbook-dev/libs/iostreams/doc/classes/grep_filter.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/classes/grep_filter.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/classes/grep_filter.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -30,7 +30,7 @@
The class template <CODE>basic_grep_filter</CODE> filters a character sequence line by line using a regular expression provided at construction, in a manner similar to the command-line utility <i>grep</i> (<A CLASS="bib_ref" HREF="../bibliography.html#grep">[IEEE]</A>). The filter uses regular expressions from the Boost Regular Expression Library (<A CLASS="bib_ref" HREF="../bibliography.html#maddock">[Maddock]</A>).
</P>
<P>
- By default, the filtered character sequence consists of those lines of the unfilitered sequence that contain a subsequence matching the regular expression. By specifying appropriate options at construction, <CODE>basic_grep_filter</CODE> can be made to pass through only those lines which exactly match the regular expression (as if the option <i>-x</i> had been passed to the command-line utility) or only those lines that <i>do not</i> contain a match (as if the option <i>-v</i> had been passed to the command-line utility).
+ By default, the filtered character sequence consists of those lines of the unfiltered sequence that contain a subsequence matching the regular expression. By specifying appropriate options at construction, <CODE>basic_grep_filter</CODE> can be made to pass through only those lines which exactly match the regular expression (as if the option <i>-x</i> had been passed to the command-line utility) or only those lines that <i>do not</i> contain a match (as if the option <i>-v</i> had been passed to the command-line utility).
</P>
<P>
A running count of the lines in the filtered character sequence is available via the member function <code>count</code>.
Modified: branches/quickbook-dev/libs/iostreams/doc/concepts/multi_character.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/concepts/multi_character.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/concepts/multi_character.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
- <TITLE>Mutli-Character Filter</TITLE>
+ <TITLE>Multi-Character Filter</TITLE>
<LINK REL="stylesheet" HREF="../../../../boost.css">
<LINK REL="stylesheet" HREF="../theme/iostreams.css">
</HEAD>
@@ -9,14 +9,14 @@
<!-- Begin Banner -->
- <H1 CLASS="title">Mutli-Character Filter</H1>
+ <H1 CLASS="title">Multi-Character Filter</H1>
<HR CLASS="banner">
<!-- End Banner -->
<H2>Description</H2>
-<P>Filter which provides access to its controlled sequence or sequences several characters at a time. The difference between a Filter which is Mutli-Character and one which is not is reflected in the specifications of the various Filter refinements. <I>See</I>, <I>e.g.</I>, InputFilter and OutputFilter.</P>
+<P>Filter which provides access to its controlled sequence or sequences several characters at a time. The difference between a Filter which is Multi-Character and one which is not is reflected in the specifications of the various Filter refinements. <I>See</I>, <I>e.g.</I>, InputFilter and OutputFilter.</P>
<H2>Refinement of</H2>
Modified: branches/quickbook-dev/libs/iostreams/doc/guide/modes.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/guide/modes.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/guide/modes.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -29,7 +29,7 @@
<DL class="page-index">
<DT>Overview</DT>
<DT>Definitions of the Modes</DT>
- <DT>Mode Hierchy Diagrams</DT>
+ <DT>Mode Hierarchy Diagrams</DT>
<DT>Mode Tags</DT>
<DT>The metafunction mode_of
</DT>
</DL>
@@ -48,7 +48,7 @@
</P>
<P>
- The Iostreams library supports eight modes, described in the next section (<I>see also</I> <A CLASS="caption_ref" HREF="#mode_hierchy_diagrams">Figure 2</A>). Of these, four are most import (<I>see </I> <A CLASS="caption_ref" HREF="#mode_hierchy_diagrams">Figure 1</A>). The two modes input and output are by far the most common. Readers new to the Iostreams library should feel free to concentrate primarily on these two modes.
+ The Iostreams library supports eight modes, described in the next section (<I>see also</I> <A CLASS="caption_ref" HREF="#mode_hierarchy_diagrams">Figure 2</A>). Of these, four are most import (<I>see </I> <A CLASS="caption_ref" HREF="#mode_hierarchy_diagrams">Figure 1</A>). The two modes input and output are by far the most common. Readers new to the Iostreams library should feel free to concentrate primarily on these two modes.
</P>
<A NAME="definitions"></A>
@@ -168,8 +168,8 @@
For more on the selection of modes, see the Rationale.
</P>
-<A NAME="mode_hierchy_diagrams"></A>
-<H2>Mode Hierchy Diagrams</H2>
+<A ID="mode_hierchy_diagrams"></A>
+<H2 ID="mode_hierarchy_diagrams">Mode Hierarchy Diagrams</H2>
<P>The following diagrams display the refinement hierarchies among modes.</P>
Modified: branches/quickbook-dev/libs/iostreams/doc/tutorial/container_source.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/tutorial/container_source.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/tutorial/container_source.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -53,7 +53,7 @@
<P>Here the member type char_type
indicates the type of characters handled by my_source, which will almost always be <CODE>char</CODE> or <CODE>wchar_t</CODE>. The member type category indicates which of the fundamental i/o operations are supported by the device. The category tag source_tag
indicates that only read
is supported.</P>
-<P>The member function <CODE>read</CODE> reads up to <CODE>n</CODE> character into the buffer <CODE>s</CODE> and returns the number of character read, unless that number is <CODE>0</CODE> and end-of-stream has been reached, in which case the special value <CODE>-1</CODE> is returned. In general, a Source's member function <CODE>read</CODE> may return fewer characters than requested even though end-of-stream has not been reached; such Sources are called <I>non-blocking</I>. Non-blocking Devices do not interact well with standard streams and stream buffers, however, so most devices should be Blocking. <I>See</I> Asynchronous and Non-Blocking I/O.</P>
+<P>The member function <CODE>read</CODE> reads up to <CODE>n</CODE> characters into the buffer <CODE>s</CODE> and returns the number of characters read, unless that number is <CODE>0</CODE> and end-of-stream has been reached, in which case the special value <CODE>-1</CODE> is returned. In general, a Source's member function <CODE>read</CODE> may return fewer characters than requested even though end-of-stream has not been reached; such Sources are called <I>non-blocking</I>. Non-blocking Devices do not interact well with standard streams and stream buffers, however, so most devices should be Blocking. <I>See</I> Asynchronous and Non-Blocking I/O.</P>
<P>You could also write the above example as follows:</P>
Modified: branches/quickbook-dev/libs/iostreams/doc/tutorial/dictionary_filters.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/tutorial/dictionary_filters.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/tutorial/dictionary_filters.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -27,11 +27,11 @@
<H2>2.2.6. Dictionary Filters</H2>
<P>
- A <SPAN CLASS='term'>dictionary filter</SPAN> is a Filter which peforms text substitution in the following manner. It maintains a collection of pairs of strings whose first components are words and whose second components represent replacement text — I'll call such a collection a <SPAN CLASS='term'>dictionary</SPAN>, and refer to the pairs it contains as <SPAN CLASS='term'>definitions</SPAN>. When a dictionary filter encounters a word which appears as the first component of a definition, it forwards the replacement text instead of the original word. Other words, whitespace and punctuation are forwarded unchanged.
+ A <SPAN CLASS='term'>dictionary filter</SPAN> is a Filter which performs text substitution in the following manner. It maintains a collection of pairs of strings whose first components are words and whose second components represent replacement text — I'll call such a collection a <SPAN CLASS='term'>dictionary</SPAN>, and refer to the pairs it contains as <SPAN CLASS='term'>definitions</SPAN>. When a dictionary filter encounters a word which appears as the first component of a definition, it forwards the replacement text instead of the original word. Other words, whitespace and punctuation are forwarded unchanged.
</P>
<P>
- The basic algorithm is as follows.: You examine characters one at a time, appending them to a string which I'll call the <SPAN CLASS='term'>current word</SPAN>. When you encounter a non-alphabetic character, you consult the dictionary to determine whether the current word appears as the first component of a definition. If it does, you forward the replacement text followed by the non-alphabetic character. Otherwise, you forward the current word followed by the non-alphabetic character. When the end-of-stream is reached, you consult the dictionary again and forward either the curent word or its replacement, as appropriate.
+ The basic algorithm is as follows: You examine characters one at a time, appending them to a string which I'll call the <SPAN CLASS='term'>current word</SPAN>. When you encounter a non-alphabetic character, you consult the dictionary to determine whether the current word appears as the first component of a definition. If it does, you forward the replacement text followed by the non-alphabetic character. Otherwise, you forward the current word followed by the non-alphabetic character. When the end-of-stream is reached, you consult the dictionary again and forward either the curent word or its replacement, as appropriate.
</P>
<P>
@@ -59,7 +59,7 @@
} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
<P>
- The member function <CODE>add</CODE> converts <CODE>key</CODE> to lower case then added the pair <CODE>key</CODE>, <CODE>value</CODE> to the dictionary. The member function <CODE>replace</CODE> searches for a definition whose first component is equal to the result of converting <CODE>key</CODE> to lower case. If it finds such a definition, it assigns the replacement text to <CODE>key</CODE>, adjusting the case of the first character to match the case of the first character of <CODE>key</CODE>. Otherwise, it does nothing.
+ The member function <CODE>add</CODE> converts <CODE>key</CODE> to lower case and adds the pair <CODE>key</CODE>, <CODE>value</CODE> to the dictionary. The member function <CODE>replace</CODE> searches for a definition whose first component is equal to the result of converting <CODE>key</CODE> to lower case. If it finds such a definition, it assigns the replacement text to <CODE>key</CODE>, adjusting the case of the first character to match the case of the first character of <CODE>key</CODE>. Otherwise, it does nothing.
</P>
<A NAME="dictionary_stdio_filter"></A>
Modified: branches/quickbook-dev/libs/iostreams/doc/tutorial/filter_usage.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/tutorial/filter_usage.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/tutorial/filter_usage.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -52,7 +52,7 @@
</P>
<P>
- Now suppose you want to recoved the original data. If you have appropriate InputFilters <CODE>decompressor</CODE> and <CODE>base64_decoder</CODE>, you can accomplish this as follows as follows:<A CLASS='footnote_ref' NAME='note_2_ref' HREF="#note_2"><SUP>[2]</SUP></A>
+ Now suppose you want to recover the original data. If you have appropriate InputFilters <CODE>decompressor</CODE> and <CODE>base64_decoder</CODE>, you can accomplish this as follows:<A CLASS='footnote_ref' NAME='note_2_ref' HREF="#note_2"><SUP>[2]</SUP></A>
</P>
<PRE CLASS="broken_ie">
Modified: branches/quickbook-dev/libs/iostreams/doc/tutorial/shell_comments_filters.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/tutorial/shell_comments_filters.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/tutorial/shell_comments_filters.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -217,7 +217,7 @@
<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
<SPAN CLASS='keyword'>bool</SPAN> put(Sink& dest, <SPAN CLASS='keyword'>int</SPAN> c)
{
- <SPAN CLASS='comment'>// Attempt to consume the given character of unfilitered</SPAN>
+ <SPAN CLASS='comment'>// Attempt to consume the given character of unfiltered</SPAN>
<SPAN CLASS='comment'>// data, writing filtered data to dest as appropriate. </SPAN>
<SPAN CLASS='comment'>// Return true if the character was successfully consumed.</SPAN>
}
Modified: branches/quickbook-dev/libs/iostreams/doc/tutorial/writing_devices.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/tutorial/writing_devices.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/tutorial/writing_devices.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -41,7 +41,7 @@
<P>Here <CODE>io::stream_buffer<my_device></CODE> is a derived class of <CODE>std::basic_streambuf</CODE>, and <CODE>io::stream<my_device></CODE> is a derived class of <CODE>std::basic_istream</CODE>, <CODE>std::basic_ostream</CODE> or <CODE>std::basic_iostream</CODE> depending on the mode of my_device, <I>i.e.</I>, depending on which of the fundamental i/o operations read
, write
and seek
it supports.
-<P>The template <CODE>io::stream</CODE> is provided as a convenience. It's always possibly to avoid <CODE>io::stream</CODE> and simply use <CODE>io::stream_buffer</CODE> together with one of the standard library stream templates. <I>E.g.</I>,
+<P>The template <CODE>io::stream</CODE> is provided as a convenience. It's always possible to avoid <CODE>io::stream</CODE> and simply use <CODE>io::stream_buffer</CODE> together with one of the standard library stream templates. <I>E.g.</I>,
<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><ostream></SPAN>
<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/device/file.hpp"><SPAN CLASS='literal'><boost/iostreams/device/file.hpp></SPAN></A>
Modified: branches/quickbook-dev/libs/iostreams/doc/tutorial/writing_filters.html
==============================================================================
--- branches/quickbook-dev/libs/iostreams/doc/tutorial/writing_filters.html (original)
+++ branches/quickbook-dev/libs/iostreams/doc/tutorial/writing_filters.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -27,15 +27,15 @@
<A NAME="filter_overview"></A>
<H2>2.2.1. Overview: InputFilters, OutputFilters and Filter Helpers</H2>
-<P>Filters are used to modified character sequences. For example, you might use a filter to replace all instances of one word with another, to convert all alphabetic characters to lower case or to encrypt a document. Sometimes the filter is a mere observer; in this case the filtered character sequence if the same as the unfiltered sequence. For example, you might use a filter to count the number of occurences of a given word.</P>
+<P>Filters are used to modify character sequences. For example, you might use a filter to replace all instances of one word with another, to convert all alphabetic characters to lower case or to encrypt a document. Sometimes the filter is a mere observer; in this case the filtered character sequence if the same as the unfiltered sequence. For example, you might use a filter to count the number of occurrences of a given word.</P>
<A NAME="input_filters_and_output_filters"></A>
<H4>InputFilters and OutputFilters</H4>
-<P>The Iostreams library supports two basic categories of Filters InputFilters and OutputFilters. InputFilters represent a “pull” model of filtering: a source of unfilitered data is provided — represented as a Source — and the Filter is expected to generate a certain number characters of the filtered sequence. The filtered sequence is generated incrementally, meaning that to filter a given character sequence the Filter typically must be invoked several times. OutputFilters represent a “push” model of filtering: a sequence of unfiltered characters and a Sink are provided, and the Filter is expected to filter the characters and write them to the Sink. Like InputFilters, OutputFilters also process data incrementally.</P>
+<P>The Iostreams library supports two basic categories of Filters, InputFilters and OutputFilters. InputFilters represent a “pull” model of filtering: a source of unfiltered data is provided — represented as a Source — and the Filter is expected to generate a certain number of characters of the filtered sequence. The filtered sequence is generated incrementally, meaning that to filter a given character sequence the Filter typically must be invoked several times. OutputFilters represent a “push” model of filtering: a sequence of unfiltered characters and a Sink are provided, and the Filter is expected to filter the characters and write them to the Sink. Like InputFilters, OutputFilters also process data incrementally.</P>
-<P>The simplest InputFilters and OutputFilters process characters one at a time. This type of Filter is easy to write, but is less efficient than Filters that process several characters at a time. Filters which process several characters at a time are called Multi-Character fiters.</P>
+<P>The simplest InputFilters and OutputFilters process characters one at a time. This type of Filter is easy to write, but is less efficient than Filters that process several characters at a time. Filters which process several characters at a time are called Multi-Character filters.</P>
<A NAME="filter_helpers"></A>
<H4>Filter Helpers</H4>
@@ -43,13 +43,13 @@
<P>The Iostreams library provides several utilities to make Filter writing easier:</P>
<UL>
<LI>
- aggregate_filter
allows a programmer to define a Filter by reading unfilitered data from one <CODE>std::vector</CODE> and writing filtered data to another <CODE>std::vector</CODE>.
+ aggregate_filter
allows a programmer to define a Filter by reading unfiltered data from one <CODE>std::vector</CODE> and writing filtered data to another <CODE>std::vector</CODE>.
</LI>
<LI>
- stdio_filter
allows a programmer to define a Filter by reading unfilitered data from standard input and writing filtered data to standard output.
+ stdio_filter
allows a programmer to define a Filter by reading unfiltered data from standard input and writing filtered data to standard output.
</LI>
<LI>
- symmetric_filter
allows a programmer to define a Filter by reading unfilitered data from one array and writing filtered data to another array.
+ symmetric_filter
allows a programmer to define a Filter by reading unfiltered data from one array and writing filtered data to another array.
</LI>
<LI>
<A HREF="finite_state_filters.html"><CODE>finite_state_filter</CODE></A> allows a programmer to define a Filter as a finite state machine. This component is included with the example filters; it is not currently an official part of the library.
@@ -60,7 +60,7 @@
<H4>Selecting a Filter Concept</H4>
<P>
- Suppose you need to write a Filter to perform a given filtering task. How do you decide whether to write an InputFilters or OutputFilters, or to use one of the Filter helpers? The first two Filter helpers mentioned above, aggregate_filter
and stdio_filter
, have high-memory usage and only work with character sequences that have a well-defined end. They allow filtering algorithms to be expressed in a very straightforward way, however, and so provide a good introduction to filtering. The third Filter helper, symmetric_filter
, is useful for defining filter based on C-language API such as zlib, libbz2 or OpenSSL. If none of the Filter helpers are appropriate, you should generally write an InputFilter if you plan to use the filter for reading and an Output
Filter if you plan to use it for writing. In some cases, however, it is much easier to express an algorithm as an InputFilter than as an OutputFilter, or <I>vice versa</I>. In such cases, you can write the filter whichever way is easier, and use the class template inverse
or the function template invert
to turn an InputFilter into an OutputFilter or <I>vice versa</I>.
+ Suppose you need to write a Filter to perform a given filtering task. How do you decide whether to write an InputFilter or OutputFilter, or to use one of the Filter helpers? The first two Filter helpers mentioned above, aggregate_filter
and stdio_filter
, have high-memory usage and only work with character sequences that have a well-defined end. They allow filtering algorithms to be expressed in a very straightforward way, however, and so provide a good introduction to filtering. The third Filter helper, symmetric_filter
, is useful for defining filter based on C-language API such as zlib, libbz2 or OpenSSL. If none of the Filter helpers are appropriate, you should generally write an InputFilter if you plan to use the filter for reading and an OutputFi
lter if you plan to use it for writing. In some cases, however, it is much easier to express an algorithm as an InputFilter than as an OutputFilter, or <I>vice versa</I>. In such cases, you can write the filter whichever way is easier, and use the class template inverse
or the function template invert
to turn an InputFilter into an OutputFilter or <I>vice versa</I>.
</P>
<P>
Modified: branches/quickbook-dev/libs/iostreams/test/newline_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/iostreams/test/newline_test.cpp (original)
+++ branches/quickbook-dev/libs/iostreams/test/newline_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -319,43 +319,43 @@
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::dos, ::posix, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::mac, ::posix, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::posix, ::dos, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::mac, ::dos, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::posix, ::mac, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::dos, ::mac, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::final_newline, ::no_final_newline, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::posix, ::mixed, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::dos, ::mixed, true),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::mac, ::mixed, true),
io::newline_error
- )
+ );
}
void write_newline_checker()
@@ -367,7 +367,7 @@
out.push(io::newline_checker(io::newline::posix));
out.push(io::null_sink());
- BOOST_CHECK_NO_THROW(io::copy(string_source(::posix), out))
+ BOOST_CHECK_NO_THROW(io::copy(string_source(::posix), out));
checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
BOOST_CHECK(checker->is_posix());
BOOST_CHECK(!checker->is_dos());
@@ -380,7 +380,7 @@
out.push(io::newline_checker(io::newline::dos));
out.push(io::null_sink());
- BOOST_CHECK_NO_THROW(io::copy(string_source(::dos), out))
+ BOOST_CHECK_NO_THROW(io::copy(string_source(::dos), out));
checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
BOOST_CHECK(!checker->is_posix());
BOOST_CHECK(checker->is_dos());
@@ -393,7 +393,7 @@
out.push(io::newline_checker(io::newline::mac));
out.push(io::null_sink());
- BOOST_CHECK_NO_THROW(io::copy(string_source(::mac), out))
+ BOOST_CHECK_NO_THROW(io::copy(string_source(::mac), out));
checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
BOOST_CHECK(!checker->is_posix());
BOOST_CHECK(!checker->is_dos());
@@ -406,7 +406,7 @@
out.push(io::newline_checker(io::newline::posix));
out.push(io::null_sink());
- BOOST_CHECK_NO_THROW(io::copy(string_source(::no_final_newline), out))
+ BOOST_CHECK_NO_THROW(io::copy(string_source(::no_final_newline), out));
checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
BOOST_CHECK(checker->is_posix());
BOOST_CHECK(!checker->is_dos());
@@ -419,7 +419,7 @@
out.push(io::newline_checker());
out.push(io::null_sink());
- BOOST_CHECK_NO_THROW(io::copy(string_source(::mixed), out))
+ BOOST_CHECK_NO_THROW(io::copy(string_source(::mixed), out));
checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
BOOST_CHECK(!checker->is_posix());
BOOST_CHECK(!checker->is_dos());
@@ -436,43 +436,43 @@
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::dos, ::posix, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::mac, ::posix, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::posix, ::dos, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::mac, ::dos, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::posix, ::mac, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::dos, ::mac, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::final_newline, ::no_final_newline, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::posix, ::mixed, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::dos, ::mixed, false),
io::newline_error
- )
+ );
BOOST_CHECK_THROW(
test_input_against_flags(io::newline::mac, ::mixed, false),
io::newline_error
- )
+ );
}
test_suite* init_unit_test_suite(int, char* [])
Modified: branches/quickbook-dev/libs/libraries.htm
==============================================================================
--- branches/quickbook-dev/libs/libraries.htm (original)
+++ branches/quickbook-dev/libs/libraries.htm 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -158,6 +158,8 @@
<li>graph -
Generic graph components and algorithms, from Jeremy Siek
and a University of Notre Dame team; now maintained by Andrew Sutton and Jeremiah Willcock.</li>
+ <li>heap -
+ Priority queue data structures, from Tim Blechmann</li>
<li>icl -
Interval Container Library, interval sets and maps and aggregation
of associated values, from Joachim Faulhaber.</li>
@@ -461,6 +463,8 @@
Interval Container Library, interval sets and maps and aggregation
of associated values, from Joachim Faulhaber.</li>
<li>intrusive - Intrusive containers and algorithms, from Ion Gaztañaga</li>
+ <li>heap -
+ Priority queue data structures, from Tim Blechmann</li>
<li>multi_index - Containers with
multiple STL-compatible access interfaces, from Joaquín M López
Muñoz.</li>
Modified: branches/quickbook-dev/libs/locale/build/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/locale/build/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/locale/build/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -372,6 +372,10 @@
{
result += <source>util/gregorian.cpp ;
}
+
+ result += <library>../../system/build//boost_system ;
+
+
if "$(flags-only)" = "flags"
{
return $(flags-result) ;
Modified: branches/quickbook-dev/libs/maintainers.txt
==============================================================================
--- branches/quickbook-dev/libs/maintainers.txt (original)
+++ branches/quickbook-dev/libs/maintainers.txt 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -9,7 +9,7 @@
# to closely follow the format of the library.
accumulators Eric Niebler <eric -at- boostpro.com>
-algorithm Marshall Clow <marshall -at- idio.com>
+algorithm Marshall Clow <marshall -at- idio.com>
algorithm/minmax Herve Bronnimann <hbr -at- poly.edu>
algorithm/string Marshall Clow <marshall -at- idio.com>
any Alexander Nasonov <alexander.nasonov -at- gmail.com>
@@ -44,6 +44,7 @@
geometry Barend Gehrels<barend -at- xs4all.nl>, Bruno Lalande <bruno.lalande -at- gmail.com>, Mateusz Loskot <mateusz -at- loskot.net>
gil Lubomir Bourdev <lbourdev -at- adobe.com>, Hailin Jin <hljin -at- adobe.com>
graph Andrew Sutton <asutton -at- cs.kent.edu>
+heap Tim Blechmann <tim -at- klingt.org>
icl Joachim Faulhaber <afojgo -at- gmail.com>
integer Daryle Walker <darylew -at- hotmail.com>
interprocess Ion Gaztanaga <igaztanaga -at- gmail.com>
Modified: branches/quickbook-dev/libs/math/doc/sf_and_dist/constants.qbk
==============================================================================
--- branches/quickbook-dev/libs/math/doc/sf_and_dist/constants.qbk (original)
+++ branches/quickbook-dev/libs/math/doc/sf_and_dist/constants.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,75 +1,695 @@
-[section:constants Numeric Constants]
+[section:constants Mathematical Constants]
-[h4 Synopsis]
+[section:intro Introduction]
+Boost.Math provides a collection of mathematical constants.
+
+[h4 Why use Boost.Math mathematical constants?]
+
+* Readable. For the very many jobs just using built-in like `double`, you can just write expressions like
+``double area = pi * r * r;``
+(If that's all you want, jump direct to [link math_toolkit.constants.tutorial.non_templ use in non-template code]!)
+* Effortless - avoiding a search of reference sources.
+* Accurate - ensuring that the values are as accurate as possible for the
+chosen floating-point type (both built-in and multiprecision user-defined type (UDT)
+floating-point like NTL, MPFR/GMP, mp_float).
+ * No loss of accuracy from repeated rounding of intermediate computations.
+ * Result is computed with higher precision and only rounded once.
+ * Less risk of inaccurate result from functions pow, trig and log at [@http://en.wikipedia.org/wiki/Corner_case corner cases].
+ * Less risk of [@http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html cancellation error].
+* Faster - can avoid (re-)calculation at runtime. This can be significant if:
+ * Functions pow, trig or log are used.
+ * Inside an inner loop.
+ * Using a high-precision UDT.
+ * Compiler optimizations possible with built-in types, especially `double`, are not available.
+* Portable - as possible between different systems using different floating-point precisions:
+see [link math_toolkit.constants.tutorial.templ use in template code].
+* Tested - by comparison with other published sources, or separately computed at long double precision.
+
+[endsect] [/section:intro Introduction]
+
+[section:tutorial Tutorial]
+
+[section:non_templ Use in non-template code]
+
+When using the math constants at your chosen fixed precision in non-template code,
+you can simply add a `using` declaration, for example, `using boost::math::double_constants`,
+to make the constants of the correct precision for your code
+visible in the current scope, and then use each constant ['as a simple variable]:
+
+ #include <boost/math/constants.hpp>
+
+ double area(double r)
+ {
+ using boost::math::double_constants;
+ return pi * r * r;
+ }
+
+Had our function been written as taking a `float` rather than a `double`,
+we could have written instead:
+
+ #include <boost/math/constants.hpp>
+
+ float area(float r)
+ {
+ using boost::math::float_constants;
+ return pi * r * r;
+ }
+
+Likewise, constants that are suitable for use at `long double` precision
+are available in the namespace `boost::math::long_double_constants`.
+
+You can see the full list of available constants at [link math_toolkit.constants.constants].
+
+[endsect]
+
+[section:templ Use in template code]
+
+When using the constants inside a function template, we need to ensure that
+we use a constant of the correct precision for our template parameters.
+We can do this by calling the function-template versions, `pi<FPType>()`, of the constants
+like this:
+
+ #include <boost/math/constants.hpp>
+
+ template <class Real>
+ Real area(Real r)
+ {
+ using namespace boost::math::constants;
+ return pi<Real>() * r * r;
+ }
+
+Although this syntax is a little less "cute" than the non-template version,
+the code is no less efficient
+(at least for the built-in types `float`, `double` and `long double`) :
+the function template versions of the constants are simple inline functions that
+return a constant of the correct precision for the type used. In addition, these
+functions are declared `constexp` for those compilers that support this, allowing
+the result to be used in constant-expressions provided the template argument is a literal type.
+
+[tip Keep in mind the difference between the variable version,
+just `pi`, and the template-function version:
+the template-function requires both a <[~floating-point-type]>
+and function call `()` brackets, for example: `pi<double>()`.
+You cannot write `double p = pi<>()`, nor `double p = pi()`.]
+
+[note You can always use [*both] variable and template-function versions
+[*provided calls are fully qualified], for example:
``
-#include <boost/math/constants/constants.hpp>
+double my_pi1 = boost::math::constants::pi<double>();
+double my_pi2 = boost::math::double_constants::pi;
``
+]
+
+[warning It may be tempting to simply define
+``
+using namespace boost::math::double_constants;
+using namespace boost::math::constants;
+``
+but if you do define two namespaces, this will, of course, create ambiguity!
+``
+double my_pi = pi(); // error C2872: 'pi' : ambiguous symbol
+double my_pi2 = pi; // Context does not allow for disambiguation of overloaded function
+``
+Although the mistake above is fairly obvious,
+it is also not too difficult to do this accidentally, or worse, create it in someone elses code.
+
+Therefore is it prudent to avoid this risk by [*localising the scope of such definitions], as shown above.]
+
+[tip Be very careful with the type provided as parameter.
+For example, providing an [*integer] instead of a floating-point type can be disastrous (a C++ feature).
+
+``cout << "Area = " << area(2) << endl; // Area = 12!!!``
+
+You should get a compiler warning
+[pre
+warning : 'return' : conversion from 'double' to 'int', possible loss of data
+] [/pre]
+Failure to heed this warning can lead to very wrong answers!
+
+You can also avoid this by being explicit about the type of `Area`.
+``cout << "Area = " << area<double>(2) << endl; // Area = 12.566371``
+]
+
+[endsect] [/section:templ Use in template code]
+
+[section:user_def Use With User Defined Types]
+
+The syntax for using the function-call constants with user-defined types is the same
+as it is in the template class, which is to say we use:
+
+ #include <boost/math/constants.hpp>
+
+ boost::math::constants::pi<UserDefinedType>();
+
+However, since the precision of the user-defined type may be much greater than that
+of the built-in floating pointer types, how the value returned is created is as follows:
+
+* If the precision of the type is known at compile time:
+ * If the precision is less than or equal to that of a `float` and the type is constructable from a `float`
+ then our code returns a `float` literal. If the user-defined type is a literal type
+ then the function call that returns the constant will be a `constexp`.
+ * If the precision is less than or equal to that of a `double` and the type is constructable from a `double`
+ then our code returns a `double` literal. If the user-defined type is a literal type
+ then the function call that returns the constant will be a `constexp`.
+ * If the precision is less than or equal to that of a `long double` and the type is constructable from a `long double`
+ then our code returns a `long double` literal. If the user-defined type is a literal type
+ then the function call that returns the constant will be a `constexp`.
+ * If the precision is less than 100 decimal digits, then the constant will be constructed
+ (just the once, then cached in a thread-safe manner) from a string representation of the constant.
+ * Otherwise the value is computed (just once, then cached in a thread-safe manner).
+* If the precision is unknown at compile time then:
+ * If the runtime precision (obtained from a call to `boost::math::tools::digits<T>()`) is
+ less than 100 decimal digits, then the constant is constructed "on the fly" from the string
+ representation of the constant.
+ * Otherwise the value is constructed "on the fly" by calculating then value of the constant
+ using the current default precision of the type. Note that this can make use of the constants
+ rather expensive.
+
+In addition, it is possible to pass a `Policy` type as a second template argument, and use this to control
+the precision:
+
+ #include <boost/math/constants/constants.hpp>
+
+ typedef boost::math::policies::policy<boost::math::policies::digits2<80> > my_policy_type;
+ boost::math::constants::pi<MyType, my_policy_type>();
+
+[note Boost.Math doesn't know how to control the internal precision of `MyType`, the policy
+just controls how the selection process above is carried out, and the calculation precision
+if the result is computed.]
+
+It is also possible to control which method is used to construct the constant by specialising
+the traits class `construction_traits`:
+
+ namespace boost{ namespace math{ namespace constant{
+
+ template <class T, class Policy>
+ struct construction_traits
+ {
+ typedef mpl::int_<N> type;
+ };
- namespace boost{ namespace math{ namespace constants{
-
- template <class T> T pi();
- template <class T> T root_pi();
- template <class T> T root_half_pi();
- template <class T> T root_two_pi();
- template <class T> T root_ln_four();
- template <class T> T e();
- template <class T> T half();
- template <class T> T euler();
- template <class T> T root_two();
- template <class T> T ln_two();
- template <class T> T ln_ln_two();
- template <class T> T third();
- template <class T> T twothirds();
- template <class T> T pi_minus_three();
- template <class T> T four_minus_pi();
-
}}} // namespaces
-[h4 Description]
+Where ['N] takes one of the following values:
+
+[table
+[[['N]][Meaning]]
+[[0][The precision is unavailable at compile time;
+either construct from a decimal digit string or calculate on the fly depending upon the runtime precision.]]
+[[1][Return a float precision constant.]]
+[[2][Return a double precision constant.]]
+[[3][Return a long double precision constant.]]
+[[4][Construct the result from the string representation, and cache the result.]]
+[[Any other value ['N]][Sets the compile time precision to ['N] bits.]]
+]
+
+[h5 Custom Specializing a constant]
+
+In addition, for user-defined types that need special handling, it's possible to \[partially-\] specialize
+the internal structure used by each constant. For example, suppose we're using the C++ wrapper around MPFR
+`mpfr_class`: this has its own representation of Pi which we may well wish to use in place of the above
+mechanism. We can achieve this by specialising the class template `boost::math::constants::detail::constant_pi`:
-The header `boost/math/constants/constants.hpp` contains some numeric constants
-that we have found useful in the development of this library. New constants are
-added on an ad-hoc basis based on need.
-
-Usage is like this:
-
- template <class T>
- T circumference(T r)
+ namespace boost{ namespace math{ namespace constants{ namespace detail{
+
+ template<>
+ struct constant_pi<mpfr_class>
+ {
+ template<int N>
+ inline T get(const mpl::int_<N>&)
+ {
+ // The template param N is one of the values in the table above,
+ // we can either handle all cases in one as is the case here,
+ // or overload "get" for the different options.
+ mpfr_class result;
+ mpfr_const_pi(result.get_mpfr_t(), GMP_RNDN);
+ return result;
+ }
+ };
+
+ }}}} // namespaces
+
+[h5 Diagnosing what meta-programmed code is doing]
+
+Finally, since it can be tricky to diagnose what meta-programmed code is doing, there is a
+diagnostic routine that prints information about how this library will handle a specific type,
+it can be used like this:
+
+ #include <boost/math/constants/info.hpp>
+
+ int main()
{
- return 2 * boost::math::constants::pi<T>() * r;
+ boost::math::constants::print_info_on_type<MyType>();
}
-All the constants are accurate to at least the 34 decimal digits required for 128-bit
-long doubles, and most are accurate to 100 digits or more when used with
-a suitable arbitrary precision type.
+If you wish, you can also pass an optional std::ostream argument to the `print_info_on_type` function.
+Typical output for a user-defined type looks like this:
-The following table summarises the constants we have at present:
+[pre
+Information on the Implementation and Handling of
+Mathematical Constants for Type class boost::math::concepts::real_concept
+
+Checking for std::numeric_limits<class boost::math::concepts::real_concept> specialisation: no
+boost::math::policies::precision<class boost::math::concepts::real_concept, Policy>
+reports that there is no compile type precision available.
+boost::math::tools::digits<class boost::math::concepts::real_concept>()
+reports that the current runtime precision is
+53 binary digits.
+No compile time precision is available, the construction method
+will be decided at runtime and results will not be cached
+- this may lead to poor runtime performance.
+Current runtime precision indicates that
+the constant will be constructed from a string on each call.
+]
-[table
-[[Constant][Meaning][Value]]
-[[pi][[pi]][3.1415926535897932384...]]
-[[root_pi][[radic][pi]][1.772453850905516027...]]
-[[root_half_pi][[radic]([pi]/2)][1.253314137315500251...]]
-[[root_two_pi][[radic](2*[pi])][2.506628274631000502...]]
-[[root_ln_four][[radic](ln(4))][1.17741002251547469...]]
-[[e][['e]][2.71828182845904523536...]]
-[[half][0.5][0.5]]
-[[euler][Euler's constant][0.577215664901532860606]]
-[[root_two][[radic]2][1.4142135623730950488...]]
-[[ln_two][ln(2)][0.6931471805599453094...]]
-[[ln_ln_two][ln(ln(2))][-0.3665129205816643...]]
-[[third][1/3][0.333333333333333333...]]
-[[twothirds][2/3][0.666666666666666666...]]
-[[pi_minus_three][[pi]-3][0.14159265358979323846...]]
-[[four_minus_pi][4-[pi]][0.85840734641020676153735...]]
-]
-
-[endsect][/section Numeric Constants]
-
-[/
- Copyright 2008 John Maddock and Paul A. Bristow.
- Distributed under 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).
+[endsect] [/section:user_def Use With User Defined Types]
+
+[endsect] [/section:tutorial Tutorial]
+
+[section:constants The Mathematical Constants]
+
+This section lists the mathematical constants, their use(s) (and sometimes rationale for their inclusion).
+[table Mathematical Constants
+[[name] [formula] [Value (6 decimals)] [Uses and Rationale]]
+[[[*Rational fractions]] [] [] [] ]
+[[half] [1/2] [0.5] [] ]
+[[third] [1/3] [0.333333] [] ]
+[[two_thirds] [2/3] [0.66667] [] ]
+[[three_quarters] [3/4] [0.75] [] ]
+
+[[[*two and related]] [] [] [] ]
+[[root_two] [[radic]2] [1.41421] [] ]
+[[root_three] [[radic]3] [1.73205] [] ]
+[[half_root_two] [[radic]2 /2] [0.707106] [] ]
+[[ln_two] [ln(2)] [6.93147] [] ]
+[[ln_ln_two] [ln(ln(2))] [-3.66512] [Gumbel distribution median] ]
+[[root_ln_four] [[radic]ln(4)] [1.177410] [] ]
+[[one_div_root_two] [1/[radic]2] [0.707106] [] ]
+
+[[[*[pi] and related]] [] [] [] ]
+[[pi] [pi] [3.14159] [Ubiquitous. Archimedes constant [@http://en.wikipedia.org/wiki/Pi [pi]]]]
+[[half_pi] [[pi]/2] [1.570796] [] ]
+[[third_pi] [[pi]/3] [1.04719] [] ]
+[[sixth_pi] [[pi]/6] [0.523598] [] ]
+[[two_pi] [2[pi]] [6.28318] [Many uses, most simply, circumference of a circle]]
+[[two_thirds_pi] [2/3 [pi]] [2.09439] [[@http://en.wikipedia.org/wiki/Sphere#Volume_of_a_sphere volume of a hemi-sphere] = 4/3 [pi] r[cubed]]]
+[[three_quarters_pi] [3/4 [pi]] [2.35619] [[@http://en.wikipedia.org/wiki/Sphere#Volume_of_a_sphere volume of a hemi-sphere] = 4/3 [pi] r[cubed]]]
+[[four_thirds_pi] [4/3 [pi]] [4.18879] [[@http://en.wikipedia.org/wiki/Sphere#Volume_of_a_sphere volume of a sphere] = 4/3 [pi] r[cubed]]]
+[[one_div_two_pi] [1/(2[pi])] [1.59155] [Widely used]]
+[[root_pi] [[radic][pi]][1.77245] [Widely used]]
+[[root_half_pi] [[radic] [pi]/2] [1.25331] [Widely used]]
+[[root_two_pi][[radic] [pi]*2] [2.50662] [Widely used]]
+[[one_div_root_pi] [1/[radic][pi]] [0.564189] [] ]
+[[one_div_root_two_pi] [1/[radic](2[pi])] [0.398942] [] ]
+[[root_one_div_pi] [[radic](1/[pi]] [0.564189] [] ]
+[[pi_minus_three] [[pi]-3] [1.41593] [] ]
+[[four_minus_pi] [4 -[pi]] [0.858407] [] ]
+[[pow23_four_minus_pi] [4[super 2/3] - [pi]] [0.795316] [] ]
+[[pi_pow_e] [[pi][super e]] [22.4591] [] ]
+
+[[pi_sqr] [[pi][super 2]] [9.86960] [] ]
+[[pi_sqr_div_six] [[pi][super 2]/6] [1.64493] [] ]
+[[pi_cubed] [[pi][super 3]] [31.00627] [] ]
+[[cbrt_pi] [[radic][super 3] [pi]] [1.46459] [] ]
+[[one_div_cbrt_pi] [1/[radic][super 3] [pi]] [0.682784] [] ]
+
+[[[*Euler's e and related]] [] [] [] ]
+[[e] [e] [2.71828] [[@http://en.wikipedia.org/wiki/E_(mathematical_constant) Euler's constant e]] ]
+[[exp_minus_half] [e [super -1/2]] [0.606530] [] ]
+[[e_pow_pi] [e [super [pi]]] [23.14069] [] ]
+[[root_e] [[radic] e] [1.64872] [] ]
+[[log10_e] [ln(e)] [0.434294] [] ]
+[[one_div_log10_e] [1/ln(e)] [2.30258] [] ]
+
+[[[*Trigonometric]] [] [] [] ]
+[[degree] [radians = [pi] / 180] [0.017453] [] ]
+[[radian] [degrees = 180 / [pi]] [57.2957] [] ]
+[[sin_one] [sin(1)] [0.841470] [] ]
+[[cos_one] [cos(1)] [0.54030] [] ]
+[[sinh_one] [sinh(1)] [1.17520] [] ]
+[[cosh_one] [cosh(1)] [1.54308] [] ]
+
+[[[*Phi]] [ Phidias golden ratio] [[@http://en.wikipedia.org/wiki/Golden_ratio Phidias golden ratio]] [] ]
+[[phi] [(1 + [radic]5) /2] [1.61803] [finance] ]
+[[ln_phi] [ln([phi])] [0.48121] [] ]
+[[one_div_ln_phi] [1/ln([phi])] [2.07808] [] ]
+
+[[[*Euler's Gamma]] [] [] [] ]
+[[euler] [euler] [0.577215] [[@http://en.wikipedia.org/wiki/Euler%E2%80%93Mascheroni_constant Euler-Mascheroni gamma constant]] ]
+[[one_div_euler] [1/euler] [1.73245] [] ]
+[[euler_sqr] [euler[super 2]] [0.333177] [] ]
+
+[[[*Misc]] [] [] [] ]
+[[zeta_two] [[zeta](2)] [1.64493] [[@http://en.wikipedia.org/wiki/Riemann_zeta_function Riemann zeta function]] ]
+[[zeta_three] [[zeta](3)] [1.20205] [[@http://en.wikipedia.org/wiki/Riemann_zeta_function Riemann zeta function]] ]
+[[catalan] [['K]] [0.915965] [[@http://mathworld.wolfram.com/CatalansConstant.html Catalan (or Glaisher) combinatorial constant] ]]
+[[glaisher] [['A]] [1.28242] [[@https://oeis.org/A074962/constant Decimal expansion of Glaisher-Kinkelin constant] ]]
+[[khinchin] [['k]] [2.685452] [[@https://oeis.org/A002210/constant Decimal expansion of Khinchin constant] ]]
+
+[[extreme_value_skewness] [12[radic]6 [zeta](3)/ [pi][super 3]] [1.139547] [Extreme value distribution] ]
+[[rayleigh_skewness] [2[radic][pi]([pi]-3)/(4 - [pi])[super 3/2]] [0.631110] [Rayleigh distribution skewness] ]
+[[rayleigh_kurtosis_excess] [-(6[pi][super 2]-24[pi]+16)/(4-[pi])[super 2]] [0.245089] [[@http://en.wikipedia.org/wiki/Rayleigh_distribution Rayleigh distribution kurtosis excess]] ]
+[[rayleigh_kurtosis] [3+(6[pi][super 2]-24[pi]+16)/(4-[pi])[super 2]] [3.245089] [Rayleigh distribution kurtosis] ]
+
+] [/table]
+
+
+[note Integer values are *not included* in this list of math constants, however interesting,
+because they can be so easily and exactly constructed, even for UDT, for example: `static_cast<cpp_float>(42)`.]
+
+[tip If you know the approximate value of the constant, you can search for the value to find Boost.Math chosen name in this table.]
+
+[endsect] [/section:constants The constants]
+
+[section:new_const Defining New Constants]
+
+The library provides some helper code to assist in defining new constants;
+the process for defining a constant called `my_constant` goes like this:
+
+1. [*Define a function that calculates the value of the constant].
+This should be a template function, and be placed in `boost/math/constants/calculate_constants.hpp`
+if the constant is to be added to this library,
+or else defined at the top of your source file if not.
+
+The function should look like this:
+
+ namespace boost{ namespace math{ namespace constants{ namespace detail{
+
+ template <class Real>
+ template <int N>
+ Real constant_my_constant<Real>::compute(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_<N>))
+ {
+ int required_precision = N ? N : tools::digits<Real>();
+ Real result = /* value computed to required_precision bits */ ;
+ return result;
+ }
+
+ }}}} // namespaces
+
+Then define a placeholder for the constant itself:
+
+ namespace boost{ namespace math{ namespace constants{
+
+ BOOST_DEFINE_MATH_CONSTANT(my_constant, 0, "0");
+
+ }}}
+
+
+For example, to calculate [pi]/2, add to `boost/math/constants/calculate_constants.hpp`
+
+ template <class T>
+ template<int N>
+ inline T constant_half_pi<T>::compute(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_<N>))
+ {
+ BOOST_MATH_STD_USING
+ return pi<T, policies::policy<policies::digits2<N> > >() / static_cast<T>(2);
+ }
+
+Then to `boost/math/constants/constants.hpp` add:
+
+ BOOST_DEFINE_MATH_CONSTANT(half_pi, 0, "0"); // actual values are temporary, we'll replace them later
+
+[note Previously defined constants like pi and e can be used, but by not simply calling `pi<T>()`;
+specifying the precision via the policy is essential to ensure full accuracy.]
+
+[note Newly defined constants can only be used once they are included in
+ `boost/math/constants/constants.hpp`. So if you add
+`template <class T, class N> T calculate_new_constant{...}`,
+then you cannot define `calculate_one_div_new_constant`
+until you add the `BOOST_DEFINE_MATH_CONSTANT(new_constant, 1.234...)`.]
+
+2. [*You will need an arbitary precision type to use to calculate the value]. This library
+currently supports either `cpp_float`, `NTL::RR` or `mpfr_class` used via the bindings in `boost/math/bindings`.
+The default is to use `NTL::RR` unless you define an alternate macro, for example,
+`USE_MPFR` or `USE_CPP_FLOAT` at the start of your program.
+
+3. The complete program to generate the constant `half_pi` using function `calculate_half_pi` is then:
+
+ #define USE_CPP_FLOAT // If required.
+ #include <boost/math/constants/generate.hpp>
+
+ int main()
+ {
+ BOOST_CONSTANTS_GENERATE(half_pi);
+ }
+
+The output from the program is a snippet of C++ code
+(actually a macro call) that can be cut and pasted
+into `boost/math/constants/constants.hpp` or else into your own code, for example:
+
+[pre
+ BOOST_DEFINE_MATH_CONSTANT(half_pi, 1.570796326794896619231321691639751442e+00, "1.57079632679489661923132169163975144209858469968755291048747229615390820314310449931401741267105853399107404326e+00");
]
+
+This macro BOOST_DEFINE_MATH_CONSTANT inserts a C++ struct code snippet that
+declares the `float`, `double` and `long double` versions of the constant,
+plus a decimal digit string representation correct to 100 decimal
+digits, and all the meta-programming machinery needed to select between them.
+
+The result of an expanded macro for Pi is shown below.
+
+[import ./pp_pi.hpp]
+
+[preprocessed_pi]
+
+
+[endsect] [/section:new_const Defining New Constants]
+
+[section:FAQ FAQs]
+
+[h4 Why are ['these] Constants Chosen?]
+It is, of course, impossible to please everyone with a list like this.
+
+Some of the criteria we have used are:
+
+* Used in Boost.Math.
+* Commonly used.
+* Expensive to compute.
+* Requested by users.
+* [@http://en.wikipedia.org/wiki/Mathematical_constant Used in science and mathematics.]
+* No integer values (because so cheap to construct).[br]
+(You can easily define your own if found convenient, for example: `FPT one =static_cast<FPT>(42);`).
+
+[h4 How are constants named?]
+* Not macros, so no upper case.
+* All lower case (following C++ standard names).
+* No CamelCase.
+* Underscore as _ delimiter between words.
+* Numbers spelt as words rather than decimal digits (except following pow).
+* Abbreviation conventions:
+ * root for square root.
+ * cbrt for cube root.
+ * pow for pow function using decimal digits like pow23 for n[super 2/3].
+ * div for divided by or operator /.
+ * minus for operator -, plus for operator +.
+ * sqr for squared.
+ * cubed for cubed n[super 3].
+ * words for greek, like [pi], [zeta] and [Gamma].
+ * words like half, third, three_quarters, sixth for fractions. (Digit(s) can get muddled).
+ * log10 for log[sub 10]
+ * ln for log[sub e]
+
+[h4 How are the constants derived?]
+
+The constants have all been calculated using high-precision software working
+with up to 300-bit precision giving about 100 decimal digits.
+(The precision can be arbitrarily chosen and is limited only by compute time).
+
+[h4 How Accurate are the constants?]
+The minimum accuracy chosen (100 decimal digits) exceeds the
+accuracy of reasonably-foreseeable floating-point hardware (256-bit)
+and should meet most high-precision computations.
+
+[h4 How are the constants tested?]
+
+# Comparison using Boost.Test BOOST_CHECK_CLOSE_FRACTION using long double literals,
+with at least 35 decimal digits, enough to be accurate for all long double implementations.
+The tolerance is usually twice `long double epsilon`.
+
+# Comparison with calculation at long double precision.
+This often requires a slightly higher tolerance than two epsilon
+because of computational noise from round-off etc,
+especially when trig and other functions are called.
+
+# Comparison with independent published values,
+for example, using [@http://oeis.org/ The On-Line Encyclopedia of Integer Sequences (OEIS)]
+again using at least 35 decimal digits strings.
+
+# Comparison with independely calculated values using arbitrary precision tools like
+[@http://www.wolfram.com/mathematica/ Mathematica], again using at least 35 decimal digits literal strings.
+
+[warning We have not yet been able to [*check] that
+[*all] constants are accurate at the full arbitrary precision,
+at present 100 decimal digits.
+But certain key values like `e` and `pi` appear to be accurate
+and internal consistencies suggest that others are this accurate too.
+]
+
+[h4 Why is Portability important?]
+
+Code written using math constants is easily portable even when using different
+floating-point types with differing precision.
+
+It is a mistake to expect that results of computations will be [*identical], but
+you can achieve the [*best accuracy possible for the floating-point type in use].
+
+This has no extra cost to the user, but reduces irritating,
+and often confusing and very hard-to-trace effects,
+caused by the intrinsically limited precision of floating-point calculations.
+
+A harmless symptom of this limit is a spurious least-significant digit;
+at worst, slightly inaccurate constants sometimes cause iterating algorithms
+to diverge wildly because internal comparisons just fail.
+
+[h4 What is the Internal Format of the constants, and why?]
+
+See [link math_toolkit.constants.tutorial tutorial] above for normal use,
+but this FAQ explains the internal details used for the constants.
+
+Constants are stored as 100 decimal digit values.
+However, some compilers do not accept decimal digits strings as long as this.
+So the constant is split into two parts, with the first containing at least
+128-bit long double precision (35 decimal digits),
+and for consistency should be in scientific format with a signed exponent.
+
+The second part is the value of the constant expressed as a string literal,
+accurate to at least 100 decimal digits (in practice that means at least 102 digits).
+Again for consistency use scientific format with a signed exponent.
+
+For types with precision greater than a long double,
+then if T is constructible `T `is constructible from a `const char*`
+then it's directly constructed from the string,
+otherwise we fall back on lexical_cast to convert to type `T`.
+(Using a string is necessary because you can't use a numeric constant
+since even a `long double` might not have enough digits).
+
+So, for example, a constant like pi is internally defined as
+
+ BOOST_DEFINE_MATH_CONSTANT(pi, 3.141592653589793238462643383279502884e+00, "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651e+00");
+
+In this case the significand is 109 decimal digits, ensuring 100 decimal digits are exact, and exponent is zero.
+
+See [link math_toolkit.constants.new_const defining new constants] to calculate new constants.
+
+A macro definition like this can be pasted into user code where convenient,
+or into `boost/math/constants.hpp` if it is to be added to the Boost.Math library.
+
+[h4 What Floating-point Types could I use?]
+
+Apart from the built-in floating-point types `float`, `double`, `long double`,
+there are several arbitrary precision floating-point classes available,
+but most are not licensed for commercial use.
+
+[h5 Boost.Multiprecision by Christopher Kormanyos]
+
+This work is based on an earlier work called e-float:
+Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations,
+in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011.
+[@http://doi.acm.org/10.1145/1916461.1916469]
+[@https://svn.boost.org/svn/boost/sandbox/e_float/ e_float]
+but is now re-factored and available under the Boost license in the Boost-sandbox at
+[@https://svn.boost.org/svn/boost/sandbox/multiprecision/ multiprecision]
+where it is being refined and prepared for review.
+
+[h5 Boost.cpp_float by John Maddock using Expression Templates]
+
+[@https://svn.boost.org/svn/boost/sandbox/big_number/ Big Number]
+which is a reworking of [@https://svn.boost.org/svn/boost/sandbox/e_float/ e_float]
+by Christopher Kormanyos to use expression templates for faster execution.
+
+[h5 NTL class quad_float]
+
+[@http://shoup.net/ntl/ NTL] by Victor Shoup has fixed and arbitrary high precision fixed and floating-point types.
+However none of these are licenced for commercial use.
+
+ #include <NTL/quad_float.h> // quad precision 106-bit, about 32 decimal digits.
+ using NTL::to_quad_float; // Less precise than arbitrary precision NTL::RR.
+
+NTL class `quad_float`, which gives a form of quadruple precision,
+106-bit significand (but without an extended exponent range.)
+With an IEC559/IEEE 754 compatible processor,
+for example Intel X86 family, with 64-bit double, and 53-bit significand,
+using the significands of [*two] 64-bit doubles,
+if `std::numeric_limits<double>::digits10` is 16,
+then we get about twice the precision,
+so `std::numeric_limits<quad_float>::digits10()` should be 32.
+(the default `std::numeric_limits<RR>::digits10()` should be about 40).
+(which seems to agree with experiments).
+We output constants (including some noisy bits,
+an approximation to `std::numeric_limits<RR>::max_digits10()`)
+by adding 2 extra decimal digits, so using `quad_float::SetOutputPrecision(32 + 2);`
+
+Apple Mac/Darwin uses a similar ['doubledouble] 106-bit for its built-in `long double` type.
+
+[note The precision of all `doubledouble` floating-point types is rather odd and values given are only approximate.]
+
+[h5 NTL class RR]
+
+Arbitrary precision floating point with NTL class RR,
+default is 150 bit (about 50 decimal digits)
+used here with 300 bit to output 100 decimal digits,
+enough for many practical non-'number-theoretic' C++ applications.
+
+NTL is [*not licenced for commercial use].
+
+This class is used in Boost.Math and an option when using big_number projects to calculate new math constants.
+
+[h5 GMP and MPFR]
+
+[@gmplib.org GMP] and [@http://www.mpfr.org/ MPFR] have also been used to compute constants,
+but are licensed under the [@http://www.gnu.org/copyleft/lesser.html Lesser GPL license]
+and are [*not licensed for commercial use].
+
+[h5 What happened to a previous collection of constants proposed for Boost?]
+
+A review concluded that the way in which the constants were presented did not meet many peoples needs.
+None of the methods proposed met many users' essential requirement to allow writing simply `pi` rather than `pi()`.
+Many science and engineering equations look difficult to read when because function call brackets can be confused
+with the many other brackets often needed. All the methods then proposed of avoiding the brackets failed to meet all needs,
+often on grounds of complexity and lack of applicability to various realistic scenarios.
+
+So the simple namespace method, proposed on its own, but rejected at the first review,
+has been added to allow users to have convenient access to float, double and long double values,
+but combined with template struct and functions to allow simultaneous use
+with other non-built-in floating-point types.
+
+[h5 Why do the constants (internally) have a struct rather than a simple function?]
+
+A function mechanism was provided by in previous versions of Boost.Math.
+
+The new mechanism is to permit partial specialization. See Custom Specializing a constant above.
+It should also allow use with other packages like [@http://www.ttmath.org/ ttmath Bignum C++ library.]
+
+[h5 Where can I find other high precision constants?]
+
+# Constants with very high precision and good accuracy (>40 decimal digits)
+from Simon Plouffe's web based collection [@http://pi.lacim.uqam.ca/eng/].
+# [@https://oeis.org/ The On-Line Encyclopedia of Integer Sequences (OEIS)]
+# Checks using printed text optically scanned values and converted from:
+D. E. Knuth, Art of Computer Programming, Appendix A, Table 1, Vol 1, ISBN 0 201 89683 4 (1997)
+# M. Abrahamovitz & I. E. Stegun, National Bureau of Standards, Handbook of Mathematical Functions,
+a reference source for formulae now superceded by
+# Frank W. Olver, Daniel W. Lozier, Ronald F. Boisvert, Charles W. Clark, NIST Handbook of Mathemetical Functions, Cambridge University Press, ISBN 978-0-521-14063-8, 2010.
+# John F Hart, Computer Approximations, Kreiger (1978) ISBN 0 88275 642 7.
+# Some values from Cephes Mathematical Library, Stephen L. Moshier
+and CALC100 100 decimal digit Complex Variable Calculator Program, a DOS utility.
+# Xavier Gourdon, Pascal Sebah, 50 decimal digits constants at [@http://numbers.computation.free.fr/Constants/constants.html Number, constants and computation].
+
+[h4 Where are Physical Constants?]
+
+Not here in this Boost.Math collection, because physical constants:
+
+* Are measurements.
+* Are not truly constant and keeping changing as mensuration technology improves.
+* Have a instrinsic uncertainty.
+* Mathematical constants are stored and represented at varying precision, but should never be inaccurate.
+
+Some physical constants may be available in Boost.Units.
+
+[endsect] [/section:FAQ FAQ]
+
+[endsect]
+
+
+
Modified: branches/quickbook-dev/libs/math/doc/sf_and_dist/math.qbk
==============================================================================
--- branches/quickbook-dev/libs/math/doc/sf_and_dist/math.qbk (original)
+++ branches/quickbook-dev/libs/math/doc/sf_and_dist/math.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -447,12 +447,13 @@
[include tr1_ref.qbk]
[endsect]
-[section:toolkit Tools, Constants and Internal Details]
+[include constants.qbk]
+
+[section:toolkit Tools and Internal Details]
[include internals_overview.qbk]
[section:internals1 Utilities - Constants & Tools]
-[include constants.qbk]
[include series.qbk]
[include fraction.qbk]
[include rational.qbk]
@@ -513,3 +514,4 @@
]
+
Modified: branches/quickbook-dev/libs/math/example/nonfinite_facet_simple.cpp
==============================================================================
--- branches/quickbook-dev/libs/math/example/nonfinite_facet_simple.cpp (original)
+++ branches/quickbook-dev/libs/math/example/nonfinite_facet_simple.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -218,14 +218,14 @@
// Similarly if we can switch back to the default C locale.
cout.imbue (default_locale);
cout << "infinity in default C representation is " << plus_infinity << endl;
- cout << "infinity in default C representation (setw(" << width << ") is " << setw(width) << plus_infinity <<'|' << endl;
- cout << "infinity in default C representation (setw(" << width << ") is " << left << setw(width) << plus_infinity <<'|' << endl;
- cout << "infinity in default C representation (setw(" << width << ") is " << internal << setw(width) << plus_infinity <<'|' << endl;
+ cout << "infinity in default C representation (setw(" << width << ") is |" << setw(width) << plus_infinity <<'|' << endl;
+ cout << "infinity in default C representation (setw(" << width << ") is |" << left << setw(width) << plus_infinity <<'|' << endl;
+ cout << "infinity in default C representation (setw(" << width << ") is |" << internal << setw(width) << plus_infinity <<'|' << endl;
cout.imbue (C99_out_locale);
- cout << "infinity in C99 representation (setw(" << width << ") is " << right << setw(width) << plus_infinity <<'|'<< endl;
- cout << "infinity in C99 representation (setw(" << width << ") is " << left << setw(width) << plus_infinity <<'|'<< endl;
- cout << "infinity in C99 representation (setw(" << width << ") is " << internal << setw(width) << plus_infinity <<'|'<< endl;
+ cout << "infinity in C99 representation (setw(" << width << ") is |" << right << setw(width) << plus_infinity <<'|'<< endl;
+ cout << "infinity in C99 representation (setw(" << width << ") is |" << left << setw(width) << plus_infinity <<'|'<< endl;
+ cout << "infinity in C99 representation (setw(" << width << ") is |" << internal << setw(width) << plus_infinity <<'|'<< endl;
return 0;
} // int main()
Modified: branches/quickbook-dev/libs/math/test/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/math/test/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/math/test/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -54,7 +54,21 @@
<include>$(ntl-path)/include
<include>$(e_float_path)
<include>$(gmp_path) <include>$(gmp_path)/mpfr <include>$(gmp_path)/gmpfrxx <include>$(gmp_path)/mpfrc++
+ <search>$(gmp_path)
+ <search>$(mpfr_path)
+ <search>$(mpfr_path)/build.vc10/lib/Win32/Debug
;
+
+if $(ntl-path)
+{
+ lib ntl : [ GLOB $(ntl-path)/src : *.cpp ] ;
+}
+else
+{
+ lib ntl ;
+}
+
+explicit ntl ;
cpp-pch pch : pch.hpp : <use>../../test/build//boost_test_exec_monitor ;
cpp-pch pch_light : pch_light.hpp : <use>../../test/build//boost_test_exec_monitor ;
@@ -68,7 +82,9 @@
run powm1_sqrtp1m1_test.cpp test_instances pch_light ../../test/build//boost_test_exec_monitor ;
run special_functions_test.cpp ../../test/build//boost_unit_test_framework/<link>static ;
run test_bernoulli.cpp ../../test/build//boost_test_exec_monitor ;
-run test_constants.cpp pch ../../test/build//boost_test_exec_monitor ;
+run test_constants.cpp ../../test/build//boost_test_exec_monitor ;
+run test_print_info_on_type.cpp ;
+run test_constant_generate.cpp ntl/<link>static : : : [ check-target-builds ../config//has_ntl_rr : : <build>no ] : test_constant_generate_ntl ;
run test_bessel_j.cpp test_instances pch_light ../../test/build//boost_test_exec_monitor ;
run test_bessel_y.cpp test_instances pch_light ../../test/build//boost_test_exec_monitor ;
run test_bessel_i.cpp test_instances pch_light ../../test/build//boost_test_exec_monitor ;
@@ -811,3 +827,5 @@
+
+
Modified: branches/quickbook-dev/libs/math/test/test_constants.cpp
==============================================================================
--- branches/quickbook-dev/libs/math/test/test_constants.cpp (original)
+++ branches/quickbook-dev/libs/math/test/test_constants.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,5 +1,5 @@
-// Copyright Paul Bristow 2007.
-// Copyright John Maddock 2006.
+// Copyright Paul Bristow 2007, 2011.
+// Copyright John Maddock 2006, 2011.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0.
@@ -8,7 +8,16 @@
// test_constants.cpp
-#include <pch.hpp>
+// Check values of constants are drawn from an independent source, or calculated.
+// Both must be at long double precision for the most precise compilers floating-point implementation.
+// So all values use static_cast<RealType>() of values at least 40 decimal digits
+// and that have suffix L to ensure floating-point type is long double.
+
+// Steve Moshier's command interpreter V1.3 100 digits calculator used for some values.
+
+#ifdef _MSC_VER
+# pragma warning(disable : 4127) // conditional expression is constant.
+#endif
#include <boost/math/concepts/real_concept.hpp> // for real_concept
#include <boost/test/test_exec_monitor.hpp> // Boost.Test
@@ -16,55 +25,737 @@
#include <boost/math/constants/constants.hpp>
#include <boost/math/tools/test.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/utility/enable_if.hpp>
+
+// Check at compile time that the construction method for constants of type float, is "construct from a float", or "construct from a double", ...
+BOOST_STATIC_ASSERT((boost::is_same<boost::math::constants::construction_traits<float, boost::math::policies::policy<> >::type, boost::mpl::int_<boost::math::constants::construct_from_float> >::value));
+BOOST_STATIC_ASSERT((boost::is_same<boost::math::constants::construction_traits<double, boost::math::policies::policy<> >::type, boost::mpl::int_<boost::math::constants::construct_from_double> >::value));
+BOOST_STATIC_ASSERT((boost::is_same<boost::math::constants::construction_traits<long double, boost::math::policies::policy<> >::type, boost::mpl::int_<(sizeof(double) == sizeof(long double) ? boost::math::constants::construct_from_double : boost::math::constants::construct_from_long_double)> >::value));
+BOOST_STATIC_ASSERT((boost::is_same<boost::math::constants::construction_traits<boost::math::concepts::real_concept, boost::math::policies::policy<> >::type, boost::mpl::int_<0> >::value));
+
+// Policy to set precision at maximum possible using long double.
+typedef boost::math::policies::policy<boost::math::policies::digits2<std::numeric_limits<long double>::digits> > real_concept_policy_1;
+// Policy with precision +2 (could be any reasonable value),
+// forces the precision of the policy to be greater than
+// that of a long double, and therefore triggers different code (construct from string).
+typedef boost::math::policies::policy<boost::math::policies::digits2<std::numeric_limits<long double>::digits + 2> > real_concept_policy_2;
+
+BOOST_STATIC_ASSERT((boost::is_same<boost::math::constants::construction_traits<boost::math::concepts::real_concept, real_concept_policy_1 >::type, boost::mpl::int_<(sizeof(double) == sizeof(long double) ? boost::math::constants::construct_from_double : boost::math::constants::construct_from_long_double) > >::value));
+BOOST_STATIC_ASSERT((boost::is_same<boost::math::constants::construction_traits<boost::math::concepts::real_concept, real_concept_policy_2 >::type, boost::mpl::int_<boost::math::constants::construct_from_string> >::value));
+
+// We need to declare a conceptual type whose precision is unknown at
+// compile time, and is so enormous when checked at runtime,
+// that we're forced to calculate the values of the constants ourselves.
+
+namespace boost{ namespace math{ namespace concepts{
+
+class big_real_concept : public real_concept
+{
+public:
+ big_real_concept() {}
+ template <class T>
+ big_real_concept(const T& t, typename enable_if<is_convertible<T, real_concept> >::type* = 0) : real_concept(t) {}
+};
+
+inline int itrunc(const big_real_concept& val)
+{
+ BOOST_MATH_STD_USING
+ return itrunc(val.value());
+}
+
+}
+namespace tools{
+
+template <>
+inline int digits<concepts::big_real_concept>(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(T))
+{
+ return 2 * boost::math::constants::max_string_digits;
+}
+
+}}}
template <class RealType>
void test_spots(RealType)
{
- // Basic sanity checks for constants.
-
- RealType tolerance = boost::math::tools::epsilon<RealType>() * 2; // double
+ // Basic sanity checks for constants,
+ // where template parameter RealType can be float, double, long double,
+ // or real_concept, a prototype for user-defined floating-point types.
+
+ // Parameter RealType is only used to communicate the RealType,
+ // and is an arbitrary zero for all tests.
+ //
+ // Actual tolerance is never really smaller than epsilon for long double,
+ // because it's just a wrapper around a long double,
+ // so although it's pretending to be something else (in order to exercise our code),
+ // it can never really have precision greater than a long double.
+
+ typedef typename boost::math::constants::construction_traits<RealType, boost::math::policies::policy<> >::type construction_type;
+ RealType tolerance = std::max(static_cast<RealType>(boost::math::tools::epsilon<long double>()), boost::math::tools::epsilon<RealType>()) * 2; // double
+ if((construction_type::value == 0) && (boost::math::tools::digits<RealType>() > boost::math::constants::max_string_digits))
+ tolerance *= 30; // Allow a little extra tolerance
+ // for calculated (perhaps using a series representation) constants.
std::cout << "Tolerance for type " << typeid(RealType).name() << " is " << tolerance << "." << std::endl;
+ //typedef typename boost::math::policies::precision<RealType, boost::math::policies::policy<> >::type t1;
+ // A precision of zero means we don't know what the precision of this type is until runtime.
+ //std::cout << "Precision for type " << typeid(RealType).name() << " is " << t1::value << "." << std::endl;
+
using namespace boost::math::constants;
- using namespace std; // Help ADL of std exp, log...
- using std::exp;
+ BOOST_MATH_STD_USING
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(3.14159265358979323846264338327950288419716939937510L), pi<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(sqrt(3.14159265358979323846264338327950288419716939937510L)), root_pi<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(sqrt(3.14159265358979323846264338327950288419716939937510L/2)), root_half_pi<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(sqrt(3.14159265358979323846264338327950288419716939937510L * 2)), root_two_pi<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(sqrt(log(4.0L))), root_ln_four<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(2.71828182845904523536028747135266249775724709369995L), e<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(0.5), half<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(0.57721566490153286060651209008240243104259335L), euler<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(sqrt(2.0L)), root_two<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(log(2.0L)), ln_two<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(log(log(2.0L))), ln_ln_two<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(1)/3, third<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(2)/3, twothirds<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(0.14159265358979323846264338327950288419716939937510L), pi_minus_three<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(4. - 3.14159265358979323846264338327950288419716939937510L), four_minus_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L, pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L), root_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L/2), root_half_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L * 2), root_two_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(log(4.0L)), root_ln_four<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(2.71828182845904523536028747135266249775724709369995L, e<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.5L, half<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104259335L, euler<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(2.0L), root_two<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log(2.0L), ln_two<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log(log(2.0L)), ln_ln_two<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(1)/3, third<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(2)/3, twothirds<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.14159265358979323846264338327950288419716939937510L, pi_minus_three<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(4.L - 3.14159265358979323846264338327950288419716939937510L, four_minus_pi<RealType>(), tolerance);
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(pow((4 - 3.14159265358979323846264338327950288419716939937510L), 1.5L)), pow23_four_minus_pi<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(exp(-0.5L)), exp_minus_half<RealType>(), tolerance);
-#else
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(pow((4 - 3.14159265358979323846264338327950288419716939937510), 1.5)), pow23_four_minus_pi<RealType>(), tolerance);
- BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(exp(-0.5)), exp_minus_half<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((4 - 3.14159265358979323846264338327950288419716939937510L), 1.5L), pow23_four_minus_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510L), 2.71828182845904523536028747135266249775724709369995L), pi_pow_e<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510L), 0.33333333333333333333333333333333333333333333333333L), cbrt_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(exp(-0.5L), exp_minus_half<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow(2.71828182845904523536028747135266249775724709369995L, 3.14159265358979323846264338327950288419716939937510L), e_pow_pi<RealType>(), tolerance);
+
+
+#else // Only double, so no suffix L.
+ BOOST_CHECK_CLOSE_FRACTION(pow((4 - 3.14159265358979323846264338327950288419716939937510), 1.5), pow23_four_minus_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510), 2.71828182845904523536028747135266249775724709369995), pi_pow_e<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510), 0.33333333333333333333333333333333333333333333333333), cbrt_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(exp(-0.5), exp_minus_half<RealType>(), tolerance);
+#endif
+ // Rational fractions.
+ BOOST_CHECK_CLOSE_FRACTION(0.333333333333333333333333333333333333333L, third<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.666666666666666666666666666666666666667L, two_thirds<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.75L, three_quarters<RealType>(), tolerance);
+ // Two and related.
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(2.L), root_two<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.L), root_three<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(2.L)/2, half_root_two<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log(2.L), ln_two<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log(log(2.0L)), ln_ln_two<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(log(4.0L)), root_ln_four<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1/sqrt(2.0L), one_div_root_two<RealType>(), tolerance);
+
+ // pi.
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L, pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L/2, half_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L/3, third_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L/6, sixth_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(2 * 3.14159265358979323846264338327950288419716939937510L, two_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3 * 3.14159265358979323846264338327950288419716939937510L / 4, three_quarters_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(4 * 3.14159265358979323846264338327950288419716939937510L / 3, four_thirds_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1 / (2 * 3.14159265358979323846264338327950288419716939937510L), one_div_two_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L), root_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L / 2), root_half_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(2 * 3.14159265358979323846264338327950288419716939937510L), root_two_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1 / sqrt(3.14159265358979323846264338327950288419716939937510L), one_div_root_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1 / sqrt(2 * 3.14159265358979323846264338327950288419716939937510L), one_div_root_two_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(1. / 3.14159265358979323846264338327950288419716939937510L), root_one_div_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L - 3.L, pi_minus_three<RealType>(), tolerance * 2 ); // tolerance * 2 because of cancellation loss.
+ BOOST_CHECK_CLOSE_FRACTION(4.L - 3.14159265358979323846264338327950288419716939937510L, four_minus_pi<RealType>(), tolerance );
+ // BOOST_CHECK_CLOSE_FRACTION(pow((4 - 3.14159265358979323846264338327950288419716939937510L), 1.5L), pow23_four_minus_pi<RealType>(), tolerance); See above.
+ //
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510L), 2.71828182845904523536028747135266249775724709369995L), pi_pow_e<RealType>(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L, pi_sqr<RealType>(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L/6, pi_sqr_div_six<RealType>(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L, pi_cubed<RealType>(), tolerance); // See above.
+
+ // BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L, cbrt_pi<RealType>(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(cbrt_pi<RealType>() * cbrt_pi<RealType>() * cbrt_pi<RealType>(), pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION((1)/cbrt_pi<RealType>(), one_div_cbrt_pi<RealType>(), tolerance);
+
+ // Euler
+ BOOST_CHECK_CLOSE_FRACTION(2.71828182845904523536028747135266249775724709369995L, e<RealType>(), tolerance);
+
+ //BOOST_CHECK_CLOSE_FRACTION(exp(-0.5L), exp_minus_half<RealType>(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(pow(e<RealType>(), pi<RealType>()), e_pow_pi<RealType>(), tolerance); // See also above.
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(e<RealType>()), root_e<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log10(e<RealType>()), log10_e<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1/log10(e<RealType>()), one_div_log10_e<RealType>(), tolerance);
+
+ // Trigonmetric
+ BOOST_CHECK_CLOSE_FRACTION(pi<RealType>()/180, degree<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(180 / pi<RealType>(), radian<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sin(1.L), sin_one<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cos(1.L), cos_one<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sinh(1.L), sinh_one<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cosh(1.L), cosh_one<RealType>(), tolerance);
+
+ // Phi
+ BOOST_CHECK_CLOSE_FRACTION((1.L + sqrt(5.L)) /2, phi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log((1.L + sqrt(5.L)) /2), ln_phi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1.L / log((1.L + sqrt(5.L)) /2), one_div_ln_phi<RealType>(), tolerance);
+
+ //Euler's Gamma
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992L, euler<RealType>(), tolerance); // (sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(1.L/ 0.57721566490153286060651209008240243104215933593992L, one_div_euler<RealType>(), tolerance); // (from sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992L * 0.57721566490153286060651209008240243104215933593992L, euler_sqr<RealType>(), tolerance); // (from sequence A001620 in OEIS).
+
+ // Misc
+ BOOST_CHECK_CLOSE_FRACTION(1.644934066848226436472415166646025189218949901206L, zeta_two<RealType>(), tolerance); // A013661 as a constant (usually base 10) in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.20205690315959428539973816151144999076498629234049888179227L, zeta_three<RealType>(), tolerance); // (sequence A002117 in OEIS)
+ BOOST_CHECK_CLOSE_FRACTION(.91596559417721901505460351493238411077414937428167213L, catalan<RealType>(), tolerance); // A006752 as a constant in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.1395470994046486574927930193898461120875997958365518247216557100852480077060706857071875468869385150L, extreme_value_skewness<RealType>(), tolerance); // Mathematica: N[12 Sqrt[6] Zeta[3]/Pi^3, 1101]
+ BOOST_CHECK_CLOSE_FRACTION(0.6311106578189371381918993515442277798440422031347194976580945856929268196174737254599050270325373067L, rayleigh_skewness<RealType>(), tolerance); // Mathematica: N[2 Sqrt[Pi] (Pi - 3)/((4 - Pi)^(3/2)), 1100]
+ BOOST_CHECK_CLOSE_FRACTION(2.450893006876380628486604106197544154e-01L, rayleigh_kurtosis_excess<RealType>(), tolerance * 2);
+ BOOST_CHECK_CLOSE_FRACTION(2.68545200106530644530971483548179569382038229399446295305115234555721885953715200280114117493184769799515L, khinchin<RealType>(), tolerance ); // A002210 as a constant https://oeis.org/A002210/constant
+ BOOST_CHECK_CLOSE_FRACTION(1.2824271291006226368753425688697917277676889273250011L, glaisher<RealType>(), tolerance ); // https://oeis.org/A074962/constant
+
+ //
+ // Last of all come the test cases that behave differently if we're calculating the constants on the fly:
+ //
+ if(boost::math::tools::digits<RealType>() > boost::math::constants::max_string_digits)
+ {
+ // This suffers from cancellation error, so increased tolerance:
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(4. - 3.14159265358979323846264338327950288419716939937510L), four_minus_pi<RealType>(), tolerance * 3);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(0.14159265358979323846264338327950288419716939937510L), pi_minus_three<RealType>(), tolerance * 3);
+ }
+ else
+ {
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(4. - 3.14159265358979323846264338327950288419716939937510L), four_minus_pi<RealType>(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<RealType>(0.14159265358979323846264338327950288419716939937510L), pi_minus_three<RealType>(), tolerance);
+ }
+} // template <class RealType>void test_spots(RealType)
+
+void test_float_spots()
+{
+ // Basic sanity checks for constants in boost::math::float_constants::
+ // for example: boost::math::float_constants::pi
+ // (rather than boost::math::constants::pi<float>() ).
+
+ float tolerance = boost::math::tools::epsilon<float>() * 2;
+
+ using namespace boost::math::float_constants;
+ BOOST_MATH_STD_USING
+
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F), pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(3.14159265358979323846264338327950288419716939937510F)), root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(3.14159265358979323846264338327950288419716939937510F/2)), root_half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(3.14159265358979323846264338327950288419716939937510F * 2)), root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(log(4.0F))), root_ln_four, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(2.71828182845904523536028747135266249775724709369995F), e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(0.5), half, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(0.57721566490153286060651209008240243104259335F), euler, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(2.0F)), root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(log(2.0F)), ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(log(log(2.0F))), ln_ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(1)/3, third, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(2)/3, twothirds, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(0.14159265358979323846264338327950288419716939937510F), pi_minus_three, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(4.F - 3.14159265358979323846264338327950288419716939937510F), four_minus_pi, tolerance);
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow((4 - 3.14159265358979323846264338327950288419716939937510F), 1.5F)), pow23_four_minus_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow((3.14159265358979323846264338327950288419716939937510F), 2.71828182845904523536028747135266249775724709369995F)), pi_pow_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow((3.14159265358979323846264338327950288419716939937510F), 0.33333333333333333333333333333333333333333333333333F)), cbrt_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(exp(-0.5F)), exp_minus_half, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow(2.71828182845904523536028747135266249775724709369995F, 3.14159265358979323846264338327950288419716939937510F)), e_pow_pi, tolerance);
+
+
+#else // Only double, so no suffix F.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow((4 - 3.14159265358979323846264338327950288419716939937510), 1.5)), pow23_four_minus_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow((3.14159265358979323846264338327950288419716939937510), 2.71828182845904523536028747135266249775724709369995)), pi_pow_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow((3.14159265358979323846264338327950288419716939937510), 0.33333333333333333333333333333333333333333333333333)), cbrt_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(exp(-0.5)), exp_minus_half, tolerance);
+#endif
+ // Rational fractions.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(0.333333333333333333333333333333333333333F), third, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(0.666666666666666666666666666666666666667F), two_thirds, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(0.75F), three_quarters, tolerance);
+ // Two and related.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(2.F)), root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(3.F)), root_three, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(2.F)/2), half_root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(log(2.F)), ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(log(log(2.0F))), ln_ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(log(4.0F))), root_ln_four, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(1/sqrt(2.0F)), one_div_root_two, tolerance);
+
+ // pi.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F), pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F/2), half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F/3), third_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F/6), sixth_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(2 * 3.14159265358979323846264338327950288419716939937510F), two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3 * 3.14159265358979323846264338327950288419716939937510F / 4), three_quarters_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(4 * 3.14159265358979323846264338327950288419716939937510F / 3), four_thirds_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(1 / (2 * 3.14159265358979323846264338327950288419716939937510F)), one_div_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(3.14159265358979323846264338327950288419716939937510F)), root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(3.14159265358979323846264338327950288419716939937510F / 2)), root_half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(2 * 3.14159265358979323846264338327950288419716939937510F)), root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(1 / sqrt(3.14159265358979323846264338327950288419716939937510F)), one_div_root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(1 / sqrt(2 * 3.14159265358979323846264338327950288419716939937510F)), one_div_root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(sqrt(1. / 3.14159265358979323846264338327950288419716939937510F)), root_one_div_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510L - 3.L), pi_minus_three, tolerance * 2 ); // tolerance * 2 because of cancellation loss.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(4.L - 3.14159265358979323846264338327950288419716939937510L), four_minus_pi, tolerance );
+ // BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow((4 - 3.14159265358979323846264338327950288419716939937510F), 1.5F)), pow23_four_minus_pi, tolerance); See above.
+ //
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(pow((3.14159265358979323846264338327950288419716939937510F), 2.71828182845904523536028747135266249775724709369995F)), pi_pow_e, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F * 3.14159265358979323846264338327950288419716939937510F), pi_sqr, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F * 3.14159265358979323846264338327950288419716939937510F/6), pi_sqr_div_six, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F * 3.14159265358979323846264338327950288419716939937510F * 3.14159265358979323846264338327950288419716939937510F), pi_cubed, tolerance); // See above.
+
+ // BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(3.14159265358979323846264338327950288419716939937510F * 3.14159265358979323846264338327950288419716939937510F), cbrt_pi, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(cbrt_pi * cbrt_pi * cbrt_pi, pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION((static_cast<float>(1)/cbrt_pi), one_div_cbrt_pi, tolerance);
+
+ // Euler
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(2.71828182845904523536028747135266249775724709369995F), e, tolerance);
+
+ //BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(exp(-0.5F)), exp_minus_half, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(pow(e, pi), e_pow_pi, tolerance); // See also above.
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(e), root_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log10(e), log10_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<float>(1)/log10(e), one_div_log10_e, tolerance);
+
+ // Trigonmetric
+ BOOST_CHECK_CLOSE_FRACTION(pi/180, degree, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(180 / pi, radian, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sin(1.F), sin_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cos(1.F), cos_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sinh(1.F), sinh_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cosh(1.F), cosh_one, tolerance);
+
+ // Phi
+ BOOST_CHECK_CLOSE_FRACTION((1.F + sqrt(5.F)) /2, phi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log((1.F + sqrt(5.F)) /2), ln_phi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1.F / log((1.F + sqrt(5.F)) /2), one_div_ln_phi, tolerance);
+
+ // Euler's Gamma
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992F, euler, tolerance); // (sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(1.F/ 0.57721566490153286060651209008240243104215933593992F, one_div_euler, tolerance); // (from sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992F * 0.57721566490153286060651209008240243104215933593992F, euler_sqr, tolerance); // (from sequence A001620 in OEIS).
+
+ // Misc
+ BOOST_CHECK_CLOSE_FRACTION(1.644934066848226436472415166646025189218949901206F, zeta_two, tolerance); // A013661 as a constant (usually base 10) in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.20205690315959428539973816151144999076498629234049888179227F, zeta_three, tolerance); // (sequence A002117 in OEIS)
+ BOOST_CHECK_CLOSE_FRACTION(.91596559417721901505460351493238411077414937428167213F, catalan, tolerance); // A006752 as a constant in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.1395470994046486574927930193898461120875997958365518247216557100852480077060706857071875468869385150F, extreme_value_skewness, tolerance); // Mathematica: N[12 Sqrt[6] Zeta[3]/Pi^3, 1101]
+ BOOST_CHECK_CLOSE_FRACTION(0.6311106578189371381918993515442277798440422031347194976580945856929268196174737254599050270325373067F, rayleigh_skewness, tolerance); // Mathematica: N[2 Sqrt[Pi] (Pi - 3)/((4 - Pi)^(3/2)), 1100]
+ BOOST_CHECK_CLOSE_FRACTION(2.450893006876380628486604106197544154e-01F, rayleigh_kurtosis_excess, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(2.68545200106530644530971483548179569382038229399446295305115234555721885953715200280114117493184769799515F, khinchin, tolerance ); // A002210 as a constant https://oeis.org/A002210/constant
+ BOOST_CHECK_CLOSE_FRACTION(1.2824271291006226368753425688697917277676889273250011F, glaisher, tolerance ); // https://oeis.org/A074962/constant
+
+} // template <class RealType>void test_spots(RealType)
+
+void test_double_spots()
+{
+ // Basic sanity checks for constants in boost::math::double_constants::
+ // for example: boost::math::double_constants::pi
+ // (rather than boost::math::constants::pi<double>() ).
+
+ double tolerance = boost::math::tools::epsilon<double>() * 2;
+
+ using namespace boost::math::double_constants;
+ BOOST_MATH_STD_USING
+
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510), pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(3.14159265358979323846264338327950288419716939937510)), root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(3.14159265358979323846264338327950288419716939937510/2)), root_half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(3.14159265358979323846264338327950288419716939937510 * 2)), root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(log(4.0))), root_ln_four, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(2.71828182845904523536028747135266249775724709369995), e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(0.5), half, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(0.57721566490153286060651209008240243104259335), euler, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(2.0)), root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(log(2.0)), ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(log(log(2.0))), ln_ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(1)/3, third, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(2)/3, twothirds, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(0.14159265358979323846264338327950288419716939937510), pi_minus_three, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(4. - 3.14159265358979323846264338327950288419716939937510), four_minus_pi, tolerance);
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow((4 - 3.14159265358979323846264338327950288419716939937510), 1.5)), pow23_four_minus_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow((3.14159265358979323846264338327950288419716939937510), 2.71828182845904523536028747135266249775724709369995)), pi_pow_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow((3.14159265358979323846264338327950288419716939937510), 0.33333333333333333333333333333333333333333333333333)), cbrt_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(exp(-0.5)), exp_minus_half, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow(2.71828182845904523536028747135266249775724709369995, 3.14159265358979323846264338327950288419716939937510)), e_pow_pi, tolerance);
+
+
+#else // Only double, so no suffix .
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow((4 - 3.14159265358979323846264338327950288419716939937510), 1.5)), pow23_four_minus_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow((3.14159265358979323846264338327950288419716939937510), 2.71828182845904523536028747135266249775724709369995)), pi_pow_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow((3.14159265358979323846264338327950288419716939937510), 0.33333333333333333333333333333333333333333333333333)), cbrt_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(exp(-0.5)), exp_minus_half, tolerance);
#endif
+ // Rational fractions.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(0.333333333333333333333333333333333333333), third, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(0.666666666666666666666666666666666666667), two_thirds, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(0.75), three_quarters, tolerance);
+ // Two and related.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(2.)), root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(3.)), root_three, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(2.)/2), half_root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(log(2.)), ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(log(log(2.0))), ln_ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(log(4.0))), root_ln_four, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(1/sqrt(2.0)), one_div_root_two, tolerance);
+
+ // pi.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510), pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510/2), half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510/3), third_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510/6), sixth_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(2 * 3.14159265358979323846264338327950288419716939937510), two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3 * 3.14159265358979323846264338327950288419716939937510 / 4), three_quarters_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(4 * 3.14159265358979323846264338327950288419716939937510 / 3), four_thirds_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(1 / (2 * 3.14159265358979323846264338327950288419716939937510)), one_div_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(3.14159265358979323846264338327950288419716939937510)), root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(3.14159265358979323846264338327950288419716939937510 / 2)), root_half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(2 * 3.14159265358979323846264338327950288419716939937510)), root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(1 / sqrt(3.14159265358979323846264338327950288419716939937510)), one_div_root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(1 / sqrt(2 * 3.14159265358979323846264338327950288419716939937510)), one_div_root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(sqrt(1. / 3.14159265358979323846264338327950288419716939937510)), root_one_div_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510 - 3.), pi_minus_three, tolerance * 2 ); // tolerance * 2 because of cancellation loss.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(4. - 3.14159265358979323846264338327950288419716939937510), four_minus_pi, tolerance );
+ // BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow((4 - 3.14159265358979323846264338327950288419716939937510), 1.5)), pow23_four_minus_pi, tolerance); See above.
+ //
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(pow((3.14159265358979323846264338327950288419716939937510), 2.71828182845904523536028747135266249775724709369995)), pi_pow_e, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510 * 3.14159265358979323846264338327950288419716939937510), pi_sqr, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510 * 3.14159265358979323846264338327950288419716939937510/6), pi_sqr_div_six, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510 * 3.14159265358979323846264338327950288419716939937510 * 3.14159265358979323846264338327950288419716939937510), pi_cubed, tolerance); // See above.
+
+ // BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(3.14159265358979323846264338327950288419716939937510 * 3.14159265358979323846264338327950288419716939937510), cbrt_pi, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(cbrt_pi * cbrt_pi * cbrt_pi, pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION((static_cast<double>(1)/cbrt_pi), one_div_cbrt_pi, tolerance);
+
+ // Euler
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(2.71828182845904523536028747135266249775724709369995), e, tolerance);
+
+ //BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(exp(-0.5)), exp_minus_half, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(pow(e, pi), e_pow_pi, tolerance); // See also above.
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(e), root_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log10(e), log10_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<double>(1)/log10(e), one_div_log10_e, tolerance);
+
+ // Trigonmetric
+ BOOST_CHECK_CLOSE_FRACTION(pi/180, degree, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(180 / pi, radian, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sin(1.), sin_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cos(1.), cos_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sinh(1.), sinh_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cosh(1.), cosh_one, tolerance);
+
+ // Phi
+ BOOST_CHECK_CLOSE_FRACTION((1. + sqrt(5.)) /2, phi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log((1. + sqrt(5.)) /2), ln_phi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1. / log((1. + sqrt(5.)) /2), one_div_ln_phi, tolerance);
+
+ //Euler's Gamma
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992, euler, tolerance); // (sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(1./ 0.57721566490153286060651209008240243104215933593992, one_div_euler, tolerance); // (from sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992 * 0.57721566490153286060651209008240243104215933593992, euler_sqr, tolerance); // (from sequence A001620 in OEIS).
+
+ // Misc
+ BOOST_CHECK_CLOSE_FRACTION(1.644934066848226436472415166646025189218949901206, zeta_two, tolerance); // A013661 as a constant (usually base 10) in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.20205690315959428539973816151144999076498629234049888179227, zeta_three, tolerance); // (sequence A002117 in OEIS)
+ BOOST_CHECK_CLOSE_FRACTION(.91596559417721901505460351493238411077414937428167213, catalan, tolerance); // A006752 as a constant in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.1395470994046486574927930193898461120875997958365518247216557100852480077060706857071875468869385150, extreme_value_skewness, tolerance); // Mathematica: N[12 Sqrt[6] Zeta[3]/Pi^3, 1101]
+ BOOST_CHECK_CLOSE_FRACTION(0.6311106578189371381918993515442277798440422031347194976580945856929268196174737254599050270325373067, rayleigh_skewness, tolerance); // Mathematica: N[2 Sqrt[Pi] (Pi - 3)/((4 - Pi)^(3/2)), 1100]
+ BOOST_CHECK_CLOSE_FRACTION(2.450893006876380628486604106197544154e-01, rayleigh_kurtosis_excess, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(2.68545200106530644530971483548179569382038229399446295305115234555721885953715200280114117493184769799515, khinchin, tolerance ); // A002210 as a constant https://oeis.org/A002210/constant
+ BOOST_CHECK_CLOSE_FRACTION(1.2824271291006226368753425688697917277676889273250011, glaisher, tolerance ); // https://oeis.org/A074962/constant
} // template <class RealType>void test_spots(RealType)
+void test_long_double_spots()
+{
+ // Basic sanity checks for constants in boost::math::long double_constants::
+ // for example: boost::math::long_double_constants::pi
+ // (rather than boost::math::constants::pi<long double>() ).
+
+ // All constants are tested here using at least long double precision
+ // with independent calculated or listed values,
+ // or calculations using long double (sometime a little less accurate).
+
+ long double tolerance = boost::math::tools::epsilon<long double>() * 2;
+
+ using namespace boost::math::long_double_constants;
+ BOOST_MATH_STD_USING
+
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L), pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(3.14159265358979323846264338327950288419716939937510L)), root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(3.14159265358979323846264338327950288419716939937510L/2)), root_half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(3.14159265358979323846264338327950288419716939937510L * 2)), root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(log(4.0L))), root_ln_four, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(2.71828182845904523536028747135266249775724709369995L), e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(0.5), half, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(0.57721566490153286060651209008240243104259335L), euler, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(2.0L)), root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(log(2.0L)), ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(log(log(2.0L))), ln_ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(1)/3, third, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(2)/3, twothirds, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(0.14159265358979323846264338327950288419716939937510L), pi_minus_three, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(4.L - 3.14159265358979323846264338327950288419716939937510L), four_minus_pi, tolerance);
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow((4 - 3.14159265358979323846264338327950288419716939937510L), 1.5L)), pow23_four_minus_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow((3.14159265358979323846264338327950288419716939937510L), 2.71828182845904523536028747135266249775724709369995L)), pi_pow_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow((3.14159265358979323846264338327950288419716939937510L), 0.33333333333333333333333333333333333333333333333333L)), cbrt_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(exp(-0.5L)), exp_minus_half, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow(2.71828182845904523536028747135266249775724709369995L, 3.14159265358979323846264338327950288419716939937510L)), e_pow_pi, tolerance);
+
+
+#else // Only double, so no suffix L.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow((4 - 3.14159265358979323846264338327950288419716939937510), 1.5)), pow23_four_minus_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow((3.14159265358979323846264338327950288419716939937510), 2.71828182845904523536028747135266249775724709369995)), pi_pow_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow((3.14159265358979323846264338327950288419716939937510), 0.33333333333333333333333333333333333333333333333333)), cbrt_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(exp(-0.5)), exp_minus_half, tolerance);
+#endif
+ // Rational fractions.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(0.333333333333333333333333333333333333333L), third, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(0.666666666666666666666666666666666666667L), two_thirds, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(0.75L), three_quarters, tolerance);
+ // Two and related.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(2.L)), root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(3.L)), root_three, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(2.L)/2), half_root_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(log(2.L)), ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(log(log(2.0L))), ln_ln_two, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(log(4.0L))), root_ln_four, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(1/sqrt(2.0L)), one_div_root_two, tolerance);
+
+ // pi.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L), pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L/2), half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L/3), third_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L/6), sixth_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(2 * 3.14159265358979323846264338327950288419716939937510L), two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3 * 3.14159265358979323846264338327950288419716939937510L / 4), three_quarters_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(4 * 3.14159265358979323846264338327950288419716939937510L / 3), four_thirds_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(1 / (2 * 3.14159265358979323846264338327950288419716939937510L)), one_div_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(3.14159265358979323846264338327950288419716939937510L)), root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(3.14159265358979323846264338327950288419716939937510L / 2)), root_half_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(2 * 3.14159265358979323846264338327950288419716939937510L)), root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(1 / sqrt(3.14159265358979323846264338327950288419716939937510L)), one_div_root_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(1 / sqrt(2 * 3.14159265358979323846264338327950288419716939937510L)), one_div_root_two_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(sqrt(1. / 3.14159265358979323846264338327950288419716939937510L)), root_one_div_pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L - 3.L), pi_minus_three, tolerance * 2 ); // tolerance * 2 because of cancellation loss.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(4.L - 3.14159265358979323846264338327950288419716939937510L), four_minus_pi, tolerance );
+ // BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow((4 - 3.14159265358979323846264338327950288419716939937510L), 1.5L)), pow23_four_minus_pi, tolerance); See above.
+ //
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(pow((3.14159265358979323846264338327950288419716939937510L), 2.71828182845904523536028747135266249775724709369995L)), pi_pow_e, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L), pi_sqr, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L/6), pi_sqr_div_six, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L), pi_cubed, tolerance); // See above.
+
+ // BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L), cbrt_pi, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(cbrt_pi * cbrt_pi * cbrt_pi, pi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION((static_cast<long double>(1)/cbrt_pi), one_div_cbrt_pi, tolerance);
+
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(6.366197723675813430755350534900574481378385829618257E-1L), two_div_pi, tolerance * 3); // 2/pi
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(7.97884560802865355879892119868763736951717262329869E-1L), root_two_div_pi, tolerance * 3); // sqrt(2/pi)
+
+ // Euler
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(2.71828182845904523536028747135266249775724709369995L), e, tolerance);
+
+ //BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(exp(-0.5L)), exp_minus_half, tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(pow(e, pi), e_pow_pi, tolerance); // See also above.
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(e), root_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log10(e), log10_e, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(1)/log10(e), one_div_log10_e, tolerance);
+
+ // Trigonmetric
+ BOOST_CHECK_CLOSE_FRACTION(pi/180, degree, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(180 / pi, radian, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sin(1.L), sin_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cos(1.L), cos_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sinh(1.L), sinh_one, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cosh(1.L), cosh_one, tolerance);
+
+ // Phi
+ BOOST_CHECK_CLOSE_FRACTION((1.L + sqrt(5.L)) /2, phi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log((1.L + sqrt(5.L)) /2), ln_phi, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1.L / log((1.L + sqrt(5.L)) /2), one_div_ln_phi, tolerance);
+
+ //Euler's Gamma
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992L, euler, tolerance); // (sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(1.L/ 0.57721566490153286060651209008240243104215933593992L, one_div_euler, tolerance); // (from sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992L * 0.57721566490153286060651209008240243104215933593992L, euler_sqr, tolerance); // (from sequence A001620 in OEIS).
+
+ // Misc
+ BOOST_CHECK_CLOSE_FRACTION(1.644934066848226436472415166646025189218949901206L, zeta_two, tolerance); // A013661 as a constant (usually base 10) in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.20205690315959428539973816151144999076498629234049888179227L, zeta_three, tolerance); // (sequence A002117 in OEIS)
+ BOOST_CHECK_CLOSE_FRACTION(.91596559417721901505460351493238411077414937428167213L, catalan, tolerance); // A006752 as a constant in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.1395470994046486574927930193898461120875997958365518247216557100852480077060706857071875468869385150L, extreme_value_skewness, tolerance); // Mathematica: N[12 Sqrt[6] Zeta[3]/Pi^3, 1101]
+ BOOST_CHECK_CLOSE_FRACTION(0.6311106578189371381918993515442277798440422031347194976580945856929268196174737254599050270325373067L, rayleigh_skewness, tolerance); // Mathematica: N[2 Sqrt[Pi] (Pi - 3)/((4 - Pi)^(3/2)), 1100]
+ BOOST_CHECK_CLOSE_FRACTION(2.450893006876380628486604106197544154e-01L, rayleigh_kurtosis_excess, tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(2.68545200106530644530971483548179569382038229399446295305115234555721885953715200280114117493184769799515L, khinchin, tolerance ); // A002210 as a constant https://oeis.org/A002210/constant
+ BOOST_CHECK_CLOSE_FRACTION(1.2824271291006226368753425688697917277676889273250011L, glaisher, tolerance ); // https://oeis.org/A074962/constant
+
+} // template <class RealType>void test_spots(RealType)
+
+template <class Policy>
+void test_real_concept_policy(const Policy&)
+{
+ // Basic sanity checks for constants using real_concept.
+ // Parameter Policy is used to control precision.
+
+ using boost::math::concepts::real_concept;
+
+ boost::math::concepts::real_concept tolerance = boost::math::tools::epsilon<real_concept>() * 2; // double
+ std::cout << "Tolerance for type " << typeid(real_concept).name() << " is " << tolerance << "." << std::endl;
+
+ //typedef typename boost::math::policies::precision<boost::math::concepts::real_concept, boost::math::policies::policy<> >::type t1;
+ // A precision of zero means we don't know what the precision of this type is until runtime.
+ //std::cout << "Precision for type " << typeid(boost::math::concepts::real_concept).name() << " is " << t1::value << "." << std::endl;
+
+ using namespace boost::math::constants;
+ BOOST_MATH_STD_USING
+
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L, (pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L), (root_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L/2), (root_half_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L * 2), (root_two_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(log(4.0L)), (root_ln_four<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(2.71828182845904523536028747135266249775724709369995L, (e<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.5, (half<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104259335L, (euler<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(2.0L), (root_two<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log(2.0L), (ln_two<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log(log(2.0L)), (ln_ln_two<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(1)/3, (third<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(static_cast<long double>(2)/3, (twothirds<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.14159265358979323846264338327950288419716939937510L, (pi_minus_three<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(4.L - 3.14159265358979323846264338327950288419716939937510L, (four_minus_pi<real_concept, Policy>)(), tolerance);
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ BOOST_CHECK_CLOSE_FRACTION(pow((4 - 3.14159265358979323846264338327950288419716939937510L), 1.5L), (pow23_four_minus_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510L), 2.71828182845904523536028747135266249775724709369995L), (pi_pow_e<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510L), 0.33333333333333333333333333333333333333333333333333L), (cbrt_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(exp(-0.5L), (exp_minus_half<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow(2.71828182845904523536028747135266249775724709369995L, 3.14159265358979323846264338327950288419716939937510L), (e_pow_pi<real_concept, Policy>)(), tolerance);
+
+
+#else // Only double, so no suffix L.
+ BOOST_CHECK_CLOSE_FRACTION(pow((4 - 3.14159265358979323846264338327950288419716939937510), 1.5), (pow23_four_minus_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510), 2.71828182845904523536028747135266249775724709369995), (pi_pow_e<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510), 0.33333333333333333333333333333333333333333333333333), (cbrt_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(exp(-0.5), (exp_minus_half<real_concept, Policy>)(), tolerance);
+#endif
+ // Rational fractions.
+ BOOST_CHECK_CLOSE_FRACTION(0.333333333333333333333333333333333333333L, (third<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.666666666666666666666666666666666666667L, (two_thirds<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(0.75L, (three_quarters<real_concept, Policy>)(), tolerance);
+ // Two and related.
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(2.L), (root_two<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.L), (root_three<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(2.L)/2, (half_root_two<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log(2.L), (ln_two<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log(log(2.0L)), (ln_ln_two<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(log(4.0L)), (root_ln_four<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1/sqrt(2.0L), (one_div_root_two<real_concept, Policy>)(), tolerance);
+
+ // pi.
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L, (pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L/2, (half_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L/3, (third_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L/6, (sixth_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(2 * 3.14159265358979323846264338327950288419716939937510L, (two_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3 * 3.14159265358979323846264338327950288419716939937510L / 4, (three_quarters_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(4 * 3.14159265358979323846264338327950288419716939937510L / 3, (four_thirds_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1 / (2 * 3.14159265358979323846264338327950288419716939937510L), (one_div_two_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L), (root_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(3.14159265358979323846264338327950288419716939937510L / 2), (root_half_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(2 * 3.14159265358979323846264338327950288419716939937510L), (root_two_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1 / sqrt(3.14159265358979323846264338327950288419716939937510L), (one_div_root_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1 / sqrt(2 * 3.14159265358979323846264338327950288419716939937510L), (one_div_root_two_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(1. / 3.14159265358979323846264338327950288419716939937510L), (root_one_div_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L - 3.L, (pi_minus_three<real_concept, Policy>)(), tolerance * 2 ); // tolerance * 2 because of cancellation loss.
+ BOOST_CHECK_CLOSE_FRACTION(4.L - 3.14159265358979323846264338327950288419716939937510L, (four_minus_pi<real_concept, Policy>)(), tolerance );
+ // BOOST_CHECK_CLOSE_FRACTION(pow((4 - 3.14159265358979323846264338327950288419716939937510L), 1.5L), (pow23_four_minus_pi<real_concept, Policy>)(), tolerance); See above.
+ //
+ BOOST_CHECK_CLOSE_FRACTION(pow((3.14159265358979323846264338327950288419716939937510L), 2.71828182845904523536028747135266249775724709369995L), (pi_pow_e<real_concept, Policy>)(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L, (pi_sqr<real_concept, Policy>)(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L/6, (pi_sqr_div_six<real_concept, Policy>)(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L, (pi_cubed<real_concept, Policy>)(), tolerance); // See above.
+
+ // BOOST_CHECK_CLOSE_FRACTION(3.14159265358979323846264338327950288419716939937510L * 3.14159265358979323846264338327950288419716939937510L, (cbrt_pi<real_concept, Policy>)(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION((cbrt_pi<real_concept, Policy>)() * (cbrt_pi<real_concept, Policy>)() * (cbrt_pi<real_concept, Policy>)(), (pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION((1)/(cbrt_pi<real_concept, Policy>)(), (one_div_cbrt_pi<real_concept, Policy>)(), tolerance);
+
+ // Euler
+ BOOST_CHECK_CLOSE_FRACTION(2.71828182845904523536028747135266249775724709369995L, (e<real_concept, Policy>)(), tolerance);
+
+ //BOOST_CHECK_CLOSE_FRACTION(exp(-0.5L), (exp_minus_half<real_concept, Policy>)(), tolerance); // See above.
+ BOOST_CHECK_CLOSE_FRACTION(pow(e<real_concept, Policy>(), (pi<real_concept, Policy>)()), (e_pow_pi<real_concept, Policy>)(), tolerance); // See also above.
+ BOOST_CHECK_CLOSE_FRACTION(sqrt(e<real_concept, Policy>()), (root_e<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log10(e<real_concept, Policy>()), (log10_e<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1/log10(e<real_concept, Policy>()), (one_div_log10_e<real_concept, Policy>)(), tolerance);
+
+ // Trigonmetric
+ BOOST_CHECK_CLOSE_FRACTION((pi<real_concept, Policy>)()/180, (degree<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(180 / (pi<real_concept, Policy>)(), (radian<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sin(1.L), (sin_one<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cos(1.L), (cos_one<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(sinh(1.L), (sinh_one<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(cosh(1.L), (cosh_one<real_concept, Policy>)(), tolerance);
+
+ // Phi
+ BOOST_CHECK_CLOSE_FRACTION((1.L + sqrt(5.L)) /2, (phi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(log((1.L + sqrt(5.L)) /2), (ln_phi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(1.L / log((1.L + sqrt(5.L)) /2), (one_div_ln_phi<real_concept, Policy>)(), tolerance);
+
+ //Euler's Gamma
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992L, (euler<real_concept, Policy>)(), tolerance); // (sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(1.L/ 0.57721566490153286060651209008240243104215933593992L, (one_div_euler<real_concept, Policy>)(), tolerance); // (from sequence A001620 in OEIS).
+ BOOST_CHECK_CLOSE_FRACTION(0.57721566490153286060651209008240243104215933593992L * 0.57721566490153286060651209008240243104215933593992L, (euler_sqr<real_concept, Policy>)(), tolerance); // (from sequence A001620 in OEIS).
+
+ // Misc
+ BOOST_CHECK_CLOSE_FRACTION(1.644934066848226436472415166646025189218949901206L, (zeta_two<real_concept, Policy>)(), tolerance); // A013661 as a constant (usually base 10) in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.20205690315959428539973816151144999076498629234049888179227L, (zeta_three<real_concept, Policy>)(), tolerance); // (sequence A002117 in OEIS)
+ BOOST_CHECK_CLOSE_FRACTION(.91596559417721901505460351493238411077414937428167213L, (catalan<real_concept, Policy>)(), tolerance); // A006752 as a constant in OEIS.
+ BOOST_CHECK_CLOSE_FRACTION(1.1395470994046486574927930193898461120875997958365518247216557100852480077060706857071875468869385150L, (extreme_value_skewness<real_concept, Policy>)(), tolerance); // Mathematica: N[12 Sqrt[6] Zeta[3]/Pi^3, 1101]
+ BOOST_CHECK_CLOSE_FRACTION(0.6311106578189371381918993515442277798440422031347194976580945856929268196174737254599050270325373067L, (rayleigh_skewness<real_concept, Policy>)(), tolerance); // Mathematica: N[2 Sqrt[Pi] (Pi - 3)/((4 - Pi)^(3/2)), 1100]
+ BOOST_CHECK_CLOSE_FRACTION(2.450893006876380628486604106197544154e-01L, (rayleigh_kurtosis_excess<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION(2.68545200106530644530971483548179569382038229399446295305115234555721885953715200280114117493184769799515L, (khinchin<real_concept, Policy>)(), tolerance ); // A002210 as a constant https://oeis.org/A002210/constant
+ BOOST_CHECK_CLOSE_FRACTION(1.2824271291006226368753425688697917277676889273250011L, (glaisher<real_concept, Policy>)(), tolerance ); // https://oeis.org/A074962/constant
+
+ //
+ // Last of all come the test cases that behave differently if we're calculating the constants on the fly:
+ //
+ if(boost::math::tools::digits<real_concept>() > boost::math::constants::max_string_digits)
+ {
+ // This suffers from cancellation error, so increased tolerance:
+ BOOST_CHECK_CLOSE_FRACTION((static_cast<real_concept>(4. - 3.14159265358979323846264338327950288419716939937510L)), (four_minus_pi<real_concept, Policy>)(), tolerance * 3);
+ BOOST_CHECK_CLOSE_FRACTION((static_cast<real_concept>(0.14159265358979323846264338327950288419716939937510L)), (pi_minus_three<real_concept, Policy>)(), tolerance * 3);
+ }
+ else
+ {
+ BOOST_CHECK_CLOSE_FRACTION((static_cast<real_concept>(4. - 3.14159265358979323846264338327950288419716939937510L)), (four_minus_pi<real_concept, Policy>)(), tolerance);
+ BOOST_CHECK_CLOSE_FRACTION((static_cast<real_concept>(0.14159265358979323846264338327950288419716939937510L)), (pi_minus_three<real_concept, Policy>)(), tolerance);
+ }
+
+} // template <class boost::math::concepts::real_concept>void test_spots(boost::math::concepts::real_concept)
+
int test_main(int, char* [])
{
// Basic sanity-check spot values.
- // (Parameter value, arbitrarily zero, only communicates the floating point type).
- test_spots(0.0F); // Test float. OK at decdigits = 0 tolerance = 0.0001 %
- test_spots(0.0); // Test double. OK at decdigits 7, tolerance = 1e07 %
+ test_float_spots(); // Test float_constants, like boost::math::float_constants::pi;
+ test_double_spots(); // Test double_constants.
+ test_long_double_spots(); // Test long_double_constants.
+
+ test_real_concept_policy(real_concept_policy_1());
+ test_real_concept_policy(real_concept_policy_2()); // Increased precision forcing construction from string.
+ test_real_concept_policy(boost::math::policies::policy<>()); // Default.
+
+ // (Parameter value, arbitrarily zero, only communicates the floating-point type).
+ test_spots(0.0F); // Test float.
+ test_spots(0.0); // Test double.
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_spots(0.0L); // Test long double.
#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0582))
test_spots(boost::math::concepts::real_concept(0.)); // Test real concept.
+ test_spots(boost::math::concepts::big_real_concept(0.)); // Test real concept.
#endif
#else
std::cout << "<note>The long double tests have been disabled on this platform "
@@ -80,14 +771,21 @@
Output:
-Autorun "i:\boost-06-05-03-1300\libs\math\test\Math_test\debug\test_constants.exe"
-Running 1 test case...
-*** No errors detected
-
-*/
-
-
-
+ 1 Feb 2012
+test_constants.cpp
+ test_constants.vcxproj -> J:\Cpp\MathToolkit\test\Math_test\Debug\test_constants.exe
+ Running 1 test case...
+ Tolerance for type class boost::math::concepts::real_concept is 4.44089e-016.
+ Tolerance for type class boost::math::concepts::real_concept is 4.44089e-016.
+ Tolerance for type class boost::math::concepts::real_concept is 4.44089e-016.
+ Tolerance for type float is 2.38419e-007.
+ Tolerance for type double is 4.44089e-016.
+ Tolerance for type long double is 4.44089e-016.
+ Tolerance for type class boost::math::concepts::real_concept is 4.44089e-016.
+ Tolerance for type class boost::math::concepts::big_real_concept is 1.33227e-014.
+
+ *** No errors detected
+*/
Modified: branches/quickbook-dev/libs/math/test/test_expint.cpp
==============================================================================
--- branches/quickbook-dev/libs/math/test/test_expint.cpp (original)
+++ branches/quickbook-dev/libs/math/test/test_expint.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -103,19 +103,12 @@
".*", 150, 50); // test function
}
add_expected_result(
- "Sun.*", // compiler
- ".*", // stdlib
- ".*", // platform
- "real_concept", // test type(s)
- ".*Ei.*", // test data group
- ".*", 150, 50); // test function
- add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
".*Ei.*", // test data group
- ".*", 50, 20); // test function
+ ".*", 150, 50); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
@@ -161,3 +154,4 @@
return 0;
}
+
Modified: branches/quickbook-dev/libs/math/test/test_nonfinite_trap.cpp
==============================================================================
--- branches/quickbook-dev/libs/math/test/test_nonfinite_trap.cpp (original)
+++ branches/quickbook-dev/libs/math/test/test_nonfinite_trap.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -5,23 +5,26 @@
// (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)
+// test_nonfinite_trap.cpp
+
#ifdef _MSC_VER
# pragma warning(disable : 4702)
#endif
#define BOOST_TEST_MAIN
-#include <locale>
-#include <sstream>
#include <boost/test/auto_unit_test.hpp>
-#include "almost_equal.ipp"
-#include "s_.ipp"
+#include "almost_equal.ipp" // Similar to BOOST_CLOSE_FRACTION.
+#include "s_.ipp" // To create test strings like std::basic_string<CharType> s = S_("0 -0");
#include <boost/math/special_functions/nonfinite_num_facets.hpp>
+#include <locale>
+#include <sstream>
+
namespace {
-// the anonymous namespace resolves ambiguities on platforms
-// with fpclassify etc functions at global scope
+// Using an anonymous namespace resolves ambiguities on platforms
+// with fpclassify etc functions at global scope.
using namespace boost::math;
using boost::math::signbit;
@@ -233,3 +236,4 @@
//------------------------------------------------------------------------------
} // anonymous namespace
+
Modified: branches/quickbook-dev/libs/math/test/test_signed_zero.cpp
==============================================================================
--- branches/quickbook-dev/libs/math/test/test_signed_zero.cpp (original)
+++ branches/quickbook-dev/libs/math/test/test_signed_zero.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,89 +1,219 @@
-// Copyright (c) 2006 Johan Rade
-// Copyright (c) 2011 Paul A. Bristow To incorporate into Boost.Math
+// Copyright 2006 Johan Rade
+// Copyright 2011 Paul A. Bristow To incorporate into Boost.Math
+// Copyright 2012 Paul A. Bristow with new tests.
// Distributed under 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)
#ifdef _MSC_VER
-# pragma warning(disable : 4702) // Unreachable code.
-# pragma warning(disable : 4127) // expression is constant.
+# pragma warning(disable : 4127) // Expression is constant.
#endif
#define BOOST_TEST_MAIN
+#include <boost/test/auto_unit_test.hpp>
+#include <boost/math/special_functions/nonfinite_num_facets.hpp>
+#include "s_.ipp" // To create test strings like std::basic_string<CharType> s = S_("0 -0");
+
#include <iomanip>
#include <locale>
#include <sstream>
+#include <ostream>
#include <limits>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/math/special_functions/nonfinite_num_facets.hpp>
-#include "almost_equal.ipp"
-#include "s_.ipp"
-
namespace {
-// the anonymous namespace resolves ambiguities on platforms
-// with fpclassify etc functions at global scope
+ // Using an anonymous namespace resolves ambiguities on platforms
+ // with fpclassify etc functions at global scope.
-using namespace boost::math;
-using boost::math::signbit;
-using boost::math::changesign;
-using boost::math::isnan;
+ using namespace boost::math;
+ using boost::math::signbit;
+ using boost::math::changesign;
+ using boost::math::isnan;
+
+ //------------------------------------------------------------------------------
+
+ template<class CharType, class ValType> void signed_zero_test_impl();
+ // Loopback tests using all built-in char and floating-point types.
+
+ BOOST_AUTO_TEST_CASE(signed_zero_test)
+ {
+ std::cout
+ << "BuildInfo:" << '\n'
+ << " platform " << BOOST_PLATFORM << '\n'
+ << " compiler " << BOOST_COMPILER << '\n'
+ << " STL " << BOOST_STDLIB << '\n'
+ << " Boost version " << BOOST_VERSION/100000 << "."
+ << BOOST_VERSION/100 % 1000 << "."
+ << BOOST_VERSION % 100
+ << std::endl;
-//------------------------------------------------------------------------------
-
-template<class CharType, class ValType> void signed_zero_test_impl();
-
-BOOST_AUTO_TEST_CASE(signed_zero_test)
-{
signed_zero_test_impl<char, float>();
signed_zero_test_impl<char, double>();
signed_zero_test_impl<char, long double>();
signed_zero_test_impl<wchar_t, float>();
signed_zero_test_impl<wchar_t, double>();
signed_zero_test_impl<wchar_t, long double>();
-}
+ }
-template<class CharType, class ValType> void signed_zero_test_impl()
-{
+ template<class CharType, class ValType> void signed_zero_test_impl()
+ {
- if (signbit(static_cast<CharType>(-1e-6f)/(std::numeric_limits<CharType>::max)()) != -0)
- {
- BOOST_TEST_MESSAGE("Signed zero is not supported on this platform.");
- return;
- }
+ if (signbit(static_cast<CharType>(-1e-6f) / (std::numeric_limits<CharType>::max)()) != -0)
+ {
+ BOOST_TEST_MESSAGE("Signed zero is not supported on this platform!");
+ return;
+ }
std::locale old_locale;
std::locale tmp_locale(
- old_locale, new nonfinite_num_put<CharType>(signed_zero));
+ old_locale, new nonfinite_num_put<CharType>(signed_zero));
std::locale new_locale(tmp_locale, new nonfinite_num_get<CharType>);
std::basic_stringstream<CharType> ss;
ss.imbue(new_locale);
- ValType a1 = static_cast<ValType>(0);
- ValType a2 = (changesign)(static_cast<ValType>(0));
- BOOST_CHECK(!(signbit)(a1));
+ std::basic_string<CharType> null = S_("");
+
+ std::basic_string<CharType> s1 = S_("123");
+ ss << s1 << std::endl;
+ ss.str(null);
+
+
+ BOOST_CHECK(ss.str() == null); //
+
+ ValType a1 = static_cast<ValType>(0); // zero.
+ ValType a2 = (changesign)(static_cast<ValType>(0)); // negative signed zero.
+ BOOST_CHECK(!(signbit)(a1)); //
BOOST_CHECK((signbit)(a2));
ss << a1 << ' ' << a2;
- std::basic_string<CharType> s = S_("0 -0");
+ std::basic_string<CharType> s = S_("0 -0"); // Expected.
BOOST_CHECK(ss.str() == s);
ValType b1, b2;
- ss >> b1 >> b2;
+ ss >> b1 >> b2; // Read back in.
BOOST_CHECK(b1 == a1);
BOOST_CHECK(b2 == a2);
BOOST_CHECK(!(signbit)(b1));
BOOST_CHECK((signbit)(b2));
BOOST_CHECK(ss.rdstate() == std::ios_base::eofbit);
-}
+ } // template<class CharType, class ValType> void signed_zero_test_impl()
+
+ // Checking output of types char using first default & then using signed_zero flag.
+#define CHECKOUT(manips, expected)\
+ {\
+ {\
+ std::locale old_locale;\
+ std::locale tmp_locale(old_locale, new nonfinite_num_put<char>(0));\
+ std::locale new_locale(tmp_locale, new nonfinite_num_get<char>);\
+ std::ostringstream ss;\
+ ss.imbue(new_locale);\
+ ss << manips;\
+ std::basic_string<char> s = S_(expected);\
+ BOOST_CHECK_EQUAL(ss.str(), s);\
+ }\
+ {\
+ std::locale old_locale;\
+ std::locale tmp_locale(old_locale, new nonfinite_num_put<char>(signed_zero));\
+ std::locale new_locale(tmp_locale, new nonfinite_num_get<char>);\
+ std::ostringstream ss;\
+ ss.imbue(new_locale);\
+ ss << manips;\
+ std::basic_string<char> s = S_(expected);\
+ BOOST_CHECK_EQUAL(ss.str(), s);\
+ }\
+ }\
+
+ BOOST_AUTO_TEST_CASE(misc_output_tests)
+ { // Tests of output using a variety of output options.
+
+ // Positive zero.
+ CHECKOUT(0, "0"); // integer zero.
+ CHECKOUT(0., "0"); // double zero.
+ CHECKOUT(std::setw(2) << 0., " 0");
+ CHECKOUT(std::setw(4) << 0., " 0");
+ CHECKOUT(std::right << std::setw(4) << 0., " 0");
+ CHECKOUT(std::left << std::setw(4) << 0., "0 ");
+ CHECKOUT(std::setw(4) << std::setfill('*') << 0., "***0");
+ CHECKOUT(std::setw(4) << std::internal << std::setfill('*') << 0., "***0"); // left adjust sign and right adjust value.
+ CHECKOUT(std::showpos << std::setw(4) << std::internal << std::setfill('*') << 0., "+**0"); // left adjust sign and right adjust value.
+ CHECKOUT(std::showpoint << 0., "0.000000"); // std::setprecision(6)
+ // or 0.00000
+ CHECKOUT(std::setprecision(2) << std::showpoint << 0., "0.00");
+ // or 0.0
+
+ CHECKOUT(std::fixed << std::setw(5) << std::setfill('0') << std::setprecision(2) << 0., "00.00");
+ CHECKOUT(std::fixed << std::setw(6) << std::setfill('0') << std::setprecision(2) << 0., "000.00");
+ CHECKOUT(std::fixed << std::setw(6) << std::setfill('0') << std::setprecision(3) << 0., "00.000");
+ CHECKOUT(std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(3) << 0., "*0.000");
+ CHECKOUT(std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(2) << std::left << 0.0, "0.00**");
+
+ CHECKOUT(std::showpos << 0., "+0");
+ CHECKOUT(std::showpos << std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(2) << std::left << 0.0, "+0.00*");
+ CHECKOUT(std::scientific << std::showpoint << std::setw(10) << std::setfill('*') << std::setprecision(1) << std::left << 0., "0.0e+000**"); // or 0.0e+00***
+ CHECKOUT(std::fixed << std::showpoint << std::setw(6) << std::setfill('*') << std::setprecision(3) << std::left << 0., "0.000*");
+
+ double nz = (changesign)(static_cast<double>(0)); // negative signed zero.
+ CHECKOUT(nz, "-0");
+ // CHECKOUT(std::defaultfloat << nz, "-0"); Only for C++11
+ CHECKOUT(std::showpos << nz, "-0"); // Ignore showpos because negative.
+ CHECKOUT(std::setw(2) << nz, "-0");
+ CHECKOUT(std::setw(4) << nz, " -0");
+ CHECKOUT(std::right << std::setw(4) << nz, " -0");
+ CHECKOUT(std::left << std::setw(4) << nz, "-0 ");
+ CHECKOUT(std::setw(4) << std::setfill('*') << nz, "**-0");
+ CHECKOUT(std::setw(4) << std::internal << std::setfill('*') << nz, "-**0"); // Use std::internal to left adjust sign and right adjust value.
+ CHECKOUT(std::showpos << std::setw(4) << std::internal << std::setfill('*') << nz, "-**0");
+
+ CHECKOUT(std::fixed << std::setw(5) << std::setfill('0') << std::setprecision(2) << 0., "00.00");
+ CHECKOUT(std::fixed << std::setw(6) << std::setfill('0') << std::setprecision(2) << 0., "000.00");
+ CHECKOUT(std::fixed << std::setw(6) << std::setfill('0') << std::setprecision(3) << 0., "00.000");
+ CHECKOUT(std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(3) << 0., "*0.000");
+ CHECKOUT(std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(2) << std::left << 0.0, "0.00**");
+
+ CHECKOUT(std::setprecision(2) << nz, "-0"); // No showpoint, so no decimal point nor trailing zeros.
+ CHECKOUT(std::setprecision(2) << std::showpoint << nz, "-0.00"); // or "-0.0"
+ CHECKOUT(std::fixed << std::showpoint << std::setw(6) << std::setfill('*') << std::setprecision(3) << std::left << 0., "0.000*");
+ CHECKOUT(std::scientific << std::showpoint << std::setw(10) << std::setfill('*') << std::setprecision(1) << std::left << nz, "-0.0e+000*"); // -0.0e+00**
+
+ CHECKOUT(std::setw(1) << std::setprecision(3) << std::showpoint << nz, "-0.000"); // Not enough width for precision overflows width. or "-0.00"
+
+ // Non zero values.
+
+ CHECKOUT(std::showpos << std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(2) << std::left << 42., "+42.00");
+ CHECKOUT(std::showpos << std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(2) << std::left << 4.2, "+4.20*");
+ CHECKOUT(std::showpos << std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(2) << std::left << 1.22, "+1.22*");
+ CHECKOUT(std::showpos << std::fixed << std::setw(6) << std::setfill('*') << std::setprecision(2) << std::left << 0.12, "+0.12*");
-//------------------------------------------------------------------------------
+ CHECKOUT(std::setprecision(4) << std::showpoint << 1.2, "1.200");
+
+ }
} // anonymous namespace
+
+/*
+
+Output:
+
+test_signed_zero.cpp
+ Running 2 test cases...
+ Platform: Win32
+ Compiler: Microsoft Visual C++ version 10.0
+ STL : Dinkumware standard library version 520
+ Boost : 1.49.0
+ Entering test suite "Master Test Suite"
+ Entering test case "signed_zero_test"
+ Leaving test case "signed_zero_test"; testing time: 2ms
+ Entering test case "misc_output_tests"
+ Leaving test case "misc_output_tests"; testing time: 15ms
+ Leaving test suite "Master Test Suite"
+
+ *** No errors detected
+
+*/
+
Modified: branches/quickbook-dev/libs/move/doc/html/images/blank.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/caution.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/draft.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/home.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/important.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/next.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/note.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/prev.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/tip.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/toc-blank.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/toc-minus.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/toc-plus.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/move/doc/html/images/warning.png
==============================================================================
Binary files. No diff available.
Modified: branches/quickbook-dev/libs/property_map/doc/LvaluePropertyMap.html
==============================================================================
--- branches/quickbook-dev/libs/property_map/doc/LvaluePropertyMap.html (original)
+++ branches/quickbook-dev/libs/property_map/doc/LvaluePropertyMap.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -19,13 +19,9 @@
LvaluePropertyMap
</H2>
-The LvaluePropertyMap provides an interface for accessing a
-reference to a property object (instead of a copy of the object as in
-the <TT>get()</TT> function required by <a
-href="./ReadablePropertyMap.html">ReadablePropertyMap</a>). An
-LvaluePropertyMap can be <I>mutable</I> or
-<I>non-mutable</I>. The mutable LvaluePropertyMap returns a
-reference whereas the non-mutable returns a const reference.
+The LvaluePropertyMap provides <code>operator[]</code> and function <code>get()</code> for accessing a
+reference to a value object. The return type refines that of function <code>get()</code>in <a
+href="./ReadablePropertyMap.html">ReadablePropertyMap</a>; it can only be a reference (for a <I>mutable</I> LvaluePropertyMap) or a const reference (for a <I>non-mutable</I> LvaluePropertyMap).
<H3>Refinement of</H3>
@@ -60,7 +56,7 @@
<td><TT>boost::property_traits<PMap>::reference</TT></td>
<td>
The reference type, which must be a reference or const reference to
-the value typeof the property map.
+the value type of the property map.
</td>
</tr>
@@ -90,7 +86,7 @@
<TT>value_type&</TT> for mutable, <TT>const value_type&</TT>
otherwise.
</TD>
-<TD>Obtain a reference to the property identified by <TT>key</TT>.</TD>
+<TD>Obtain a reference to the value associated with <TT>key</TT>.</TD>
</TR>
</TABLE>
Modified: branches/quickbook-dev/libs/property_map/doc/ReadablePropertyMap.html
==============================================================================
--- branches/quickbook-dev/libs/property_map/doc/ReadablePropertyMap.html (original)
+++ branches/quickbook-dev/libs/property_map/doc/ReadablePropertyMap.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,8 +20,8 @@
Readable Property Map
</H2>
-A Readable Property Map provides read-access to the value object associated with a given key via a call to the <tt>get()</tt> function.
-The <tt>get()</tt> function returns a copy of the value object.
+A Readable Property Map provides read-access to the value associated with a given key via a call to the <tt>get()</tt> function.
+The return type of the <tt>get()</tt>function is either the <tt>value_type</tt> of the property map or a (const or non-const) reference to that type.
<h3>Refinement of</h3>
@@ -95,7 +95,7 @@
<td>Get Property Value </td>
<TD><TT>get(pmap, key)</TT></TD>
<TD><TT>reference</TT></TD>
-<TD>Lookup the property of the object identified by <TT>key</TT>.</TD>
+<TD>Lookup the value associated with <TT>key</TT>.</TD>
</TR>
</TABLE>
Modified: branches/quickbook-dev/libs/proto/preprocess/wave.cfg
==============================================================================
--- branches/quickbook-dev/libs/proto/preprocess/wave.cfg (original)
+++ branches/quickbook-dev/libs/proto/preprocess/wave.cfg 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,3 +1,9 @@
+# (C) Copyright 2012: Eric Niebler
+# Distributed under 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)
+
+# NOTE: Some of the paths in this file may need to be changed for your system.
+
-DBOOST_PROTO_DONT_USE_PREPROCESSED_FILES
-DBOOST_PROTO_CREATE_PREPROCESSED_FILES
-D_WIN32
@@ -10,7 +16,7 @@
-NBOOST_PROTO_GET_POINTER
-NBOOST_PROTO_ASSERT_VALID_DOMAIN
-NBOOST_FORCEINLINE
--SC:\boost\org\trunk
--S"C:\Program Files\Microsoft Visual Studio 10.0\VC\include"
+-S../../..
+-S"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include"
-S.
--variadics
Modified: branches/quickbook-dev/libs/python/doc/v2/make_function.html
==============================================================================
--- branches/quickbook-dev/libs/python/doc/v2/make_function.html (original)
+++ branches/quickbook-dev/libs/python/doc/v2/make_function.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -96,10 +96,10 @@
to <code>f</code>. <ul>
<li> If <code>policies</code> are supplied, it
will be applied to the function as described <a href=
- "CallPolicies.html">here</a>.
+ "CallPolicies.html">here</a>.
<li>If <code>keywords</code> are
supplied, the keywords will be applied in order to the final
- arguments of the resulting function.
+ arguments of the resulting function.
<li>If <code>Signature</code>
is supplied, it should be an instance of an <a
href="../../../mpl/doc/refmanual/front-extensible-sequence.html">MPL front-extensible
@@ -125,36 +125,33 @@
</dl>
<pre>
-<a name=
-"make_constructor-spec"></a>template <class T, class ArgList, class Generator>
-object make_constructor();
-
-template <class ArgList, class Generator, class Policies>
+<a name="make_constructor-spec">template <class F></a>
+object make_constructor(F f)
+
+template <class F, class Policies>
+<a href=
+"object.html#object-spec">object</a> make_constructor(F f, Policies const& policies)
+
+template <class F, class Policies, class KeywordsOrSignature>
+<a href=
+"object.html#object-spec">object</a> make_constructor(F f, Policies const& policies, KeywordsOrSignature const& ks)
+
+template <class F, class Policies, class Keywords, class Signature>
<a href=
-"object.html#object-spec">object</a> make_constructor(Policies const& policies)
+"object.html#object-spec">object</a> make_constructor(F f, Policies const& policies, Keywords const& kw, Signature const& sig)
</pre>
<dl class="function-semantics">
- <dt><b>Requires:</b> <code>T</code> is a class type.
- <code>Policies</code> is a model of <a href=
- "CallPolicies.html">CallPolicies</a>. <code>ArgList</code> is an <a
- href="../../../mpl/doc/refmanual/forward-sequence.html">MPL sequence</a> of C++ argument
- types (<i>A1, A2,... AN</i>) such that if
- <code>a1, a2</code>... <code>aN</code> are objects of type
- <i>A1, A2,... AN</i> respectively, the expression <code>new
- Generator::apply<T>::type(a1, a2</code>... <code>aN</code>)
- is valid. Generator is a model of <a href=
- "HolderGenerator.html">HolderGenerator</a>.</dt>
+ <dt><b>Requires:</b> <code>F</code> is a
+ function pointer type. If <code>policies</code> are supplied, it must
+ be a model of CallPolicies. If
+ <code>kewords</code> are supplied, it must be the result of a <a href=
+ "args.html#keyword-expression"><em>keyword-expression</em></a>
+ specifying no more arguments than the <a href=
+ "definitions.html#arity">arity</a> of <code>f</code>.</dt>
<dt><b>Effects:</b> Creates a Python callable object which, when called
- from Python, expects its first argument to be a Boost.Python extension
- class object. It converts its remaining its arguments to C++ and passes
- them to the constructor of a dynamically-allocated
- <code>Generator::apply<T>::type</code> object, which is then
- installed in the extension class object. In the second form, the
- <code>policies</code> are applied to the arguments and result (<a href=
- "http://www.python.org/doc/current/lib/bltin-null-object.html">None</a>)
- of the Python callable object</dt>
+ from Python, converts its arguments to C++ and calls <code>f</code>.</dt>
<dt><b>Returns:</b> An instance of <a href=
"object.html#object-spec">object</a> which holds the new Python
@@ -186,7 +183,7 @@
def("choose_function", choose_function);
}
</pre>
- It can be used this way in Python:
+ It can be used this way in Python:
<pre>
>>> from make_function_test import *
>>> f = choose_function(1)
Modified: branches/quickbook-dev/libs/random/test/test_discrete_distribution.cpp
==============================================================================
--- branches/quickbook-dev/libs/random/test/test_discrete_distribution.cpp (original)
+++ branches/quickbook-dev/libs/random/test/test_discrete_distribution.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -49,7 +49,7 @@
boost::random::discrete_distribution<> dist;
CHECK_PROBABILITIES(dist.probabilities(), list_of(1.0));
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
boost::random::discrete_distribution<> dist_il = { 1, 2, 1, 4 };
CHECK_PROBABILITIES(dist_il.probabilities(), list_of(.125)(.25)(.125)(.5));
#endif
@@ -98,7 +98,7 @@
BOOST_CHECK(param != param_default);
BOOST_CHECK(!(param == param_default));
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
boost::random::discrete_distribution<>::param_type
parm_il = { 1, 2, 1, 4 };
CHECK_PROBABILITIES(parm_il.probabilities(), list_of(.125)(.25)(.125)(.5));
Modified: branches/quickbook-dev/libs/random/test/test_piecewise_constant_distribution.cpp
==============================================================================
--- branches/quickbook-dev/libs/random/test/test_piecewise_constant_distribution.cpp (original)
+++ branches/quickbook-dev/libs/random/test/test_piecewise_constant_distribution.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -50,7 +50,7 @@
CHECK_SEQUENCE(dist.densities(), list_of(1.0));
CHECK_SEQUENCE(dist.intervals(), list_of(0.0)(1.0));
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
boost::random::piecewise_constant_distribution<> dist_il = {
{ 99, 103, 107, 111, 115 },
gen()
@@ -139,7 +139,7 @@
BOOST_CHECK(param != param_default);
BOOST_CHECK(!(param == param_default));
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
boost::random::piecewise_constant_distribution<>::param_type parm_il = {
{ 99, 103, 107, 111, 115 },
gen()
Modified: branches/quickbook-dev/libs/random/test/test_piecewise_linear_distribution.cpp
==============================================================================
--- branches/quickbook-dev/libs/random/test/test_piecewise_linear_distribution.cpp (original)
+++ branches/quickbook-dev/libs/random/test/test_piecewise_linear_distribution.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -51,7 +51,7 @@
CHECK_SEQUENCE(dist.intervals(), list_of(0.0)(1.0));
CHECK_SEQUENCE(dist.densities(), list_of(1.0)(1.0));
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
boost::random::piecewise_linear_distribution<> dist_il = {
{ 99, 103, 107, 111, 115 },
gen()
@@ -143,7 +143,7 @@
BOOST_CHECK(param != param_default);
BOOST_CHECK(!(param == param_default));
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
boost::random::piecewise_linear_distribution<>::param_type parm_il = {
{ 99, 103, 107, 111, 115 },
gen()
Modified: branches/quickbook-dev/libs/random/test/test_seed_seq.cpp
==============================================================================
--- branches/quickbook-dev/libs/random/test/test_seed_seq.cpp (original)
+++ branches/quickbook-dev/libs/random/test/test_seed_seq.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -94,7 +94,7 @@
BOOST_CHECK_EQUAL_COLLECTIONS(
¶m[0], ¶m[0] + 4, &expected_param[0], &expected_param[0] + 4);
-#ifndef BOOST_NO_INITIALIZER_LISTS
+#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
std::fill_n(&store32[0], 10, 0);
std::fill_n(&store64[0], 10, 0);
std::fill_n(¶m[0], 3, 0);
Modified: branches/quickbook-dev/libs/scope_exit/doc/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/doc/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/scope_exit/doc/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,15 +1,30 @@
-# Copyright 2006 Alexander Nasonov.
-# Distributed under 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)
-
-using quickbook ;
-
-xml scope_exit : scope_exit.qbk ;
-boostbook standalone : scope_exit
- :
- # Path for links to Boost:
- <xsl:param>boost.root=../../../..
+# Copyright (C) 2006-2009, 2012 Alexander Nasonov
+# Copyright (C) 2012 Lorenzo Caminiti
+# Distributed under the Boost Software License, Version 1.0
+# (see accompanying file LICENSE_1_0.txt or a copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+# Home at http://www.boost.org/libs/scope_exit
+
+import quickbook ;
+using boostbook ;
+
+doxygen reference
+ : ../../../boost/scope_exit.hpp
+ : <reftitle>"Reference"
+ <doxygen:param>PREDEFINED="DOXYGEN"
+ <doxygen:param>QUIET=YES
+ <doxygen:param>WARN_IF_UNDOCUMENTED=NO
+ <doxygen:param>HIDE_UNDOC_MEMBERS=YES
+ <doxygen:param>HIDE_UNDOC_CLASSES=YES
+ <doxygen:param>ALIASES=" Params=\"<b>Parameters:</b> <table border="0">\" Param{2}=\"<tr><td><b><tt>\\1</tt></b></td><td>\\2</td></tr>\" EndParams=\"</table>\" Returns=\"<b>Returns:</b>\" Note=\"<b>Note:</b>\" Warning=\"<b>Warning:</b>\" See=\"<b>See:</b>\" RefSect{1}=\"\\xmlonly<link linkend='scope_exit.\\1'>\\1</link>\\endxmlonly\" RefSectId{2}=\"\\xmlonly<link linkend='scope_exit.\\1'>\\2</link>\\endxmlonly\" RefClass{1}=\"\\xmlonly<computeroutput><classname alt='\\1'>\\1</classname></computeroutput>\\endxmlonly\" RefFunc{1}=\"\\xmlonly<computeroutput><functionname alt='\\1'>\\1</functionname></computeroutput>\\endxmlonly\" RefMacro{1}=\"\\xmlonly<computeroutput><macroname alt='\\1'>\\1</macroname></computeroutput>\\endxmlonly\" "
+ ;
+
+xml qbk : scope_exit.qbk : <dependency>reference ;
+
+boostbook doc : qbk
+ : <xsl:param>boost.root=../../../..
+ <xsl:param>boost.defaults=Boost
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/scope_exit/doc/html
- ;
+ ;
Modified: branches/quickbook-dev/libs/scope_exit/doc/html/index.html
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/doc/html/index.html (original)
+++ branches/quickbook-dev/libs/scope_exit/doc/html/index.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,11 +1,11 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Chapter 1. Boost.ScopeExit</title>
+<title>Chapter 1. Boost.ScopeExit 1.1.0</title>
<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="next" href="scope_exit/tutorial.html" title="Tutorial">
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="Chapter 1. Boost.ScopeExit 1.1.0">
+<link rel="next" href="scope_exit/Getting_Started.html" title="Getting Started">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
@@ -17,61 +17,116 @@
<td align="center">More</td>
</tr></table>
<hr>
-<div class="spirit-nav"><a accesskey="n" href="scope_exit/tutorial.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
+<div class="spirit-nav"><a accesskey="n" href="scope_exit/Getting_Started.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
<div class="chapter">
<div class="titlepage"><div>
<div><h2 class="title">
-<a name="scope_exit"></a>Chapter 1. Boost.ScopeExit</h2></div>
+<a name="scope_exit"></a>Chapter 1. Boost.ScopeExit 1.1.0</h2></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Alexander</span> <span class="surname">Nasonov</span>
</h3></div></div>
-<div><p class="copyright">Copyright © 2006 -2009 Alexander Nasonov</p></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Lorenzo</span> <span class="surname">Caminiti <code class="email"><<a class="email" href="mailto:lorcaminiti_at_[hidden]">lorcaminiti_at_[hidden]</a>></code></span>
+</h3></div></div>
+<div><p class="copyright">Copyright © 2006-2012 Alexander Nasonov, Lorenzo Caminiti</p></div>
<div><div class="legalnotice">
-<a name="id759689"></a><p>
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at <ulink url="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt </ulink>)
+<a name="scope_exit.legal"></a><p>
+ Distributed under the Boost Software License, Version 1.0 (see accompanying
+ file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt)
</p>
</div></div>
</div></div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="section"> Introduction</span></dt>
-<dt><span class="section"> Tutorial</span></dt>
-<dt><span class="section"> Alternatives</span></dt>
-<dt><span class="section"> Supported Compilers</span></dt>
-<dt><span class="section"> Configuration</span></dt>
-<dt><span class="section"> Reference</span></dt>
-<dt><span class="section"> Acknowledge</span></dt>
+<dt><span class="section">Introduction</span></dt>
+<dt><span class="section">Getting Started</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="scope_exit/Getting_Started.html#scope_exit.Getting_Started.compilers_and_platforms">Compilers
+ and Platforms</a></span></dt>
+<dt><span class="section">Installation</span></dt>
+</dl></dd>
+<dt><span class="section">Tutorial</span></dt>
+<dd><dl>
+<dt><span class="section">Capturing Variables</span></dt>
+<dt><span class="section"><a href="scope_exit/Tutorial.html#scope_exit.Tutorial.capturing_the_object__this_">Capturing
+ The Object <code class="computeroutput"><span class="keyword">this</span></code></a></span></dt>
+<dt><span class="section"><a href="scope_exit/Tutorial.html#scope_exit.Tutorial.capturing_no_variable">Capturing
+ No Variable</a></span></dt>
+<dt><span class="section"><a href="scope_exit/Tutorial.html#scope_exit.Tutorial.capturing_all_variables__c__11_only_">Capturing
+ All Variables (C++11 Only)</a></span></dt>
+<dt><span class="section"><a href="scope_exit/Tutorial.html#scope_exit.Tutorial.gcc_template_workaround">GCC Template
+ Workaround</a></span></dt>
+</dl></dd>
+<dt><span class="section">Reference</span></dt>
+<dd><dl><dt><span class="section">Header <boost/scope_exit.hpp></span></dt></dl></dd>
+<dt><span class="section">Annex: Alternatives</span></dt>
+<dt><span class="section">Annex: No Variadic Macros</span></dt>
+<dt><span class="section">Acknowledgements</span></dt>
</dl>
</div>
-<div class="section">
+<p>
+ This library allows to execute arbitrary code when the enclosing scope exits.
+ </p>
+<div class="section scope_exit_introduction">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="scope_exit.intro"></a> Introduction</h2></div></div></div>
+<a name="scope_exit.introduction"></a><a class="link" href="index.html#scope_exit.introduction" title="Introduction">Introduction</a>
+</h2></div></div></div>
<p>
- Nowadays, every C++ developer is familiar with RAII
+ Nowadays, every C++ developer is familiar with the Resource Acquisition Is
+ Initialization (RAII)
technique. It binds resource acquisition and release to initialization and
destruction of a variable that holds the resource. But there are times when
- writing a special class for such variable is not worth the effort.
+ writing a special class for such variable is not worth the effort. This is
+ when the <a class="link" href="index.html" title="Chapter 1. Boost.ScopeExit 1.1.0">Boost.ScopeExit</a> comes into play.
</p>
<p>
- This is when <a class="link" href="index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> macro comes into play.
- You put resource acquisition directly in your code and next to it you write
- a code that releases the resource.
+ Programmers can put resource acquisition directly in their code and next to
+ it, they can write code that releases the resource using this library. For
+ example (see also world.cpp
):
+ <sup>[<a name="scope_exit.introduction.f0" href="#ftn.scope_exit.introduction.f0" class="footnote">1</a>]</sup>
</p>
<p>
- Read <a class="link" href="scope_exit/tutorial.html" title="Tutorial">Tutorial</a> to find out how to
- write programs with <a class="link" href="index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> or jump straight
- to the <a class="link" href="scope_exit/ref.html" title="Reference">Reference</a> section.
+</p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">world</span><span class="special">::</span><span class="identifier">add_person</span><span class="special">(</span><span class="identifier">person</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">a_person</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">bool</span> <span class="identifier">commit</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+
+ <span class="identifier">persons_</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">a_person</span><span class="special">);</span> <span class="comment">// (1) direct action</span>
+ <span class="comment">// Following block is executed when the enclosing scope exits.</span>
+ <span class="identifier">BOOST_SCOPE_EXIT</span><span class="special">(&</span><span class="identifier">commit</span><span class="special">,</span> <span class="special">&</span><span class="identifier">persons_</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">if</span><span class="special">(!</span><span class="identifier">commit</span><span class="special">)</span> <span class="identifier">persons_</span><span class="special">.</span><span class="identifier">pop_back</span><span class="special">();</span> <span class="comment">// (2) rollback action</span>
+ <span class="special">}</span> <span class="identifier">BOOST_SCOPE_EXIT_END</span>
+
+ <span class="comment">// ... // (3) other operations</span>
+
+ <span class="identifier">commit</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">;</span> <span class="comment">// (4) disable rollback actions</span>
+<span class="special">}</span>
+</pre>
+<p>
</p>
+<p>
+ Read the <a class="link" href="scope_exit/Tutorial.html" title="Tutorial">Tutorial</a> section to find
+ out how to write programs with <a class="link" href="index.html" title="Chapter 1. Boost.ScopeExit 1.1.0">Boost.ScopeExit</a>
+ or jump to the Reference section.
+ </p>
+</div>
+<div class="footnotes">
+<br><hr width="100" align="left">
+<div class="footnote"><p><sup>[<a id="ftn.scope_exit.introduction.f0" href="#scope_exit.introduction.f0" class="para">1</a>] </sup>
+ Older versions of this library used a Boost.Preprocessor
+ sequence to specify the list of captured variables. While maintaining full
+ backward compatibility, it is now possible to specify the captured variables
+ also as a comma-separated list (which is the preferred syntax). See the
+ <a class="link" href="scope_exit/No_Variadic_Macros.html" title="Annex: No Variadic Macros">No Variadic Macros</a> section
+ for more details.
+ </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: July 08, 2010 at 22:36:27 GMT</small></p></td>
+<td align="left"><p><small>Last revised: February 17, 2012 at 22:05:16 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
-<div class="spirit-nav"><a accesskey="n" href="scope_exit/tutorial.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
+<div class="spirit-nav"><a accesskey="n" href="scope_exit/Getting_Started.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
</body>
</html>
Deleted: branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/acknowledge.html
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/acknowledge.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,66 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Acknowledge</title>
-<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="../index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="up" href="../index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="prev" href="ref.html" title="Reference">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%"><tr>
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="ref.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="scope_exit.acknowledge"></a> Acknowledge</h2></div></div></div>
-<p>
- (in chronological order)
- </p>
-<p>
- Maxim Yegorushkin for sending me a code where he used a local struct to clean
- up resources.
- </p>
-<p>
- Andrei Alexandrescu for pointing me to scope(exit)
- construct of the D
- programming language.
- </p>
-<p>
- Pavel Vozenilek and Maxim Yanchenko for reviews of early drafts of the library.
- </p>
-<p>
- Steven Watanabe for his valuable ideas.
- </p>
-<p>
- Jody Hagins for good comments that helped to significantly improve the documentation.
- </p>
-<p>
- Richard Webb for testing the library on MSVC compiler.
- </p>
-</div>
-<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright © 2006 -2009 Alexander Nasonov<p>
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at <ulink url="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt </ulink>)
- </p>
-</div></td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="ref.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a>
-</div>
-</body>
-</html>
Deleted: branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/compilers.html
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/compilers.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,61 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Supported Compilers</title>
-<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="../index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="up" href="../index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="prev" href="alternatives.html" title="Alternatives">
-<link rel="next" href="conf.html" title="Configuration">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%"><tr>
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="alternatives.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="conf.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="scope_exit.compilers"></a> Supported Compilers</h2></div></div></div>
-<p>
- The library should be usable on any compiler that supports Boost.Typeof
- except
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" type="disc">
-<li class="listitem">
- MSVC 7.1 and 8.0 fail to link if a function with <a class="link" href="../index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a>
- is included by multiple translation units.
- </li>
-<li class="listitem">
- GCC 3.3 can't compile <a class="link" href="../index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> inside
- a template. See <a href="http://lists.boost.org/Archives/boost/2007/02/116235.php" target="_top">this
- thread</a> for more details.
- </li>
-</ul></div>
-<p>
- The author tested the library on GCC 3.3, 3.4, 4.1, 4.2 and Intel 10.1.
- </p>
-</div>
-<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright © 2006 -2009 Alexander Nasonov<p>
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at <ulink url="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt </ulink>)
- </p>
-</div></td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="alternatives.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="conf.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
-</div>
-</body>
-</html>
Deleted: branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/conf.html
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/conf.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,49 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Configuration</title>
-<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="../index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="up" href="../index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="prev" href="compilers.html" title="Supported Compilers">
-<link rel="next" href="ref.html" title="Reference">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%"><tr>
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="compilers.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ref.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="scope_exit.conf"></a> Configuration</h2></div></div></div>
-<p>
- Normally, no configuration is required for the library but note that the library
- depends on Boost.Typeof
- and you may want to configure or enforce <a href="../../../../../libs/typeof/index.html" target="_top">typeof
- emulation</a>.
- </p>
-</div>
-<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright © 2006 -2009 Alexander Nasonov<p>
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at <ulink url="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt </ulink>)
- </p>
-</div></td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="compilers.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ref.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
-</div>
-</body>
-</html>
Deleted: branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/ref.html
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/doc/html/scope_exit/ref.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,153 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Reference</title>
-<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
-<link rel="home" href="../index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="up" href="../index.html" title="Chapter 1. Boost.ScopeExit">
-<link rel="prev" href="conf.html" title="Configuration">
-<link rel="next" href="acknowledge.html" title="Acknowledge">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%"><tr>
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="conf.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledge.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="scope_exit.ref"></a> Reference</h2></div></div></div>
-<a name="ref.boost_scope_exit"></a><h4>
-<a name="id763687"></a>
- BOOST_SCOPE_EXIT
- </h4>
-<p>
- A <a class="link" href="../index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> declaration has the following
- synopsis:
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">scope_exit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
-
-<span class="identifier">BOOST_SCOPE_EXIT</span> <span class="special">(</span> <span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span><span class="special">-</span><span class="identifier">list</span> <span class="special">)</span>
- <span class="identifier">function</span><span class="special">-</span><span class="identifier">body</span>
-<span class="identifier">BOOST_SCOPE_EXIT_END</span>
-</pre>
-<p>
- where
- </p>
-<pre class="programlisting"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span><span class="special">-</span><span class="identifier">list</span><span class="special">:</span>
- <span class="special">(</span> <span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span> <span class="special">)</span>
- <span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span><span class="special">-</span><span class="identifier">list</span> <span class="special">(</span> <span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span> <span class="special">)</span>
-
-<span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span><span class="special">:</span>
- <span class="identifier">identifier</span>
- <span class="special">&</span><span class="identifier">identifier</span>
-</pre>
-<p>
- The <a class="link" href="../index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> declaration schedules an execution
- of <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">body</span></code>
- at the end of the current scope. The <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">body</span></code> statements are executed in the reverse
- order of <a class="link" href="../index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> declarations in the given
- scope. The scope must be local.
- </p>
-<p>
- Each <code class="computeroutput"><span class="identifier">identifier</span></code> in <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span><span class="special">-</span><span class="identifier">list</span></code> must
- be a valid name in enclosing scope and it must appear exactly once in the list.
- If a <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span></code>
- starts with the ampersand sign <code class="computeroutput"><span class="special">&</span></code>,
- the corresponding <code class="computeroutput"><span class="identifier">identifier</span></code>
- will be available inside <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">body</span></code>; otherwise, a copy of it will be made
- at the point of <a class="link" href="../index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> declaration and
- that copy will be available inside <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">body</span></code>. In the latter case, the <code class="computeroutput"><span class="identifier">idenitifer</span></code> must be <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>.
- </p>
-<p>
- Only identifiers listed in <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span><span class="special">-</span><span class="identifier">list</span></code>, static variables, <code class="computeroutput"><span class="keyword">extern</span></code>
- variables and functions, and enumerations from the enclosing scope can be used
- inside the <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">body</span></code>.
- </p>
-<div class="note"><table border="0" summary="Note">
-<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
-<th align="left">Note</th>
-</tr>
-<tr><td align="left" valign="top"><p>
- <code class="computeroutput"><span class="keyword">this</span></code> pointer is not an identifier
- and cannot be passed to <code class="computeroutput"> <span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span><span class="special">-</span><span class="identifier">list</span></code>.
- </p></td></tr>
-</table></div>
-<p>
- The <a class="link" href="../index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> uses Boost.Typeof
- to determine types of <code class="computeroutput"><span class="identifier">scope</span><span class="special">-</span><span class="identifier">exit</span><span class="special">-</span><span class="identifier">capture</span><span class="special">-</span><span class="identifier">list</span></code> elements. In order to compile code in
- typeof emulation mode,
- all types should be registered with BOOST_TYPEOF_REGISTER_TYPE
- or BOOST_TYPEOF_REGISTER_TEMPLATE
- macros, or appropriate Boost.Typeof
- headers should be included.
- </p>
-<a name="ref.boost_scope_exit_tpl"></a><h4>
-<a name="id764391"></a>
- BOOST_SCOPE_EXIT_TPL
- </h4>
-<p>
- This macro is a workaround for various versions of gcc. These compilers don't
- compile <a class="link" href="../index.html" title="Chapter 1. Boost.ScopeExit">ScopeExit</a> declaration inside function
- templates. As a workaround, the <code class="computeroutput"><span class="identifier">_TPL</span></code>
- suffix should be appended to <code class="computeroutput"><span class="identifier">BOOST_SCOPE_EXIT</span></code>.
- </p>
-<p>
- The problem boils down to the following code:
- </p>
-<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">foo</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">t</span><span class="special">)</span> <span class="special">{</span>
- <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
- <span class="keyword">struct</span> <span class="identifier">Local</span> <span class="special">{</span>
- <span class="keyword">typedef</span> <span class="identifier">__typeof__</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span> <span class="identifier">typeof_i</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="identifier">__typeof__</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span> <span class="identifier">typeof_t</span><span class="special">;</span>
- <span class="special">};</span>
- <span class="keyword">typedef</span> <span class="identifier">Local</span><span class="special">::</span><span class="identifier">typeof_i</span> <span class="identifier">i_type</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="identifier">Local</span><span class="special">::</span><span class="identifier">typeof_t</span> <span class="identifier">t_type</span><span class="special">;</span>
-<span class="special">}</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">foo</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> <span class="special">}</span>
-</pre>
-<p>
- This can be fixed by adding <code class="computeroutput"><span class="keyword">typename</span></code>
- in front of <code class="computeroutput"><span class="identifier">Local</span><span class="special">::</span><span class="identifier">typeof_i</span></code> and <code class="computeroutput"><span class="identifier">Local</span><span class="special">::</span><span class="identifier">typeof_t</span></code>.
- </p>
-<p>
- See also <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37920" target="_top">GCC
- bug 37920</a>.
- </p>
-<div class="note"><table border="0" summary="Note">
-<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
-<th align="left">Note</th>
-</tr>
-<tr><td align="left" valign="top"><p>
- Although <code class="computeroutput"><span class="identifier">BOOST_SCOPE_EXIT_TPL</span></code>
- has the same suffix as the <code class="computeroutput"><span class="identifier">BOOST_TYPEOF_TPL</span></code>,
- it doesn't follow a convention of the Boost.Typeof.
- </p></td></tr>
-</table></div>
-</div>
-<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright © 2006 -2009 Alexander Nasonov<p>
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at <ulink url="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt </ulink>)
- </p>
-</div></td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="conf.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledge.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
-</div>
-</body>
-</html>
Modified: branches/quickbook-dev/libs/scope_exit/doc/scope_exit.qbk
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/doc/scope_exit.qbk (original)
+++ branches/quickbook-dev/libs/scope_exit/doc/scope_exit.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,475 +1,437 @@
+
+[/ Copyright (C) 2006-2009, 2012 Alexander Nasonov ]
+[/ Copyright (C) 2012 Lorenzo Caminiti ]
+[/ Distributed under the Boost Software License, Version 1.0 ]
+[/ (see accompanying file LICENSE_1_0.txt or a copy at ]
+[/ http://www.boost.org/LICENSE_1_0.txt) ]
+[/ Home at http://www.boost.org/libs/scope_exit ]
+
[library Boost.ScopeExit
- [copyright 2006-2009 Alexander Nasonov]
+ [quickbook 1.5]
+ [version 1.1.0]
+ [copyright 2006-2012 Alexander Nasonov, Lorenzo Caminiti]
[purpose execute arbitrary code at scope exit]
[license
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- <ulink url="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt
- </ulink>)
+ Distributed under the Boost Software License, Version 1.0
+ (see accompanying file LICENSE_1_0.txt or a copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+ ]
+ [authors
+ [Nasonov, Alexander]
+ [Caminiti <email>lorcaminiti_at_[hidden]</email>, Lorenzo]
]
- [authors [Nasonov, Alexander]]
[category utility]
[id scope_exit]
[dirname scope_exit]
]
-[/ Images ]
+[def __Tutorial__ [link scope_exit.Tutorial Tutorial]]
+[def __No_Variadic_Macros__ [link scope_exit.No_Variadic_Macros No Variadic Macros]]
+[def __Reference__ [@reference.html Reference]]
+[def __Boost_ScopeExit__ [link scope_exit Boost.ScopeExit]]
+[def __Boost_Lambda__ [@http://www.boost.org/libs/lambda Boost.Lambda]]
+[def __Boost_Phoenix__ [@http://www.boost.org/libs/phoenix Boost.Phoenix]]
+[def __Boost_Typeof__ [@http://www.boost.org/libs/typeof Boost.Typeof]]
+[def __typeof_emulation__ [@http://www.boost.org/libs/typeof type-of emulation]]
+[def __BOOST_TYPEOF_REGISTER_TYPE__ [@http://www.boost.org/libs/typeof/refe.html#typeof.regtype BOOST_TYPEOF_REGISTER_TYPE]]
+[def __BOOST_TYPEOF_REGISTER_TEMPLATE__ [@http://www.boost.org/libs/typeof/refe.html#typeof.regtemp BOOST_TYPEOF_REGISTER_TEMPLATE]]
+[def __Boost_Preprocessor__ [@http://www.boost.org/libs/preprocessor Boost.Preprocessor]]
+[def __Boost_PointerContainer__ [@http://www.boost.org/libs/ptr_container Boost.PointerContainer]]
+[def __Boost_Multi_Index__ [@http://www.boost.org/libs/multi_index Boost.Multi-Index]]
+[def __ScopeGuard__ [@http://www.ddj.com/dept/cpp/184403758 ScopeGuard]]
+[def __D__ [@http://www.digitalmars.com/d/index.html D]]
+[def __D_scope_exit__ [@http://www.digitalmars.com/d/2.0/statement.html#ScopeGuardStatement scope(exit)]]
+[def __RAII__ [@http://www.research.att.com/~bs/glossary.html#Gresource-acquisition-is-initialization RAII]]
+[def __strong_guarantee__ [@http://www.research.att.com/~bs/glossary.html#Gstrong-guarantee strong guarantee]]
+
+[import ../test/world.cpp]
+[import ../test/world_seq.cpp]
+[import ../test/world_checkpoint.cpp]
+[import ../test/world_this.cpp]
+[import ../test/world_void.cpp]
+[import ../test/world_checkpoint_all.cpp]
+[import ../test/world_tpl.cpp]
+[import ../test/world_lambda.cpp]
+[import ../example/try_catch.cpp]
+[import ../example/scope_guard.cpp]
+
+This library allows to execute arbitrary code when the enclosing scope exits.
+
+[section Introduction]
+
+Nowadays, every C++ developer is familiar with the Resource Acquisition Is Initialization (__RAII__) technique.
+It binds resource acquisition and release to initialization and destruction of a variable that holds the resource.
+But there are times when writing a special class for such variable is not worth the effort.
+This is when the __Boost_ScopeExit__ comes into play.
+
+Programmers can put resource acquisition directly in their code and next to it, they can write code that releases the resource using this library.
+For example (see also [@../../test/world.cpp =world.cpp=]):
+[footnote
+Older versions of this library used a __Boost_Preprocessor__ sequence to specify the list of captured variables.
+While maintaining full backward compatibility, it is now possible to specify the captured variables also as a comma-separated list (which is the preferred syntax).
+See the __No_Variadic_Macros__ section for more details.
+]
-[def _note_ [$images/note.png]]
+[world]
-[/ Links ]
+Read the __Tutorial__ section to find out how to write programs with __Boost_ScopeExit__ or jump to the __Reference__ section.
-[def _scope_exit_ [link scope_exit ScopeExit]]
-[def _Tutorial_ [link scope_exit.tutorial Tutorial]]
-[def _Reference_ [link scope_exit.ref Reference]]
-[def _lambda_ [@../../../../libs/lambda/index.html Boost.Lambda]]
-[def _typeof_ [@../../../../libs/typeof/index.html Boost.Typeof]]
-[def _typeof_emulation_ [@../../../../libs/typeof/index.html typeof emulation]]
-[def _typeof_REGISTER_TYPE_ [@../../../../doc/html/typeof/refe.html#typeof.regtype BOOST_TYPEOF_REGISTER_TYPE]]
-[def _typeof_REGISTER_TEMPLATE_ [@../../../../doc/html/typeof/refe.html#typeof.regtemp BOOST_TYPEOF_REGISTER_TEMPLATE]]
-[def _pp_ [@../../../../libs/preprocessor/index.html Boost.Preprocessor]]
-[def _pp_seq_ [@../../../../libs/preprocessor/index.html Boost.Preprocessor sequence]]
-[def _ptr_container_ [@../../../../libs/ptr_container/doc/ptr_container.html Boost Pointer Container Library]]
-[def _multi_index_ [@../../../../libs/multi_index/doc/index.html Boost Multi-Index Containers Library]]
-[def _scope_guard_ [@http://www.ddj.com/dept/cpp/184403758 ScopeGuard]]
-[def _D_ [@http://www.digitalmars.com/d/index.html D]]
-[def _D_scope_exit_ [@http://www.digitalmars.com/d/2.0/statement.html#ScopeGuardStatement scope(exit)]]
-[def _RAII_ [@http://www.research.att.com/~bs/glossary.html#Gresource-acquisition-is-initialization RAII]]
-[def _strong_guarantee_ [@http://www.research.att.com/~bs/glossary.html#Gstrong-guarantee strong guarantee]]
-
-[section:intro Introduction]
-
-Nowadays, every C++ developer is familiar with _RAII_ technique.
-It binds resource acquisition and release to initialization and
-destruction of a variable that holds the resource. But there are
-times when writing a special class for such variable is not worth
-the effort.
-
-This is when _scope_exit_ macro comes into play. You put resource
-acquisition directly in your code and next to it you write a code
-that releases the resource.
-
-Read _Tutorial_ to find out how to write programs with
-_scope_exit_ or jump straight to the _Reference_ section.
-
-[endsect]
-
-[section:tutorial Tutorial]
-
-Imagine that you want to make many modifications to data members
-of the `World` class in the `World::addPerson` function.
-You start with adding a new `Person` object to a vector of persons:
-
- void World::addPerson(Person const& person) {
- bool commit = false;
- m_persons.push_back(person); // (1) direct action
-
-Some operation down the road may throw an exception and all changes
-to involved objects should be rolled back. This all-or-nothing semantic
-is also known as _strong_guarantee_.
-
-In particular, last added person must be deleted from `m_persons` when
-the function throws. All you need is to define a delayed action (release
-of a resource) right after the direct action (resource acquisition):
-
- void World::addPerson(Person const& aPerson) {
- bool commit = false;
- m_persons.push_back(aPerson); // (1) direct action
- BOOST_SCOPE_EXIT( (&commit)(&m_persons) )
- {
- if(!commit)
- m_persons.pop_back(); // (2) rollback action
- } BOOST_SCOPE_EXIT_END
-
- // ... // (3) other operations
-
- commit = true; // (4) turn all rollback actions into no-op
- }
+[endsect]
-The block below point `(1)` is a _scope_exit_ declaration.
-Unlike point `(1)`, an execution of the _scope_exit_ body will be
-delayed until the end of the current scope. In this case it will be
-executed either after point `(4)` or on any exception.
-
-The _scope_exit_ declaration starts with `BOOST_SCOPE_EXIT` macro
-invocation which accepts _pp_seq_ of captured variables. If a capture
-starts with the ampersand sign `&`, a reference to the captured variable
-will be available inside the _scope_exit_ body; otherwise, a copy of the
-variable will be made after the point `(1)` and only the copy will be
-available inside the body.
-
-In the example above, variables `commit` and `m_persons` are passed
-by reference because the final value of the `commit` variable should
-be used to determine whether to execute rollback action or not and
-the action should modify the `m_persons` object, not its copy.
-This is a most common case but passing a variable by value is
-sometimes useful as well.
-
-Consider a more complex case where `World::addPerson` can save intermediate
-states at some points and roll back to the last saved state. You can
-use `Person::m_evolution` to store a version of changes and increment it
-to cancel all rollback actions associated with those changes.
-
-If you pass a current value of `m_evolution` stored in the `checkpoint`
-variable by value, it will remain unchanged until the end of aa scope
-and you can compare it with the final value of the `m_evolution`.
-If the latter wasn't incremented since you saved it, the rollback action
-inside the block should be executed:
+[section:Getting_Started Getting Started]
- void World::addPerson(Person const& aPerson) {
- m_persons.push_back(aPerson);
-
- // This block must be no-throw
- Person& person = m_persons.back();
- Person::evolution_t checkpoint = person.m_evolution;
-
- BOOST_SCOPE_EXIT( (checkpoint)(&person)(&m_persons) )
- {
- if(checkpoint == person.m_evolution)
- m_persons.pop_back();
- } BOOST_SCOPE_EXIT_END
-
- // ...
-
- checkpoint = ++person.m_evolution;
-
- // Assign new id to the person
- World::id_t const prev_id = person.m_id;
- person.m_id = m_next_id++;
- BOOST_SCOPE_EXIT( (checkpoint)(&person)(&m_next_id)(prev_id) )
- {
- if(checkpoint == person.m_evolution) {
- m_next_id = person.m_id;
- person.m_id = prev_id;
- }
- } BOOST_SCOPE_EXIT_END
-
- // ...
-
- checkpoint = ++person.m_evolution;
- }
+This section explains how to setup a system to use this library.
+
+[section Compilers and Platforms]
+
+The library should be usable on any compiler that supports __Boost_Typeof__ except:
-Full code listing can be found in [@../../example/world.cpp world.cpp].
+* MSVC 7.1 and 8.0 fail to link if a function with __Boost_ScopeExit__ is included by multiple translation units.
+Furthermore, on MSVC 7.1 and 8.0 it is possible to capture the object `this_` only with native __Boost_Typeof__ (and not in __typeof_emulation__ mode).
+* GCC 3.3 cannot compile __Boost_ScopeExit__ inside a template (see [@http://lists.boost.org/Archives/boost/2007/02/116235.php] for more details).
+
+The authors tested the library on GCC 3.3, 3.4, 4.1, 4.2, 4.5.3 (with and without C++11 features [^-std=c++0x]), MSVC 8.0, and Intel 10.1 under Linux, Cygwin, and Windows 7.
[endsect]
-[section:alt_relwork Alternatives and Related Work]
+[section Installation]
-[h3 try-catch]
+This library is composed of header files only.
+Therefore there is no pre-compiled object file which needs to be installed.
+Programmers can simply instruct the compiler where to find the library header files (`-I` option on GCC, `/I` option on MSVC, etc) and compile code using the library.
-This is an example of using a badly designed `File` class. An
-instance of `File` doesn't close a file in a destructor, a programmer
-is expected to call the `close` member function explicitly.
+The library implementation uses __Boost_Typeof__ to automatically deduce the types of the __Boost_ScopeExit__ captured variables (see the __Tutorial__ section).
+In order to compile code in __typeof_emulation__ mode, all types should be properly registered with __BOOST_TYPEOF_REGISTER_TYPE__ or __BOOST_TYPEOF_REGISTER_TEMPLATE__ macros, or appropriate __Boost_Typeof__ headers should be included.
- File passwd;
- try {
- passwd.open("/etc/passwd");
- // ...
- passwd.close();
- }
- catch(...) {
- log("could not get user info");
- if(passwd.is_open())
- passwd.close();
- throw;
- }
+[endsect]
-Note the following:
+[endsect]
-* the `passwd` object is defined outside of the `try` block because
-this object is required inside the `catch` block to close the file,
-* the `passwd` object is not fully constructed until after the `open`
-member function returns, and
-* if opening throws, the `passwd.close()` should not be called,
-hence the call to `passwd.is_open()`.
+[section:Tutorial Tutorial]
-_scope_exit_ doesn't have any of these problems:
+This section illustrates how to use this library.
- try {
- File passwd("/etc/passwd");
- BOOST_SCOPE_EXIT( (&passwd) ) {
- passwd.close();
- } BOOST_SCOPE_EXIT_END
- // ...
- }
- catch(...) {
- log("could not get user info");
- throw;
- }
+[section Capturing Variables]
+
+Imagine that we want to make many modifications to data members of some `world` class in its `world::add_person` member function.
+We start with adding a new `person` object to a vector of persons:
+
+ void world::add_person(person const& a_person) {
+ bool commit = false;
+
+ persons_.push_back(a_person); // (1) direct action
+ ...
+
+Some operations down the road may throw an exception and all changes to involved objects should be rolled back.
+This all-or-nothing semantic is also known as __strong_guarantee__.
+
+In particular, the last added person must be deleted from `persons_` if the function throws.
+All we need is to define a delayed action (release of a resource) right after the direct action (resource acquisition).
+For example (see also [@../../test/world.cpp =world.cpp=]):
+
+[world]
+
+The block below point =(1)= is a __Boost_ScopeExit__ declaration.
+Unlike point =(1)=, an execution of the __Boost_ScopeExit__ body will be delayed until the end of the current scope. In this case it will be executed either after point =(4)= or on any exception.
+(On various versions of the GCC compiler, it is necessary to use [macroref BOOST_SCOPE_EXIT_TPL] instead of [macroref BOOST_SCOPE_EXIT] within templates, see later in this section for details.)
+
+The __Boost_ScopeExit__ declaration starts with the [macroref BOOST_SCOPE_EXIT] macro invocation which accepts a comma-separated list of captured variables (a __Boost_Preprocessor__ sequence is also accepted here for compilers that do not support variadic macros and for backward compatibility with older versions of this library, see the __No_Variadic_Macros__ section).
+If a capture starts with the ampersand sign `&`, a reference to the captured variable will be available inside the __Boost_ScopeExit__ body; otherwise, a copy of the variable will be made after the __Boost_ScopeExit__ declaration at point =(1)= and only the copy will be available inside the body (in this case, the captured variable's type must be `CopyConstructible`).
+
+In the example above, the variables `commit` and `persons_` are captured by reference because the final value of the `commit` variable should be used to determine whether to execute rollback actions or not and the action should modify the `persons_` object, not its copy.
+This is the most common case but passing a variable by value is sometimes useful as well.
+
+Finally, the end of the __Boost_ScopeExit__ body must be marked by the [macroref BOOST_SCOPE_EXIT_END] macro which must follow the closing curly bracket `}` of the __Boost_ScopeExit__ body.
+On C++11 it is also possible (but not required) to use a semi-column `;` instead of the [macroref BOOST_SCOPE_EXIT_END] macro.
+[footnote
+The macro [macroref BOOST_SCOPE_EXIT_END] can still be used on C++11 to write portable code that can be used on both C++03 and C++11 compilers.
+Using `;` instead of [macroref BOOST_SCOPE_EXIT_END] on C++03 compilers will generate a (possibly cryptic) compiler error.
+]
-[h3 RAII]
+[important
+In order to comply with the STL exception safety requirements, the __Boost_ScopeExit__ body must never throw (because the library implementation executes the body within a destructor).
+This is true for all __Boost_ScopeExit__ macros (including [macroref BOOST_SCOPE_EXIT_TPL] and [macroref BOOST_SCOPE_EXIT_ALL]) on both C++03 and C++11.
+]
+
+Consider a more complex example where `world::add_person` can save intermediate states at some point and roll back to the last saved state.
+We use `person::evolution_` to store a version of the changes and increment it to cancel all rollback actions associated with those changes.
+If we pass a current value of `evolution_` stored in the `checkpoint` variable by value, it remains unchanged within the __Boost_ScopeExit__ body so we can compare it with the final value of `evolution_`.
+If the latter was not incremented since we saved it, the rollback action inside the __Boost_ScopeExit__ body should be executed.
+For example (see also [@../../test/world_checkpoint.cpp =world_checkpoint.cpp=]):
+
+[world_checkpoint]
+
+When multiple __Boost_ScopeExit__ blocks are declared within the same enclosing scope, the __Boost_ScopeExit__ bodies are executed in the reversed order of their declarations.
+
+[endsect]
+
+[section Capturing The Object `this`]
-_RAII_ is absolutely perfect for the `File` class introduced above.
-Use of a properly designed `File` class would look like:
+Within a member function, it is also possible to capture the object `this`.
+However, the special symbol `this_` must be used instead of `this` in the __Boost_ScopeExit__ declaration and body to capture and access the object.
+For example (see also [@../../test/world_this.cpp =world_this.cpp=]):
+
+[world_this_]
+
+On C++11, it is possible (but not required) to directly use `this` instead of the special symbol `this_`.
+[footnote
+The special symbol `this_` can still be used on C++11 to write portable code that can be used on both C++03 and C++11 compilers.
+Unfortunately, using `this` instead of `this_` on C++03 compilers leads to undefined behaviour (it will likely generate a compiler error but that is not guaranteed).
+]
+For example (see also [@../../test/world_this.cpp =world_this.cpp=]):
+
+[world_this]
+
+It is never possible to capture the object `this_` (or `this`) by reference because C++ does not allow to take a reference to `this`.
+If the enclosing member function is constant then the captured object will also be constant, otherwise the captured object will be mutable.
+
+[endsect]
+
+[section Capturing No Variable]
+
+It is possible to declare __Boost_ScopeExit__ code that captures no variable.
+In this case, the list of captured variables is replaced by the `void` keyword (similarly to the C syntax that allows to declare a function with no parameter using [^['result-type function-name]]`(void)`).
+[footnote
+*Rationale.*
+Unfortunately, it is not possible to simply invoke the __Boost_ScopeExit__ macro with no parameters `BOOST_SCOPE_EXIT()` because the preprocessor cannot detect emptiness of a macro parameter when the parameter can start with a non-alphanumeric symbol (which is the case when capturing a variable by reference `&variable`).
+]
+For example, this can be useful when the __Boost_ScopeExit__ body only needs to access global variables (see also [@../../test/world_void.cpp =world_void.cpp=]):
+
+[world_void]
+
+This same syntax is supported for both compilers with and without variadic macro support.
+
+[endsect]
+
+[section Capturing All Variables (C++11 Only)]
+
+On C++11 compliers, it is also possible to capture all the variables in scope without naming them one by one using the special macro [macroref BOOST_SCOPE_EXIT_ALL] instead of [macroref BOOST_SCOPE_EXIT].
+[footnote
+*Rationale.*
+The [macroref BOOST_SCOPE_EXIT_ALL] macro is only defined on C++11 compilers.
+Using [macroref BOOST_SCOPE_EXIT_ALL] on C++03 compilers will generate a (possibly cryptic) compiler error.
+Note that a new macro [macroref BOOST_SCOPE_EXIT_ALL] needed to be introduced instead of reusing [macroref BOOST_SCOPE_EXIT] because `BOOST_SCOPE_EXIT(&)` and `BOOST_SCOPE_EXIT(=)` could not be distinguished from `BOOST_SCOPE_EXIT(void)` or `BOOST_SCOPE_EXIT(this_)` using the preprocessor because the symbols `&` and `=` are neither prefxied or postfixed by alphanumeric tokens (this is not an issue for [macroref BOOST_SCOPE_EXIT_ALL] which always has `&` or `=` as the first capture so the first capture token is never compared with neither `void` or `this_` for this macro).
+]
+
+Following the same syntax adopted by C++11 lambdas, the [macroref BOOST_SCOPE_EXIT_ALL] macro accepts a comma-separated list of captures which must start with either `&` or `=` to capture all variables in scope respectively by reference or by value (note that no variable name is specified by these leading captures).
+Additional captures of specific variables can follow the leading `&` or `=` and they will override the default reference or value captures.
+For example (see also [@../../test/world_checkpoint_all.cpp =world_checkpoint_all.cpp=]):
+
+[world_checkpoint_all]
+
+The first __Boost_ScopeExit__ declaration captures all variables in scope by reference but `checkpoint` and `this_` which are explicitly captured by value (in particular, `p` and `persons_` are captured by reference).
+The second __Boost_ScopeExit__ declaration instead captures all variables in scope by value but `p` which is captured by reference (in particular, `checkpoint`, `prev_id`, and `this` are captured by value).
+
+[endsect]
+
+[section GCC Template Workaround]
+
+Various versions of the GCC compiler do not compile [macroref BOOST_SCOPE_EXIT] inside templates (see the __Reference__ section for more information).
+As a workaround, [macroref BOOST_SCOPE_EXIT_TPL] should be used instead of [macroref BOOST_SCOPE_EXIT] in these cases:
+[footnote
+GCC versions compliant with C++11 do not present this issue and given that [macroref BOOST_SCOPE_EXIT_ALL] is only available on C++11 compilers, there is no need for a `BOOST_SCOPE_EXIT_ALL_TPL` macro.
+]
+
+[world_tpl]
+
+The [macroref BOOST_SCOPE_EXIT_TPL] macro has the exact same syntax of [macroref BOOST_SCOPE_EXIT].
+
+[endsect]
+
+[endsect]
+
+[xinclude reference.xml]
+
+[section:Alternatives Annex: Alternatives]
+
+This section presents some alternatives and work related to __Boost_ScopeExit__.
+
+[h5 Try-Catch]
+
+This is an example of using a badly designed `file` class.
+An instance of `file` does not close the file in its destructor, a programmer is expected to call the `close` member function explicitly.
+For example (see also [@../../example/try_catch.cpp =try_catch.cpp=]):
+
+[try_catch_bad]
+
+Note the following issues with this approach:
+
+* The `passwd` object is defined outside of the `try` block because this object is required inside the `catch` block to close the file.
+* The `passwd` object is not fully constructed until after the `open`
+member function returns.
+* If opening throws, the `passwd.close()` should not be called, hence the call to `passwd.is_open()`.
+
+The __Boost_ScopeExit__ approach does not have any of these issues.
+For example (see also [@../../example/try_catch.cpp =try_catch.cpp=]):
+
+[try_catch_good]
+
+[h5 RAII]
+
+__RAII__ is absolutely perfect for the `file` class introduced above.
+Use of a properly designed `file` class would look like:
try {
- File passwd("/etc/passwd");
+ file passwd("/etc/passwd");
// ...
- }
- catch(...) {
- log("could not get user info");
+ } catch(...) {
+ std::clog << "could not get user info" << std::endl;
throw;
}
-However, using _RAII_ to build up a _strong_guarantee_ could introduce
-a lot of non-reusable _RAII_ types. For example:
+However, using __RAII__ to build up a __strong_guarantee__ could introduce a lot of non-reusable __RAII__ types.
+For example:
- m_persons.push_back(person);
- pop_back_if_not_commit pop_back_if_not_commit_guard(commit, m_persons);
+ persons_.push_back(a_person);
+ pop_back_if_not_commit pop_back_if_not_commit_guard(commit, persons_);
-The `pop_back_if_not_commit` class is either defined out of the scope or
-as a local class:
+The `pop_back_if_not_commit` class is either defined out of the scope or as a local class:
class pop_back_if_not_commit {
- bool m_commit;
- std::vector<Person>& m_vec;
+ bool commit_;
+ std::vector<person>& vec_;
// ...
~pop_back_if_not_commit() {
- if(!m_commit)
- m_vec.pop_back();
+ if(!commit_) vec_.pop_back();
}
};
-In some cases _strong_guarantee_ can be accomplished with standard utilities:
+In some cases __strong_guarantee__ can be accomplished with standard utilities:
- std::auto_ptr<Person> spSuperMan(new Superman);
- m_persons.push_back(spSuperMan.get());
- spSuperMan.release(); // m_persons successfully took ownership.
+ std::auto_ptr<Person> superman_ptr(new superman());
+ persons_.push_back(superman_ptr.get());
+ superman_ptr.release(); // persons_ successfully took ownership
-or with specialized containers such as _ptr_container_ or
-_multi_index_.
+Or with specialized containers such as __Boost_PointerContainer__ or __Boost_Multi_Index__.
-[h3 _scope_guard_]
+[h5 Scope Guards]
-Imagine that you add a new currency rate:
+Imagine that a new currency rate is introduced before performing a transaction:
- bool commit = false;
- std::string currency("EUR");
- double rate = 1.3326;
- std::map<std::string, double> rates;
- bool currency_rate_inserted =
- rates.insert(std::make_pair(currency, rate)).second;
+[scope_guard_decl]
-and then continue a transaction. If it cannot be completed, you erase
-the currency from `rates`. This is how you can do this with _scope_guard_
-and _lambda_:
+If the transaction does not complete, the currency must be erased from `rates`.
+This can be done with __ScopeGuard__ and __Boost_Lambda__ (or __Boost_Phoenix__):
- using namespace boost::lambda;
-
- ON_BLOCK_EXIT(
- if_(currency_rate_inserted && !_1) [
- bind(
- static_cast<
- std::map<std::string,double>::size_type (std::map<std::string,double>::*)(std::string const&)
- >(&std::map<std::string,double>::erase)
- , &rates
- , currency
- )
- ]
- , boost::cref(commit)
- );
-
- // ...
-
- commit = true;
+ using namespace boost::lambda;
-Note that
+ ON_BLOCK_EXIT(
+ if_(currency_rate_inserted && !_1) [
+ bind(
+ static_cast<
+ std::map<std::string, double>::size_type
+ (std::map<std::string, double>::*)(std::string const&)
+ >(&std::map<std::string, double>::erase)
+ , &rates
+ , currency
+ )
+ ]
+ , boost::cref(commit)
+ );
-* Boost.lambda expressions are hard to write correctly, for example,
-overloaded function must be explicitly casted, as demonstrated in
-this example,
-* condition in `if_` expression refers to `commit` variable indirectly
-through the `_1` placeholder,
-* setting a breakpoint inside `if_[ ... ]` requires in-depth knowledge
-of _lambda_ and debugging techniques.
-
-This code will look much better with native lambda expressions proposed
-for C++0x:
-
- ON_BLOCK_EXIT(
- [currency_rate_inserted, &commit, &rates, ¤cy]() -> void
- {
- if(currency_rate_inserted && !commit)
- rates.erase(currency);
- }
- );
+ // ...
-With _scope_exit_ you can simply do
+ commit = true;
- BOOST_SCOPE_EXIT( (currency_rate_inserted)(&commit)(&rates)(¤cy) )
- {
- if(currency_rate_inserted && !commit)
- rates.erase(currency);
- } BOOST_SCOPE_EXIT_END
-
- // ...
-
- commit = true;
+Note the following issues with this approach:
-[h3 C++0x]
+* __Boost_Lambda__ expressions are hard to write correctly (e.g., overloaded functions must be explicitly casted, as demonstrated in the example above).
+* The condition in the `if_` expression refers to `commit` variable indirectly through the `_1` placeholder reducing readability.
+* Setting a breakpoint inside `if_[...]` requires in-depth knowledge of __Boost_Lambda__ and debugging techniques.
-In future releases _scope_exit_ will take advantages of C++0x features.
+This code will look much better with C++11 lambdas:
-* Passing capture list as _pp_seq_ will be replaced with a traditional
-macro invocation style:
+ ON_BLOCK_EXIT(
+ [currency_rate_inserted, &commit, &rates, ¤cy]() {
+ if(currency_rate_inserted && !commit) rates.erase(currency);
+ }
+ );
+
+ // ...
+
+ commit = true;
- BOOST_SCOPE_EXIT(currency_rate_inserted, &commit, &rates, ¤cy)
- {
- if(currency_rate_inserted && !commit)
- rates.erase(currency);
- } BOOST_SCOPE_EXIT_END
-
-* `BOOST_SCOPE_EXIT_END` will be replaced with a semicolon:
+With __Boost_ScopeExit__ we can simply do the following (see also [@../../example/scope_guard.cpp =scope_guard.cpp=]):
- BOOST_SCOPE_EXIT(currency_rate_inserted, &commit, &rates, ¤cy)
- {
- if(currency_rate_inserted && !commit)
- rates.erase(currency);
- };
+[scope_guard_exit]
-* Users will be able to capture local variables implicitly with lambda
-capture defaults `&` and `=`:
+[h5 The D Programming Language]
- BOOST_SCOPE_EXIT(&, currency_rate_inserted)
- {
- if(currency_rate_inserted && !commit)
- rates.erase(currency);
- };
+__Boost_ScopeExit__ is similar to __D_scope_exit__ feature built into the __D__ programming language.
-* It will be possible to capture `this` pointer.
+A curious reader may notice that the library does not implement `scope(success)` and `scope(failure)` of the __D__ language.
+Unfortunately, these are not possible in C++ because failure or success conditions cannot be determined by calling `std::uncaught_exception` (see [@http://www.gotw.ca/gotw/047.htm Guru of the Week #47] for more details about `std::uncaught_exception` and if it has any good use at all).
+However, this is not a big problem because these two __D__'s constructs can be expressed in terms of __D_scope_exit__ and a `bool commit` variable as explained in the __Tutorial__ section.
-[h3 The D Programming Language]
+[h5 C++11 Lambdas]
-_ScopeExit_ is similar to _D_scope_exit_ feature built
-into the _D_ programming language.
+Using C++11 lambdas, it is relatively easy to implement the __Boost_ScopeExit__ construct.
+For example (see also [@../../test/world_lambda.cpp =world_lambda.cpp=]):
-A curious reader may notice that the library doesn't implement
-`scope(success)` and `scope(failure)` of the _D_ language.
-Unfortunately, it's not possible in C++ because failure or success
-condition cannot be determined by calling `std::uncaught_exception`.
-It's not a big problem, though. These two constructs can be
-expressed in terms of _D_scope_exit_ and a `bool commit` variable
-as explained in _Tutorial_. Refer to
-[@http://www.gotw.ca/gotw/047.htm Guru of the Week #47]
-for more details about `std::uncaught_exception` and if it has
-any good use at all.
+[world_lambda]
+
+However, this library allows to program the __Boost_ScopeExit__ construct in a way that is portable between C++03 and C++11 compilers.
[endsect]
-[section:compilers Supported Compilers]
+[section:No_Variadic_Macros Annex: No Variadic Macros]
-The library should be usable on any compiler that supports _typeof_
-except
+This section presents an alternative syntax for compilers without variadic macro support.
-* MSVC 7.1 and 8.0 fail to link if a function with _scope_exit_
-is included by multiple translation units.
-* GCC 3.3 can't compile _scope_exit_ inside a template. See
-[@http://lists.boost.org/Archives/boost/2007/02/116235.php this thread]
-for more details.
+[h5 Sequence Syntax]
-The author tested the library on GCC 3.3, 3.4, 4.1, 4.2 and Intel 10.1.
+Most modern compilers support variadic macros (notably, these include GCC, MSVC, and all C++11 compilers).
+However, in the rare case that programmers need to use this library on a complier without variaidc macros, this library also allows to specify the capture list using a __Boost_Preprocessor__ sequence where tokens are separated by round parenthesis `()`:
-[endsect]
+ (capture1) (capture2) ... // All compilers.
-[section:conf Configuration]
+Instead of the comma-separated list that we have seen so far which requires variadic macros:
-Normally, no configuration is required for the library but
-note that the library depends on _typeof_ and you may want
-to configure or enforce _typeof_emulation_.
+ capture1, capture2, ... // Only compilers with variadic macros.
-[endsect]
+For example, the following syntax is accepted on all compilers with and without variadic macros (see also [@../../test/world_seq.cpp =world_seq.cpp=]):
-[section:ref Reference]
+[world_seq]
-[h3 BOOST_SCOPE_EXIT]
+Furthermore, older versions of this library used to only support the __Boost_Preprocessor__ sequence syntax so the above syntax is also supported for backward compatibility.
+However, in the current version of this library and on compilers with variadic macros, the comma-separated syntax we have seen so far is preferred because more readable (see also [@../../test/world.cpp =world.cpp=]):
-A _scope_exit_ declaration has the following synopsis:
+[world]
- #include <boost/scope_exit.hpp>
+Note how the same macros accept both syntaxes on compilers with variadic macros and only the __Boost_Preprocessor__ sequence syntax on compilers without variadic macros.
+Finally, an empty capture list is always specified using `void` on compilers with and without variaidc macros (see also [@../../test/world_void.cpp =world_void.cpp=]):
- BOOST_SCOPE_EXIT ( scope-exit-capture-list )
- function-body
- BOOST_SCOPE_EXIT_END
+[world_void]
-where
+[h5 Examples]
- scope-exit-capture-list:
- ( scope-exit-capture )
- scope-exit-capture-list ( scope-exit-capture )
-
- scope-exit-capture:
- identifier
- &identifier
-
-The _scope_exit_ declaration schedules an execution of `scope-exit-body`
-at the end of the current scope. The `scope-exit-body` statements are
-executed in the reverse order of _scope_exit_ declarations in the given
-scope. The scope must be local.
-
-Each `identifier` in `scope-exit-capture-list` must be a valid name
-in enclosing scope and it must appear exactly once in the list.
-If a `scope-exit-capture` starts with the ampersand sign `&`, the
-corresponding `identifier` will be available inside `scope-exit-body`;
-otherwise, a copy of it will be made at the point of _scope_exit_
-declaration and that copy will be available inside `scope-exit-body`.
-In the latter case, the `idenitifer` must be `CopyConstructible`.
-
-Only identifiers listed in `scope-exit-capture-list`, static variables,
-`extern` variables and functions, and enumerations from the enclosing
-scope can be used inside the `scope-exit-body`.
-
-[note `this` pointer is not an identifier and cannot be passed to
-` scope-exit-capture-list`.]
-
-The _scope_exit_ uses _typeof_ to determine types of
-`scope-exit-capture-list` elements. In order to compile code in
-_typeof_emulation_ mode, all types should be registered with
-_typeof_REGISTER_TYPE_ or _typeof_REGISTER_TEMPLATE_ macros,
-or appropriate _typeof_ headers should be included.
-
-[h3 BOOST_SCOPE_EXIT_TPL]
-
-This macro is a workaround for various versions of gcc. These compilers
-don't compile _scope_exit_ declaration inside function templates. As a
-workaround, the `_TPL` suffix should be appended to `BOOST_SCOPE_EXIT`.
-
-The problem boils down to the following code:
-
- template<class T> void foo(T const& t) {
- int i = 0;
- struct Local {
- typedef __typeof__(i) typeof_i;
- typedef __typeof__(t) typeof_t;
- };
- typedef Local::typeof_i i_type;
- typedef Local::typeof_t t_type;
- }
-
- int main() { foo(0); }
+The following is a list of most of the examples presented in this documentation reprogrammed using the __Boost_Preprocessor__ sequence syntax instead of the comma-separated list:
-This can be fixed by adding `typename` in front of `Local::typeof_i` and
-`Local::typeof_t`.
+[table
+ [ [Files] ]
+ [ [[@../../test/world_checkpoint_seq.cpp =world_checkpoint_seq.cpp=]] ]
+ [ [[@../../test/world_this_seq.cpp =world_this_seq.cpp=]] ]
+ [ [[@../../test/world_checkpoint_all_seq.cpp =world_checkpoint_all_seq.cpp=]] ]
+ [ [[@../../test/world_tpl_seq.cpp =world_tpl_seq.cpp=]] ]
+ [ [[@../../example/try_catch_seq.cpp =try_catch_seq.cpp=]] ]
+ [ [[@../../example/scope_guard_seq.cpp =scope_guard_seq.cpp=]] ]
+]
-See also [@http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37920 GCC bug 37920].
+[endsect]
-[note Although `BOOST_SCOPE_EXIT_TPL` has the same suffix as the
-`BOOST_TYPEOF_TPL`, it doesn't follow a convention of the _typeof_.]
+[section:Acknowledgements Acknowledgements]
-[endsect]
+Alexander Nasonov is the original library author.
-[section:acknowledge Acknowledge]
+Lorenzo Caminiti added variadic macro support, capture of the object `this_`, empty captures using `void`, and `BOOST_SCOPE_EXIT_ALL`.
-(in chronological order)
+/Thanks to the following people (in chronological order)./
-Maxim Yegorushkin for sending me a code where he used a local struct
-to clean up resources.
+Maxim Yegorushkin for sharing code where he used a local struct to clean up resources.
-Andrei Alexandrescu for pointing me to _D_scope_exit_ construct of
-the _D_ programming language.
+Andrei Alexandrescu for pointing out the __D_scope_exit__ construct of the __D__ programming language.
-Pavel Vozenilek and Maxim Yanchenko for reviews of early drafts of
-the library.
+Pavel Vozenilek and Maxim Yanchenko for reviews of early drafts of the library.
Steven Watanabe for his valuable ideas.
@@ -477,4 +439,7 @@
Richard Webb for testing the library on MSVC compiler.
+Adam Butcher for a workaround to error C2355 when deducing the type of `this` on some MSVC versions.
+
[endsect]
+
Deleted: branches/quickbook-dev/libs/scope_exit/example/world.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/example/world.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,114 +0,0 @@
-// Copyright Alexander Nasonov 2009
-//
-// Distributed under 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)
-
-#include <vector>
-#include <ostream>
-
-#include <boost/foreach.hpp>
-#include <boost/scope_exit.hpp>
-
-// The following is required for typeof emulation mode:
-#include <boost/typeof/typeof.hpp>
-#include <boost/typeof/std/vector.hpp>
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-class World;
-class Person
-{
- friend class World;
-public:
- typedef unsigned int id_t;
- typedef unsigned int evolution_t;
-
- Person()
- : m_id(0)
- , m_evolution(0)
- {}
-
- friend std::ostream& operator<<(std::ostream& o, Person const& p)
- {
- return o << "Person(" << p.m_id << ", " << p.m_evolution << ')';
- }
-private:
- id_t m_id;
- evolution_t m_evolution;
-};
-
-BOOST_TYPEOF_REGISTER_TYPE(Person)
-
-class World
-{
-public:
- typedef unsigned int id_t;
-
- World()
- : m_next_id(1)
- {}
- void addPerson(Person const& aPerson);
-
- friend std::ostream& operator<<(std::ostream& o, World const& w)
- {
- o << "World(" << w.m_next_id << ", {";
- BOOST_FOREACH(Person const& p, w.m_persons)
- {
- o << ' ' << p << ',';
- }
- return o << "})";
- }
-private:
- id_t m_next_id;
- std::vector<Person> m_persons;
-};
-
-BOOST_TYPEOF_REGISTER_TYPE(World)
-
-void World::addPerson(Person const& aPerson) {
- m_persons.push_back(aPerson);
-
- // This block must be no-throw
- Person& person = m_persons.back();
- Person::evolution_t checkpoint = person.m_evolution;
-
- BOOST_SCOPE_EXIT( (checkpoint)(&person)(&m_persons) )
- {
- if(checkpoint == person.m_evolution)
- m_persons.pop_back();
- } BOOST_SCOPE_EXIT_END
-
- // ...
-
- checkpoint = ++person.m_evolution;
-
- // Assign new id to the person
- World::id_t const prev_id = person.m_id;
- person.m_id = m_next_id++;
- BOOST_SCOPE_EXIT( (checkpoint)(&person)(&m_next_id)(prev_id) )
- {
- if(checkpoint == person.m_evolution) {
- m_next_id = person.m_id;
- person.m_id = prev_id;
- }
- } BOOST_SCOPE_EXIT_END
-
- // ...
-
- checkpoint = ++person.m_evolution;
-}
-
-#include <iostream>
-
-int main()
-{
- Person adam, eva;
- std::cout << adam << '\n';
- std::cout << eva << '\n';
-
- World w;
- w.addPerson(adam);
- w.addPerson(eva);
- std::cout << w << '\n';
-}
-
Modified: branches/quickbook-dev/libs/scope_exit/index.html
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/index.html (original)
+++ branches/quickbook-dev/libs/scope_exit/index.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,16 +1,15 @@
-
-<!--
-Copyright 2009 Alexander Nasonov.
-Distributed under 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)
--->
-
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
-<head>
+ <head>
<meta http-equiv="refresh" content="0; URL=doc/html/index.html">
-</head>
-<body>
-Automatic redirection failed, please go to
-doc/html/index.html
-</body>
+ </head>
+ <body>
+ Automatic redirection failed, click this
+ link <hr>
+ <p>© Copyright Alexander Nasonov, Lorenzo Caminiti, 2006-2012</p>
+ <p>Distributed under the Boost Software License, Version 1.0 (see
+ accompanying file <a href="../../LICENSE_1_0.txt">
+ LICENSE_1_0.txt</a> or a copy at
+ www.boost.org/LICENSE_1_0.txt)</p>
+ </body>
</html>
Modified: branches/quickbook-dev/libs/scope_exit/test/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/scope_exit/test/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,25 +1,62 @@
-# Copyright Alexander Nasonov 2007
-#
-# Distributed under 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)
-# TODO: get rid of dummy .cpp files that only #include other .cpp file.
+# Copyright (C) 2006-2009, 2012 Alexander Nasonov
+# Copyright (C) 2012 Lorenzo Caminiti
+# Distributed under the Boost Software License, Version 1.0
+# (see accompanying file LICENSE_1_0.txt or a copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+# Home at http://www.boost.org/libs/scope_exit
import testing ;
-run native.cpp ../../../libs/test/build//boost_test_exec_monitor : : : <define>BOOST_TYPEOF_NATIVE : ;
-run emulation.cpp ../../../libs/test/build//boost_test_exec_monitor : : : <define>BOOST_TYPEOF_EMULATION : ;
-
-run native_tpl.cpp ../../../libs/test/build//boost_test_exec_monitor : : : <define>BOOST_TYPEOF_NATIVE : ;
-run emulation_tpl.cpp ../../../libs/test/build//boost_test_exec_monitor : : : <define>BOOST_TYPEOF_EMULATION : ;
-
-compile-fail native_const_error.cpp : <define>BOOST_TYPEOF_NATIVE ;
-compile-fail emulation_const_error.cpp : <define>BOOST_TYPEOF_EMULATION ;
-
-compile-fail native_cv_error.cpp : <define>BOOST_TYPEOF_NATIVE ;
-compile-fail emulation_cv_error.cpp : <define>BOOST_TYPEOF_EMULATION ;
-
-run native_tu_test.cpp native_tu1.cpp native_tu2.cpp ../../../libs/test/build//boost_test_exec_monitor : : : <define>BOOST_TYPEOF_NATIVE : ;
-run emulation_tu_test.cpp native_tu1.cpp native_tu2.cpp ../../../libs/test/build//boost_test_exec_monitor : : : <define>BOOST_TYPEOF_EMULATION : ;
+project
+ : requirements
+ <library>/boost/test//boost_test_exec_monitor
+ <library>/boost//unit_test_framework
+ <link>static
+ ;
+
+# Run variadic and sequence syntax (also forcing no variadic macros).
+rule run-vaseq ( file_name )
+{
+ run $(file_name).cpp ;
+ run $(file_name)_seq.cpp ;
+ run $(file_name)_seq.cpp : : : <define>BOOST_NO_VARIADIC_MACROS :
+ $(file_name)_seq_nova : ;
+}
+
+test-suite world_tests
+ : [ run-vaseq world ]
+ [ run-vaseq world_checkpoint ]
+ [ run-vaseq world_checkpoint_all ]
+ [ run world_lambda.cpp ]
+ [ run-vaseq world_this ]
+ [ run-vaseq world_tpl ]
+ [ run world_void.cpp ]
+ ;
+
+test-suite native_tests
+ : [ run native.cpp : : : <define>BOOST_TYPEOF_NATIVE ]
+ [ run native_tpl.cpp : : : <define>BOOST_TYPEOF_NATIVE ]
+ [ run native_this.cpp : : : <define>BOOST_TYPEOF_NATIVE ]
+ [ compile-fail native_const_error.cpp : <define>BOOST_TYPEOF_NATIVE ]
+ [ compile-fail native_cv_error.cpp : <define>BOOST_TYPEOF_NATIVE ]
+ # Following test is known to fail on MSVC 7.1 and 8.0.
+ [ run native_tu_test.cpp native_tu1.cpp native_tu2.cpp : : :
+ <define>BOOST_TYPEOF_NATIVE ]
+ ;
+
+test-suite emulation_tests
+ : [ run native.cpp : : : <define>BOOST_TYPEOF_EMULATION : emulation : ]
+ [ run native_tpl.cpp : : : <define>BOOST_TYPEOF_EMULATION :
+ emulation_tpl : ]
+ [ run native_this.cpp : : : <define>BOOST_TYPEOF_EMULATION :
+ emulation_this : ]
+ [ compile-fail native_const_error.cpp : <define>BOOST_TYPEOF_EMULATION :
+ emulation_const_error : ]
+ [ compile-fail native_cv_error.cpp : <define>BOOST_TYPEOF_EMULATION :
+ emulation_cv_error : ]
+ # Following test is known to fail on MSVC 7.1 and 8.0.
+ [ run native_tu_test.cpp native_tu1.cpp native_tu2.cpp : : :
+ <define>BOOST_TYPEOF_EMULATION : emulation_tu_test : ]
+ ;
Deleted: branches/quickbook-dev/libs/scope_exit/test/emulation.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/emulation.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,8 +0,0 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under 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)
-
-#include "native.cpp"
-
Deleted: branches/quickbook-dev/libs/scope_exit/test/emulation_const_error.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/emulation_const_error.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,7 +0,0 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under 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)
-
-#include "native_const_error.cpp"
Deleted: branches/quickbook-dev/libs/scope_exit/test/emulation_cv_error.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/emulation_cv_error.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,7 +0,0 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under 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)
-
-#include "native_cv_error.cpp"
Deleted: branches/quickbook-dev/libs/scope_exit/test/emulation_tpl.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/emulation_tpl.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,8 +0,0 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under 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)
-
-#include "native_tpl.cpp"
-
Deleted: branches/quickbook-dev/libs/scope_exit/test/emulation_tu_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/emulation_tu_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
+++ (empty file)
@@ -1,7 +0,0 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under 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)
-
-#include "native_tu_test.cpp"
Modified: branches/quickbook-dev/libs/scope_exit/test/native.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/native.cpp (original)
+++ branches/quickbook-dev/libs/scope_exit/test/native.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,140 +1,122 @@
-// Copyright Alexander Nasonov 2007-2008, 2011
-//
-// Distributed under 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)
-#include <iostream>
-#include <ostream>
-#include <string>
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#include <boost/scope_exit.hpp>
-
#include <boost/typeof/typeof.hpp>
#include <boost/typeof/std/string.hpp>
#include <boost/test/unit_test.hpp>
+#include <iostream>
+#include <ostream>
+#include <string>
using namespace boost::unit_test;
std::string g_str;
template<int Dummy = 0>
-struct Holder
-{
+struct Holder {
static long g_long;
};
template<int Dummy> long Holder<Dummy>::g_long;
-void test_non_local()
-{
+void test_non_local(void) {
// ... and one local variable as well:
int i = 0;
- BOOST_SCOPE_EXIT( (i) )
- {
- BOOST_CHECK(i == 0);
- BOOST_CHECK(Holder<>::g_long == 3);
- BOOST_CHECK(g_str == "try: g_str");
+ BOOST_SCOPE_EXIT(void) {
+ BOOST_CHECK( Holder<>::g_long == 3 );
} BOOST_SCOPE_EXIT_END
- BOOST_SCOPE_EXIT( (&i) )
- {
- BOOST_CHECK(i == 3);
- BOOST_CHECK(Holder<>::g_long == 3);
- BOOST_CHECK(g_str == "try: g_str");
+ BOOST_SCOPE_EXIT( (i) ) {
+ BOOST_CHECK( i == 0 );
+ BOOST_CHECK( Holder<>::g_long == 3 );
+ BOOST_CHECK( g_str == "try: g_str" );
+ } BOOST_SCOPE_EXIT_END
+
+ BOOST_SCOPE_EXIT( (&i) ) {
+ BOOST_CHECK( i == 3 );
+ BOOST_CHECK( Holder<>::g_long == 3 );
+ BOOST_CHECK( g_str == "try: g_str" );
} BOOST_SCOPE_EXIT_END
{
g_str = "";
Holder<>::g_long = 1;
- BOOST_SCOPE_EXIT( (&i) )
- {
+ BOOST_SCOPE_EXIT( (&i) ) {
i = 1;
g_str = "g_str";
} BOOST_SCOPE_EXIT_END
- BOOST_SCOPE_EXIT( (&i) )
- {
- try
- {
- i = 2;
- Holder<>::g_long = 2;
- throw 0;
- } catch(...) {}
+ BOOST_SCOPE_EXIT( (&i) ) {
+ try {
+ i = 2;
+ Holder<>::g_long = 2;
+ throw 0;
+ } catch(...) {}
} BOOST_SCOPE_EXIT_END
- BOOST_CHECK(i == 0);
- BOOST_CHECK(g_str == "");
- BOOST_CHECK(Holder<>::g_long == 1);
+ BOOST_CHECK( i == 0 );
+ BOOST_CHECK( g_str == "" );
+ BOOST_CHECK( Holder<>::g_long == 1 );
}
- BOOST_CHECK(Holder<>::g_long == 2);
- BOOST_CHECK(g_str == "g_str");
- BOOST_CHECK(i == 1); // Check that first declared is executed last
-
- BOOST_SCOPE_EXIT( (&i) )
- {
- BOOST_CHECK(i == 3);
- BOOST_CHECK(Holder<>::g_long == 3);
- BOOST_CHECK(g_str == "try: g_str");
+ BOOST_CHECK( Holder<>::g_long == 2 );
+ BOOST_CHECK( g_str == "g_str" );
+ BOOST_CHECK( i == 1 ); // Check that first declared is executed last.
+
+ BOOST_SCOPE_EXIT( (&i) ) {
+ BOOST_CHECK( i == 3 );
+ BOOST_CHECK( Holder<>::g_long == 3 );
+ BOOST_CHECK( g_str == "try: g_str" );
} BOOST_SCOPE_EXIT_END
- BOOST_SCOPE_EXIT( (i) )
- {
- BOOST_CHECK(i == 1);
- BOOST_CHECK(Holder<>::g_long == 3);
- BOOST_CHECK(g_str == "try: g_str");
+ BOOST_SCOPE_EXIT( (i) ) {
+ BOOST_CHECK( i == 1 );
+ BOOST_CHECK( Holder<>::g_long == 3 );
+ BOOST_CHECK( g_str == "try: g_str" );
} BOOST_SCOPE_EXIT_END
- try
- {
- BOOST_SCOPE_EXIT( (&i) )
- {
+ try {
+ BOOST_SCOPE_EXIT( (&i) ) {
i = 3;
g_str = "try: g_str";
} BOOST_SCOPE_EXIT_END
- BOOST_SCOPE_EXIT( (&i) )
- {
+ BOOST_SCOPE_EXIT( (&i) ) {
i = 4;
Holder<>::g_long = 3;
} BOOST_SCOPE_EXIT_END
- BOOST_CHECK(i == 1);
- BOOST_CHECK(g_str == "g_str");
- BOOST_CHECK(Holder<>::g_long == 2);
+ BOOST_CHECK( i == 1 );
+ BOOST_CHECK( g_str == "g_str" );
+ BOOST_CHECK( Holder<>::g_long == 2 );
throw 0;
- }
- catch(int)
- {
- BOOST_CHECK(Holder<>::g_long == 3);
- BOOST_CHECK(g_str == "try: g_str");
- BOOST_CHECK(i == 3); // Check that first declared is executed last
+ } catch(int) {
+ BOOST_CHECK( Holder<>::g_long == 3 );
+ BOOST_CHECK( g_str == "try: g_str" );
+ BOOST_CHECK( i == 3 ); // Check that first declared is executed last.
}
}
-bool foo()
-{
- return true;
-}
+bool foo(void) { return true; }
-bool foo2()
-{
- return false;
-}
+bool foo2(void) { return false; }
-void test_types()
-{
- bool (*pf)() = 0;
- bool (&rf)() = foo;
+void test_types(void) {
+ bool (*pf)(void) = 0;
+ bool (&rf)(void) = foo;
bool results[2] = {};
{
- BOOST_SCOPE_EXIT( (&results)(&pf)(&rf) )
- {
+ BOOST_SCOPE_EXIT( (&results) (&pf) (&rf) ) {
results[0] = pf();
results[1] = rf();
}
@@ -142,16 +124,15 @@
pf = &foo;
- BOOST_CHECK(results[0] == false);
- BOOST_CHECK(results[1] == false);
+ BOOST_CHECK( results[0] == false );
+ BOOST_CHECK( results[1] == false );
}
- BOOST_CHECK(results[0] == true);
- BOOST_CHECK(results[1] == true);
+ BOOST_CHECK( results[0] == true );
+ BOOST_CHECK( results[1] == true );
{
- BOOST_SCOPE_EXIT( (&results)(pf) )
- {
+ BOOST_SCOPE_EXIT( (&results) (pf) ) {
results[0] = !pf();
results[1] = !pf();
pf = &foo2; // modify a copy
@@ -160,61 +141,56 @@
pf = 0;
- BOOST_CHECK(results[0] == true);
- BOOST_CHECK(results[1] == true);
+ BOOST_CHECK( results[0] == true );
+ BOOST_CHECK( results[1] == true );
}
- BOOST_CHECK(pf == 0);
- BOOST_CHECK(results[0] == false);
- BOOST_CHECK(results[1] == false);
+ BOOST_CHECK( pf == 0 );
+ BOOST_CHECK( results[0] == false );
+ BOOST_CHECK( results[1] == false );
}
-void test_cxx0x()
-{
-#if defined(BOOST_SCOPE_EXIT_AUX_CXX0X)
+void test_cpp11(void) {
+#if !defined(BOOST_NO_LAMBDAS) && !defined(BOOST_SCOPE_EXIT_CONFIG_NO_CPP11)
int i = 0, j = 1;
{
- BOOST_SCOPE_EXIT((=))
- {
+ BOOST_SCOPE_EXIT_ALL(=) {
i = j = 1; // modify copies
};
}
- BOOST_CHECK(i == 0);
- BOOST_CHECK(j == 1);
+ BOOST_CHECK( i == 0 );
+ BOOST_CHECK( j == 1 );
{
- BOOST_SCOPE_EXIT((&))
- {
+ BOOST_SCOPE_EXIT_ALL(&) {
i = 1;
j = 2;
};
- BOOST_CHECK(i == 0);
- BOOST_CHECK(j == 1);
+ BOOST_CHECK( i == 0 );
+ BOOST_CHECK( j == 1 );
}
- BOOST_CHECK(i == 1);
- BOOST_CHECK(j == 2);
+ BOOST_CHECK( i == 1 );
+ BOOST_CHECK( j == 2 );
{
- BOOST_SCOPE_EXIT((=)(&j))
- {
+ BOOST_SCOPE_EXIT_ALL(=, &j) {
i = 2; // modify a copy
j = 3;
};
- BOOST_CHECK(i == 1);
- BOOST_CHECK(j == 2);
+ BOOST_CHECK( i == 1 );
+ BOOST_CHECK( j == 2 );
}
- BOOST_CHECK(i == 1);
- BOOST_CHECK(j == 3);
-
+ BOOST_CHECK( i == 1 );
+ BOOST_CHECK( j == 3 );
#endif
}
-test_suite* init_unit_test_suite( int, char* [] )
-{
+test_suite* init_unit_test_suite(int, char* []) {
framework::master_test_suite().p_name.value = "Unit test for ScopeExit";
- framework::master_test_suite().add( BOOST_TEST_CASE( &test_non_local ));
- framework::master_test_suite().add( BOOST_TEST_CASE( &test_types ));
- framework::master_test_suite().add( BOOST_TEST_CASE( &test_cxx0x ));
+ framework::master_test_suite().add(BOOST_TEST_CASE(&test_non_local));
+ framework::master_test_suite().add(BOOST_TEST_CASE(&test_types));
+ framework::master_test_suite().add(BOOST_TEST_CASE(&test_cpp11));
return 0;
}
+
Modified: branches/quickbook-dev/libs/scope_exit/test/native_const_error.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/native_const_error.cpp (original)
+++ branches/quickbook-dev/libs/scope_exit/test/native_const_error.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,16 +1,16 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#include <boost/scope_exit.hpp>
-int main()
-{
+int main(void) {
int const i = 0;
- BOOST_SCOPE_EXIT( (&i) )
- {
+ BOOST_SCOPE_EXIT( (&i) ) {
i = 5;
} BOOST_SCOPE_EXIT_END
}
Modified: branches/quickbook-dev/libs/scope_exit/test/native_cv_error.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/native_cv_error.cpp (original)
+++ branches/quickbook-dev/libs/scope_exit/test/native_cv_error.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,21 +1,19 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under 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)
-#include <string>
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#include <boost/scope_exit.hpp>
-
#include <boost/typeof/typeof.hpp>
#include <boost/typeof/std/string.hpp>
+#include <string>
-int main()
-{
+int main(void) {
std::string const volatile s;
- BOOST_SCOPE_EXIT( (&s) )
- {
+ BOOST_SCOPE_EXIT( (&s) ) {
s = "";
} BOOST_SCOPE_EXIT_END
}
Modified: branches/quickbook-dev/libs/scope_exit/test/native_tpl.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/native_tpl.cpp (original)
+++ branches/quickbook-dev/libs/scope_exit/test/native_tpl.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,76 +1,71 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under 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)
-#include <iostream>
-#include <ostream>
-#include <vector>
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#include <boost/scope_exit.hpp>
-
#include <boost/rational.hpp>
#include <boost/typeof/typeof.hpp>
#include <boost/typeof/std/vector.hpp>
#include <boost/test/unit_test.hpp>
+#include <iostream>
+#include <ostream>
+#include <vector>
using namespace boost::unit_test;
template<class type>
-void tpl_long( type tval
- , type& t
- , type const& tc
- , type volatile& tv
- , type const volatile& tcv
- )
-{
+void tpl_long(
+ type tval
+ , type & t
+ , type const& tc
+ , type volatile& tv
+ , type const volatile& tcv
+) {
int i = 0; // non-dependent name
type const remember(tval);
{
- BOOST_SCOPE_EXIT_TPL( (&tval)(&t)(&tc)(&tv)(&tcv)(&i) )
- {
+ BOOST_SCOPE_EXIT_TPL( (&tval) (&t) (&tc) (&tv) (&tcv) (&i) ) {
tval = 1;
++t;
++tv;
- }
- BOOST_SCOPE_EXIT_END
+ } BOOST_SCOPE_EXIT_END
- BOOST_CHECK(t == remember);
- BOOST_CHECK(tval == remember);
+ BOOST_CHECK( t == remember );
+ BOOST_CHECK( tval == remember );
}
- BOOST_CHECK(tval == 1);
- BOOST_CHECK(t == remember + 2);
+ BOOST_CHECK( tval == 1 );
+ BOOST_CHECK( t == remember + 2 );
}
template<class Vector, int Value>
-void tpl_vector( Vector vval
- , Vector& v
- , Vector const& vc
- )
-{
+void tpl_vector(
+ Vector vval
+ , Vector & v
+ , Vector const& vc
+) {
Vector const remember(vval);
{
- BOOST_SCOPE_EXIT_TPL( (&vval)(&v)(&vc) )
- {
+ BOOST_SCOPE_EXIT_TPL( (&vval) (&v) (&vc) ) {
v.push_back(-Value);
vval.push_back(Value);
- }
- BOOST_SCOPE_EXIT_END
+ } BOOST_SCOPE_EXIT_END
- BOOST_CHECK(v.size() == remember.size());
- BOOST_CHECK(vval.size() == remember.size());
+ BOOST_CHECK( v.size() == remember.size() );
+ BOOST_CHECK( vval.size() == remember.size() );
}
- BOOST_CHECK(v.size() == 1 + remember.size());
- BOOST_CHECK(vval.size() == 1 + remember.size());
+ BOOST_CHECK( v.size() == 1 + remember.size() );
+ BOOST_CHECK( vval.size() == 1 + remember.size() );
}
-void test_tpl()
-{
+void test_tpl(void) {
long l = 137;
tpl_long(l, l, l, l, l);
@@ -78,10 +73,9 @@
tpl_vector<std::vector<int>, 13>(v, v, v);
}
-test_suite* init_unit_test_suite( int, char* [] )
-{
+test_suite* init_unit_test_suite(int, char* []) {
framework::master_test_suite().p_name.value = "Unit test for ScopeExit TPL";
- framework::master_test_suite().add( BOOST_TEST_CASE( &test_tpl ));
+ framework::master_test_suite().add(BOOST_TEST_CASE(&test_tpl));
return 0;
}
Modified: branches/quickbook-dev/libs/scope_exit/test/native_tu1.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/native_tu1.cpp (original)
+++ branches/quickbook-dev/libs/scope_exit/test/native_tu1.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,13 +1,14 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#include "tu_test.hpp"
-int tu1()
-{
+int tu1(void) {
return inline_f() + template_f(1);
}
Modified: branches/quickbook-dev/libs/scope_exit/test/native_tu2.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/native_tu2.cpp (original)
+++ branches/quickbook-dev/libs/scope_exit/test/native_tu2.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,13 +1,14 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#include "tu_test.hpp"
-int tu2()
-{
+int tu2(void) {
return inline_f() + template_f(2);
}
Modified: branches/quickbook-dev/libs/scope_exit/test/native_tu_test.cpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/native_tu_test.cpp (original)
+++ branches/quickbook-dev/libs/scope_exit/test/native_tu_test.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,24 +1,24 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#include "tu_test.hpp"
-
#include <boost/test/unit_test.hpp>
using namespace boost::unit_test;
-void test()
-{
- BOOST_CHECK(tu1() == 1);
- BOOST_CHECK(tu2() == 2);
+void test(void) {
+ BOOST_CHECK( tu1() == 1 );
+ BOOST_CHECK( tu2() == 2 );
}
-test_suite* init_unit_test_suite( int, char* [] )
-{
+test_suite* init_unit_test_suite(int, char* []) {
framework::master_test_suite().p_name.value = "TU unit test for ScopeExit";
- framework::master_test_suite().add( BOOST_TEST_CASE( &test ));
+ framework::master_test_suite().add(BOOST_TEST_CASE(&test));
return 0;
}
+
Modified: branches/quickbook-dev/libs/scope_exit/test/tu_test.hpp
==============================================================================
--- branches/quickbook-dev/libs/scope_exit/test/tu_test.hpp (original)
+++ branches/quickbook-dev/libs/scope_exit/test/tu_test.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1,37 +1,42 @@
-// Copyright Alexander Nasonov 2007-2008
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
+
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/scope_exit
#include <boost/scope_exit.hpp>
-int tu1();
-int tu2();
+int tu1(void);
+int tu2(void);
-inline int inline_f()
-{
+inline int inline_f(void) {
int i = 99;
{
- BOOST_SCOPE_EXIT( (&i) ) { i = -1; } BOOST_SCOPE_EXIT_END
+ BOOST_SCOPE_EXIT( (&i) ) {
+ i = -1;
+ } BOOST_SCOPE_EXIT_END
}
return i;
}
#if !defined(BOOST_SCOPE_EXIT_AUX_GCC) || BOOST_SCOPE_EXIT_AUX_GCC >= 304
template<class Int>
-Int template_f(Int i)
-{
+Int template_f(Int i) {
{
- BOOST_SCOPE_EXIT_TPL( (&i) ) { ++i; } BOOST_SCOPE_EXIT_END
+ BOOST_SCOPE_EXIT_TPL( (&i) ) {
+ ++i;
+ } BOOST_SCOPE_EXIT_END
}
return i;
}
#else
-inline int template_f(int i)
-{
+inline int template_f(int i) {
{
- BOOST_SCOPE_EXIT( (&i) ) { ++i; } BOOST_SCOPE_EXIT_END
+ BOOST_SCOPE_EXIT( (&i) ) {
+ ++i;
+ } BOOST_SCOPE_EXIT_END
}
return i;
}
Modified: branches/quickbook-dev/libs/serialization/test/test_complex.cpp
==============================================================================
--- branches/quickbook-dev/libs/serialization/test/test_complex.cpp (original)
+++ branches/quickbook-dev/libs/serialization/test/test_complex.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -12,9 +12,6 @@
#include <cstddef> // NULL
#include <cstdlib> // rand
-#include <limits>
-#include <boost/config.hpp>
-
#include <cstdio> // remove
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
@@ -25,6 +22,9 @@
}
#endif
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+
#include "test_tools.hpp"
#include <boost/preprocessor/stringize.hpp>
#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
Modified: branches/quickbook-dev/libs/serialization/test/test_cyclic_ptrs.cpp
==============================================================================
--- branches/quickbook-dev/libs/serialization/test/test_cyclic_ptrs.cpp (original)
+++ branches/quickbook-dev/libs/serialization/test/test_cyclic_ptrs.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -19,7 +19,6 @@
}
#endif
-
#include "test_tools.hpp"
#include <boost/detail/no_exceptions_support.hpp>
Modified: branches/quickbook-dev/libs/serialization/test/test_non_default_ctor.cpp
==============================================================================
--- branches/quickbook-dev/libs/serialization/test/test_non_default_ctor.cpp (original)
+++ branches/quickbook-dev/libs/serialization/test/test_non_default_ctor.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -17,9 +17,8 @@
#include <fstream>
#include <cstdlib> // for rand()
#include <cmath> // for fabs()
-#include <limits>
-
#include <boost/config.hpp>
+#include <boost/limits.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::rand;
Modified: branches/quickbook-dev/libs/serialization/test/test_non_intrusive.cpp
==============================================================================
--- branches/quickbook-dev/libs/serialization/test/test_non_intrusive.cpp (original)
+++ branches/quickbook-dev/libs/serialization/test/test_non_intrusive.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -16,9 +16,8 @@
#include <cstdlib> // for rand()
#include <cstdio> // remove
#include <cmath> // for fabs()
-#include <limits>
-
#include <boost/config.hpp>
+#include <boost/limits.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::rand;
Modified: branches/quickbook-dev/libs/spirit/doc/what_s_new.qbk
==============================================================================
--- branches/quickbook-dev/libs/spirit/doc/what_s_new.qbk (original)
+++ branches/quickbook-dev/libs/spirit/doc/what_s_new.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -9,6 +9,14 @@
[section What's New]
[/////////////////////////////////////////////////////////////////////////////]
+[section:spirit_2_5_3 Spirit V2.5.3]
+
+[heading What's changed from V2.5.2 (Boost V1.49.0) to V2.5.3 (Boost V1.50.0)]
+
+* The deprecated headers are removed. It's been there for a couple of years now
+ and it's about time to do some cleanup.
+
+[/////////////////////////////////////////////////////////////////////////////]
[section:spirit_2_5_2 Spirit V2.5.2]
[heading What's changed from V2.5.1 (Boost V1.48.0) to V2.5.2 (Boost V1.49.0)]
Modified: branches/quickbook-dev/libs/spirit/example/qi/typeof.cpp
==============================================================================
--- branches/quickbook-dev/libs/spirit/example/qi/typeof.cpp (original)
+++ branches/quickbook-dev/libs/spirit/example/qi/typeof.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -6,7 +6,8 @@
=============================================================================*/
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
-#include <boost/typeof/typeof.hpp>
+#include <boost/spirit/include/qi_copy.hpp>
+#include <boost/spirit/include/support_auto.hpp>
#include <iostream>
#include <string>
@@ -14,13 +15,6 @@
// Main program
///////////////////////////////////////////////////////////////////////////////
-#define BOOST_SPIRIT_AUTO(domain_, name, expr) \
- typedef boost::proto::result_of:: \
- deep_copy<BOOST_TYPEOF(expr)>::type name##_expr_type; \
- BOOST_SPIRIT_ASSERT_MATCH( \
- boost::spirit::domain_::domain, name##_expr_type); \
- BOOST_AUTO(name, boost::proto::deep_copy(expr)); \
-
int
main()
{
@@ -28,9 +22,23 @@
using boost::spirit::ascii::char_;
using boost::spirit::qi::parse;
typedef std::string::const_iterator iterator_type;
-
+
+///////////////////////////////////////////////////////////////////////////////
+// this works for non-c++11 compilers
+#ifdef BOOST_NO_AUTO_DECLARATIONS
+
BOOST_SPIRIT_AUTO(qi, comment, "/*" >> *(char_ - "*/") >> "*/");
+///////////////////////////////////////////////////////////////////////////////
+// but this is better for c++11 compilers with auto
+#else
+
+ using boost::spirit::qi::copy;
+
+ auto comment = copy("/*" >> *(char_ - "*/") >> "*/");
+
+#endif
+
std::string str = "/*This is a comment*/";
std::string::const_iterator iter = str.begin();
std::string::const_iterator end = str.end();
Modified: branches/quickbook-dev/libs/thread/doc/mutex_concepts.qbk
==============================================================================
--- branches/quickbook-dev/libs/thread/doc/mutex_concepts.qbk (original)
+++ branches/quickbook-dev/libs/thread/doc/mutex_concepts.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -445,6 +445,7 @@
class unique_lock
{
public:
+ typedef Lockable mutex_type;
unique_lock() noexcept;
explicit unique_lock(Lockable& m_);
unique_lock(Lockable& m_,adopt_lock_t);
@@ -458,20 +459,16 @@
unique_lock(Mutex& mtx, const chrono::duration<Rep, Period>& d);
~unique_lock();
+ unique_lock(unique_lock const&) = delete;
+ unique_lock& operator=(unique_lock const&) = delete;
unique_lock(unique_lock<Lockable>&& other) noexcept;
- unique_lock(detail::thread_move_t<unique_lock<Lockable> > other) noexcept;
unique_lock(upgrade_lock<Lockable>&& other) noexcept;
- unique_lock(detail::thread_move_t<upgrade_lock<Lockable> > other) noexcept;
- operator detail::thread_move_t<unique_lock<Lockable> >();
- detail::thread_move_t<unique_lock<Lockable> > move();
unique_lock& operator=(unique_lock<Lockable>&& other) noexcept;
- unique_lock& operator=(detail::thread_move_t<unique_lock<Lockable> > other) noexcept;
unique_lock& operator=(upgrade_lock<Lockable>&& other) noexcept;
- unique_lock& operator=(detail::thread_move_t<upgrade_lock<Lockable> > other) noexcept;
void swap(unique_lock& other) noexcept;
- void swap(detail::thread_move_t<unique_lock<Lockable> > other) noexcept;
+ Lockable* release() noexcept;
void lock();
bool try_lock();
@@ -487,12 +484,14 @@
void unlock();
bool owns_lock() const noexcept;
- explicit operator bool() const noexcept;
+ #if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
operator ``['unspecified-bool-type]``() const noexcept;
bool operator!() const noexcept;
+ #else
+ explicit operator bool() const noexcept;
+ #endif
Lockable* mutex() const noexcept;
- Lockable* release() noexcept;
};
__unique_lock__ is more complex than __lock_guard__: not only does it provide for RAII-style locking, it also allows for deferring
@@ -500,7 +499,7 @@
fashion, or with a timeout. Consequently, __unlock_ref__ is only called in the destructor if the lock object has locked the
__lockable_concept_type__ object, or otherwise adopted a lock on the __lockable_concept_type__ object.
-Specializations of __unique_lock__ model the __timed_lockable_concept__ if the supplied __lockable_concept_type__ type itself models
+Specializations of __unique_lock__ model the __timed_lockable_concept__ if the supplied Lockable type itself models
__timed_lockable_concept__ (e.g. `boost::unique_lock<boost::timed_mutex>`), or the __lockable_concept__ otherwise
(e.g. `boost::unique_lock<boost::mutex>`).
@@ -686,13 +685,11 @@
[endsect]
-[section:bool_conversion `operator unspecified-bool-type() const`]
+[section:explicit_bool_conversion `explicit operator bool() const`]
[variablelist
-[[Returns:] [If __owns_lock_ref__ would return `true`, a value that evaluates to
-`true` in boolean contexts, otherwise a value that evaluates to `false` in
-boolean contexts.]]
+[[Returns:] [`__owns_lock_ref__()`.]]
[[Throws:] [Nothing.]]
@@ -700,11 +697,13 @@
[endsect]
-[section:explicit_bool_conversion `explicit operator bool() const`]
+[section:bool_conversion `operator unspecified-bool-type() const`]
[variablelist
-[[Returns:] [`__owns_lock_ref__()`.]]
+[[Returns:] [If __owns_lock_ref__ would return `true`, a value that evaluates to
+`true` in boolean contexts, otherwise a value that evaluates to `false` in
+boolean contexts.]]
[[Throws:] [Nothing.]]
@@ -712,6 +711,7 @@
[endsect]
+
[section:operator_not `bool operator!() const`]
[variablelist
@@ -754,24 +754,25 @@
class shared_lock
{
public:
+ typedef Lockable mutex_type;
shared_lock();
explicit shared_lock(Lockable& m_);
shared_lock(Lockable& m_,adopt_lock_t);
shared_lock(Lockable& m_,defer_lock_t);
shared_lock(Lockable& m_,try_to_lock_t);
shared_lock(Lockable& m_,system_time const& target_time);
- shared_lock(detail::thread_move_t<shared_lock<Lockable> > other);
- shared_lock(detail::thread_move_t<unique_lock<Lockable> > other);
- shared_lock(detail::thread_move_t<upgrade_lock<Lockable> > other);
-
~shared_lock();
- operator detail::thread_move_t<shared_lock<Lockable> >();
- detail::thread_move_t<shared_lock<Lockable> > move();
+ shared_lock(shared_lock const&) = delete;
+ shared_lock& operator=(shared_lock const&) = delete;
- shared_lock& operator=(detail::thread_move_t<shared_lock<Lockable> > other);
- shared_lock& operator=(detail::thread_move_t<unique_lock<Lockable> > other);
- shared_lock& operator=(detail::thread_move_t<upgrade_lock<Lockable> > other);
+ shared_lock(shared_lock<Lockable> && other);
+ shared_lock(unique_lock<Lockable> && other);
+ shared_lock(upgrade_lock<Lockable> && other);
+
+ shared_lock& operator=(shared_lock<Lockable> && other);
+ shared_lock& operator=(unique_lock<Lockable> && other);
+ shared_lock& operator=(upgrade_lock<Lockable> && other);
void swap(shared_lock& other);
void lock();
@@ -779,8 +780,12 @@
bool timed_lock(boost::system_time const& target_time);
void unlock();
+ #if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
operator ``['unspecified-bool-type]``() const;
bool operator!() const;
+ #else
+ explicit operator bool() const;
+ #endif
bool owns_lock() const;
};
@@ -959,6 +964,18 @@
[endsect]
+[section:explicit_operator_bool `explicit operator bool() const`]
+
+[variablelist
+
+[[Returns:] [__owns_lock_shared_ref__.]]
+
+[[Throws:] [Nothing.]]
+
+]
+
+[endsect]
+
[section:release `Lockable* release()`]
[variablelist
@@ -989,26 +1006,31 @@
class upgrade_lock
{
public:
+ typedef Lockable mutex_type;
explicit upgrade_lock(Lockable& m_);
- upgrade_lock(detail::thread_move_t<upgrade_lock<Lockable> > other);
- upgrade_lock(detail::thread_move_t<unique_lock<Lockable> > other);
+ upgrade_lock(upgrade_lock<Lockable> && other);
+ upgrade_lock(unique_lock<Lockable> && other);
~upgrade_lock();
- operator detail::thread_move_t<upgrade_lock<Lockable> >();
- detail::thread_move_t<upgrade_lock<Lockable> > move();
+ upgrade_lock(const upgrade_lock& other) = delete;
+ upgrade_lock& operator=(const upgrade_lock<Lockable> & other) = delete;
- upgrade_lock& operator=(detail::thread_move_t<upgrade_lock<Lockable> > other);
- upgrade_lock& operator=(detail::thread_move_t<unique_lock<Lockable> > other);
+ upgrade_lock& operator=(upgrade_lock<Lockable> && other);
+ upgrade_lock& operator=(unique_lock<Lockable> && other);
void swap(upgrade_lock& other);
void lock();
void unlock();
+ #if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
operator ``['unspecified-bool-type]``() const;
bool operator!() const;
+ #else
+ explicit operator bool() const;
+ #endif
bool owns_lock() const;
};
@@ -1038,16 +1060,24 @@
class upgrade_to_unique_lock
{
public:
+ typedef Lockable mutex_type;
explicit upgrade_to_unique_lock(upgrade_lock<Lockable>& m_);
-
~upgrade_to_unique_lock();
- upgrade_to_unique_lock(detail::thread_move_t<upgrade_to_unique_lock<Lockable> > other);
- upgrade_to_unique_lock& operator=(detail::thread_move_t<upgrade_to_unique_lock<Lockable> > other);
+ upgrade_to_unique_lock(upgrade_to_unique_lock const& other) = delete;
+ upgrade_to_unique_lock& operator=(upgrade_to_unique_lock<Lockable> const& other) = delete;
+
+ upgrade_to_unique_lock(upgrade_to_unique_lock<Lockable> && other);
+ upgrade_to_unique_lock& operator=(upgrade_to_unique_lock<Lockable> && other);
+
void swap(upgrade_to_unique_lock& other);
+ #if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
operator ``['unspecified-bool-type]``() const;
bool operator!() const;
+ #else
+ explicit operator bool() const;
+ #endif
bool owns_lock() const;
};
@@ -1084,10 +1114,13 @@
MutexType* mutex() const;
MutexType* release();
- bool operator!() const;
- typedef ``['unspecified-bool-type]`` bool_type;
- operator bool_type() const;
+ #if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
+ operator ``['unspecified-bool-type]``() const;
+ bool operator!() const;
+ #else
+ explicit operator bool() const;
+ #endif
};
The member typedef `scoped_try_lock` is provided for each distinct
Modified: branches/quickbook-dev/libs/thread/doc/thread_ref.qbk
==============================================================================
--- branches/quickbook-dev/libs/thread/doc/thread_ref.qbk (original)
+++ branches/quickbook-dev/libs/thread/doc/thread_ref.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -363,15 +363,13 @@
thread(F f,A1 a1,A2 a2,...);
template <class F>
- thread(detail::thread_move_t<F> f);
+ thread(F &&f);
template <class F, class ...Args> explicit thread(F&& f, Args&&... args);
// move support
- thread(detail::thread_move_t<thread> x);
- thread& operator=(detail::thread_move_t<thread> x);
- operator detail::thread_move_t<thread>();
- detail::thread_move_t<thread> move();
+ thread(thread && x);
+ thread& operator=(thread && x);
void swap(thread& x) noexcept;
@@ -408,7 +406,6 @@
};
void swap(thread& lhs,thread& rhs) noexcep;
- detail::thread_move_t<thread> move(detail::thread_move_t<thread> t);
[section:default_constructor Default Constructor]
@@ -427,7 +424,6 @@
[section:move_constructor Move Constructor]
thread(thread&& other) noexcept;
- thread(detail::thread_move_t<thread> other);
[variablelist
@@ -444,7 +440,6 @@
[section:move_assignment Move assignment operator]
thread& operator=(thread&& other) noexcept;
- thread& operator=(detail::thread_move_t<thread> other);
[variablelist
@@ -863,6 +858,7 @@
[endsect]
+[/
[section:non_member_move Non-member function `move()`]
#include <boost/thread/thread.hpp>
@@ -882,7 +878,7 @@
boost::thread t2(boost::move(t)); // transfer thread from t to t2
[endsect]
-
+]
[section:id Class `boost::thread::id`]
Modified: branches/quickbook-dev/libs/thread/src/future.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/src/future.cpp (original)
+++ branches/quickbook-dev/libs/thread/src/future.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,7 +28,7 @@
std::string
future_error_category::message(int ev) const
{
- switch (ev)
+ switch (BOOST_SCOPED_ENUM_NATIVE(future_errc)(ev))
{
case future_errc::broken_promise:
return std::string("The associated promise has been destructed prior "
Modified: branches/quickbook-dev/libs/thread/src/win32/thread.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/src/win32/thread.cpp (original)
+++ branches/quickbook-dev/libs/thread/src/win32/thread.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -27,32 +27,33 @@
namespace
{
boost::once_flag current_thread_tls_init_flag=BOOST_ONCE_INIT;
- DWORD current_thread_tls_key=0;
+ #if defined(UNDER_CE)
+ // Windows CE does not define the TLS_OUT_OF_INDEXES constant.
+ DWORD tls_out_of_index=0xFFFFFFFF;
+ #else
+ DWORD tls_out_of_index=TLS_OUT_OF_INDEXES;
+ #endif
+ DWORD current_thread_tls_key=tls_out_of_index;
void create_current_thread_tls_key()
{
tss_cleanup_implemented(); // if anyone uses TSS, we need the cleanup linked in
current_thread_tls_key=TlsAlloc();
- #if defined(UNDER_CE)
- // Windows CE does not define the TLS_OUT_OF_INDEXES constant.
- BOOST_ASSERT(current_thread_tls_key!=0xFFFFFFFF);
- #else
- BOOST_ASSERT(current_thread_tls_key!=TLS_OUT_OF_INDEXES);
- #endif
+ BOOST_ASSERT(current_thread_tls_key!=tls_out_of_index);
}
void cleanup_tls_key()
{
- if(current_thread_tls_key)
+ if(current_thread_tls_key!=tls_out_of_index)
{
TlsFree(current_thread_tls_key);
- current_thread_tls_key=0;
+ current_thread_tls_key=tls_out_of_index;
}
}
detail::thread_data_base* get_current_thread_data()
{
- if(!current_thread_tls_key)
+ if(current_thread_tls_key==tls_out_of_index)
{
return 0;
}
@@ -62,7 +63,7 @@
void set_current_thread_data(detail::thread_data_base* new_data)
{
boost::call_once(current_thread_tls_init_flag,create_current_thread_tls_key);
- if(current_thread_tls_key)
+ if(current_thread_tls_key!=tls_out_of_index)
BOOST_VERIFY(TlsSetValue(current_thread_tls_key,new_data));
else
boost::throw_exception(thread_resource_error());
Modified: branches/quickbook-dev/libs/thread/test/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/thread/test/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/thread/test/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -78,6 +78,12 @@
[ thread-run test_shared_mutex.cpp ]
[ thread-run test_shared_mutex_part_2.cpp ]
[ thread-run test_shared_mutex_timed_locks.cpp ]
+ #uncomment the following once these works on windows
+ #[ thread-run test_shared_mutex_timed_locks_chrono.cpp ]
+ #uncomment the following once these works on windows
+ #[ thread-run test_v2_shared_mutex.cpp ]
+ #[ thread-run test_v2_shared_mutex_part_2.cpp ]
+ #[ thread-run test_v2_shared_mutex_timed_locks.cpp ]
[ thread-run test_lock_concept.cpp ]
[ thread-run test_generic_locks.cpp ]
[ thread-run test_futures.cpp ]
@@ -147,11 +153,6 @@
[ thread-run2 ./sync/futures/promise/get_future_pass.cpp : futures__promise__get_future_pass ]
;
- explicit tt ;
- test-suite tt
- :
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/try_to_lock_pass.cpp : xmutual_exclusion__locks__unique_lock__cons__try_to_lock_pass ]
- ;
#explicit mutual_exclusion ;
test-suite mutual_exclusion
@@ -181,6 +182,55 @@
[ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/obs/owns_lock_pass.cpp : mutual_exclusion__locks__unique_lock__obs__owns_lock_pass ]
[ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/types_pass.cpp : mutual_exclusion__locks__unique_lock__types_pass ]
+ #uncomment the following once these works on windows
+ #[ thread-compile-fail-V2 ./sync/mutual_exclusion/locks/shared_lock/cons/copy_assign_fail.cpp : : mutual_exclusion__locks__shared_lock__cons__copy_assign_fail ]
+ #[ thread-compile-fail-V2 ./sync/mutual_exclusion/locks/shared_lock/cons/copy_ctor_fail.cpp : : mutual_exclusion__locks__shared_lock__cons__copy_ctor_fail ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/adopt_lock_pass.cpp : mutual_exclusion__locks__shared_lock__cons__adopt_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/default_pass.cpp : mutual_exclusion__locks__shared_lock__cons__default_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/defer_lock_pass.cpp : mutual_exclusion__locks__shared_lock__cons__defer_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/duration_pass.cpp : mutual_exclusion__locks__shared_lock__cons__duration_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/move_assign_pass.cpp : mutual_exclusion__locks__shared_lock__cons__move_assign_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_pass.cpp : mutual_exclusion__locks__shared_lock__cons__move_ctor_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/mutex_pass.cpp : mutual_exclusion__locks__shared_lock__cons__mutex_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/time_point_pass.cpp : mutual_exclusion__locks__shared_lock__cons__time_point_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/try_to_lock_pass.cpp : mutual_exclusion__locks__shared_lock__cons__try_to_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/lock_pass.cpp : mutual_exclusion__locks__shared_lock__locking__lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_for_pass.cpp : mutual_exclusion__locks__shared_lock__locking__try_lock_for_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_pass.cpp : mutual_exclusion__locks__shared_lock__locking__try_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_until_pass.cpp : mutual_exclusion__locks__shared_lock__locking__try_lock_until_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/unlock_pass.cpp : mutual_exclusion__locks__shared_lock__locking__unlock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/mod/member_swap_pass.cpp : mutual_exclusion__locks__shared_lock__mod__member_swap_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/mod/non_member_swap_pass.cpp : mutual_exclusion__locks__shared_lock__mod__non_member_swap_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/mod/release_pass.cpp : mutual_exclusion__locks__shared_lock__mod__release_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/obs/mutex_pass.cpp : mutual_exclusion__locks__shared_lock__obs__mutex_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/obs/op_bool_pass.cpp : mutual_exclusion__locks__shared_lock__obs__op_bool_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/obs/owns_lock_pass.cpp : mutual_exclusion__locks__shared_lock__obs__owns_lock_pass ]
+
+ #uncomment the following once these works on windows
+ #[ thread-compile-fail-V2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/copy_assign_fail.cpp : : mutual_exclusion__locks__upgrade_lock__cons__copy_assign_fail ]
+ #[ thread-compile-fail-V2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/copy_ctor_fail.cpp : : mutual_exclusion__locks__upgrade_lock__cons__copy_ctor_fail ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/adopt_lock_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__adopt_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/default_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__default_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/defer_lock_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__defer_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/duration_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__duration_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_assign_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__move_assign_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__move_ctor_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/mutex_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__mutex_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/time_point_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__time_point_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/try_to_lock_pass.cpp : mutual_exclusion__locks__upgrade_lock__cons__try_to_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/lock_pass.cpp : mutual_exclusion__locks__upgrade_lock__locking__lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_for_pass.cpp : mutual_exclusion__locks__upgrade_lock__locking__try_lock_for_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_pass.cpp : mutual_exclusion__locks__upgrade_lock__locking__try_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_until_pass.cpp : mutual_exclusion__locks__upgrade_lock__locking__try_lock_until_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/unlock_pass.cpp : mutual_exclusion__locks__upgrade_lock__locking__unlock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/mod/member_swap_pass.cpp : mutual_exclusion__locks__upgrade_lock__mod__member_swap_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/mod/non_member_swap_pass.cpp : mutual_exclusion__locks__upgrade_lock__mod__non_member_swap_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/mod/release_pass.cpp : mutual_exclusion__locks__upgrade_lock__mod__release_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/obs/mutex_pass.cpp : mutual_exclusion__locks__upgrade_lock__obs__mutex_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/obs/op_bool_pass.cpp : mutual_exclusion__locks__upgrade_lock__obs__op_bool_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/obs/owns_lock_pass.cpp : mutual_exclusion__locks__upgrade_lock__obs__owns_lock_pass ]
+
+
[ thread-compile-fail-V2 ./sync/mutual_exclusion/mutex/assign_fail.cpp : : mutual_exclusion__mutex__assign_fail ]
[ thread-compile-fail-V2 ./sync/mutual_exclusion/mutex/copy_fail.cpp : : mutual_exclusion__mutex__copy_fail ]
[ thread-run2 ./sync/mutual_exclusion/mutex/default_pass.cpp : mutual_exclusion__mutex__default_pass ]
@@ -206,13 +256,21 @@
[ thread-compile-fail-V2 ./sync/mutual_exclusion/timed_mutex/assign_fail.cpp : : mutual_exclusion__timed_mutex__assign_fail ]
[ thread-compile-fail-V2 ./sync/mutual_exclusion/timed_mutex/copy_fail.cpp : : mutual_exclusion__timed_mutex__copy_fail ]
-
[ thread-run2 ./sync/mutual_exclusion/timed_mutex/default_pass.cpp : mutual_exclusion__timed_mutex__default_pass ]
[ thread-run2 ./sync/mutual_exclusion/timed_mutex/lock_pass.cpp : mutual_exclusion__timed_mutex__lock_pass ]
[ thread-run2 ./sync/mutual_exclusion/timed_mutex/native_handle_pass.cpp : mutual_exclusion__timed_mutex__native_handle_pass ]
[ thread-run2 ./sync/mutual_exclusion/timed_mutex/try_lock_for_pass.cpp : mutual_exclusion__timed_mutex__try_lock_for_pass ]
[ thread-run2 ./sync/mutual_exclusion/timed_mutex/try_lock_pass.cpp : mutual_exclusion__timed_mutex__try_lock_pass ]
[ thread-run2 ./sync/mutual_exclusion/timed_mutex/try_lock_until_pass.cpp : mutual_exclusion__timed_mutex__try_lock_until_pass ]
+
+ [ thread-compile-fail-V2 ./sync/mutual_exclusion/shared_mutex/assign_fail.cpp : : mutual_exclusion__shared_mutex__assign_fail ]
+ [ thread-compile-fail-V2 ./sync/mutual_exclusion/shared_mutex/copy_fail.cpp : : mutual_exclusion__shared_mutex__copy_fail ]
+ [ thread-run2 ./sync/mutual_exclusion/shared_mutex/default_pass.cpp : mutual_exclusion__shared_mutex__default_pass ]
+ [ thread-run2 ./sync/mutual_exclusion/shared_mutex/lock_pass.cpp : mutual_exclusion__shared_mutex__lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/shared_mutex/try_lock_for_pass.cpp : mutual_exclusion__shared_mutex__try_lock_for_pass ]
+ [ thread-run2 ./sync/mutual_exclusion/shared_mutex/try_lock_pass.cpp : mutual_exclusion__shared_mutex__try_lock_pass ]
+ #[ thread-run2 ./sync/mutual_exclusion/shared_mutex/try_lock_until_pass.cpp : mutual_exclusion__shared_mutex__try_lock_until_pass ]
+
;
#explicit this_thread ;
@@ -245,4 +303,10 @@
[ thread-run2 ./threads/thread/non_members/swap_pass.cpp : thread__non_members__swap_pass ]
[ thread-run2 ./threads/thread/static/hardware_concurrency_pass.cpp : thread__static__hardware_concurrency_pass ]
;
+
+ #explicit ttt ;
+ #test-suite ttt
+ #:
+ #;
+
}
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/native_handle_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/native_handle_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/native_handle_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,10 +24,14 @@
int main()
{
+#if defined BOOST_THREAD_DEFINES_CONDITION_VARIABLE_NATIVE_HANDLE
//BOOST_STATIC_ASSERT((boost::is_same<boost::condition_variable::native_handle_type, pthread_cond_t*>::value));
boost::condition_variable cv;
boost::condition_variable::native_handle_type h = cv.native_handle();
BOOST_TEST(h != 0);
+#else
+#error "Test not applicable: BOOST_THREAD_DEFINES_CONDITION_VARIABLE_NATIVE_HANDLE not defined for this platform as not supported"
+#endif
return boost::report_errors();
}
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_for_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_for_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_for_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::condition_variable cv;
boost::mutex mut;
@@ -87,4 +89,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_for_pred_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_for_pred_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_for_pred_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
class Pred
{
int& i_;
@@ -102,3 +104,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_until_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_until_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_until_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
struct Clock
{
typedef boost::chrono::milliseconds duration;
@@ -101,3 +103,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_until_pred_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_until_pred_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable/wait_until_pred_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
struct Clock
{
typedef boost::chrono::milliseconds duration;
@@ -115,3 +117,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_for_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_for_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_for_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::condition_variable_any cv;
typedef boost::timed_mutex L0;
@@ -92,3 +94,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_for_pred_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_for_pred_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_for_pred_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
class Pred
{
int& i_;
@@ -103,3 +105,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_until_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_until_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_until_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
struct Clock
{
typedef boost::chrono::milliseconds duration;
@@ -105,3 +107,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_until_pred_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_until_pred_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/conditions/condition_variable_any/wait_until_pred_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
struct Clock
{
typedef boost::chrono::milliseconds duration;
@@ -119,3 +121,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/duration_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/duration_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/duration_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -25,6 +25,8 @@
#include <boost/detail/lightweight_test.hpp>
#include <boost/chrono/chrono_io.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::timed_mutex m;
typedef boost::chrono::steady_clock Clock;
@@ -40,7 +42,8 @@
BOOST_TEST(lk.owns_lock() == true);
time_point t1 = Clock::now();
ns d = t1 - t0 - ms(250);
- BOOST_TEST(d < ns(5000000)); // within 5ms
+ // This test is spurious as it depends on the time the thread system switches the threads
+ BOOST_TEST(d < ns(5000000)+ms(1000)); // within 5ms
}
void f2()
@@ -74,3 +77,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/mutex_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/mutex_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/mutex_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,6 +24,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::mutex m;
typedef boost::chrono::system_clock Clock;
@@ -56,3 +58,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/time_point_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/time_point_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/time_point_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,6 +24,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::timed_mutex m;
typedef boost::chrono::steady_clock Clock;
@@ -73,3 +75,6 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/try_to_lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/try_to_lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/try_to_lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,6 +24,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::mutex m;
typedef boost::chrono::system_clock Clock;
@@ -69,4 +71,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,6 +24,8 @@
#include <boost/detail/lightweight_test.hpp>
#include <iostream>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::mutex m;
typedef boost::chrono::system_clock Clock;
@@ -75,3 +77,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_for_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_for_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_for_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,9 @@
//#include <boost/thread/mutex.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
+
bool try_lock_for_called = false;
typedef boost::chrono::milliseconds ms;
@@ -76,3 +79,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -71,4 +71,3 @@
return boost::report_errors();
}
-
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_until_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_until_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/try_lock_until_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,9 @@
#include <boost/thread/mutex.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
+
bool try_lock_until_called = false;
struct mutex
@@ -74,3 +77,8 @@
}
return boost::report_errors();
}
+
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/unlock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/unlock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/locking/unlock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,8 @@
//#include <boost/thread/mutex.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
bool unlock_called = false;
struct mutex
@@ -67,3 +69,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::mutex m;
typedef boost::chrono::system_clock Clock;
@@ -52,3 +54,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/native_handle_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/native_handle_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/native_handle_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,10 +24,13 @@
int main()
{
+#if defined BOOST_THREAD_DEFINES_MUTEX_NATIVE_HANDLE
boost::mutex m;
boost::mutex::native_handle_type h = m.native_handle();
BOOST_TEST(h);
-
+#else
+#error "Test not applicable: BOOST_THREAD_DEFINES_MUTEX_NATIVE_HANDLE not defined for this platform as not supported"
+#endif
return boost::report_errors();
}
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/try_lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/try_lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/mutex/try_lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::mutex m;
typedef boost::chrono::system_clock Clock;
@@ -56,3 +58,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::recursive_mutex m;
typedef boost::chrono::system_clock Clock;
@@ -54,3 +56,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/native_handle_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/native_handle_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/native_handle_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,9 +24,13 @@
int main()
{
+#if defined BOOST_THREAD_DEFINES_RECURSIVE_MUTEX_NATIVE_HANDLE
boost::recursive_mutex m;
boost::recursive_mutex::native_handle_type h = m.native_handle();
BOOST_TEST(h);
+#else
+#error "Test not applicable: BOOST_THREAD_DEFINES_CONDITION_VARIABLE_NATIVE_HANDLE not defined for this platform as not supported"
+#endif
return boost::report_errors();
}
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/try_lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/try_lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_mutex/try_lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::recursive_mutex m;
typedef boost::chrono::system_clock Clock;
@@ -58,3 +60,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,9 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
+
boost::recursive_timed_mutex m;
typedef boost::chrono::system_clock Clock;
@@ -54,3 +57,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/native_handle_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/native_handle_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/native_handle_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -24,10 +24,13 @@
int main()
{
+#if defined BOOST_THREAD_DEFINES_RECURSIVE_TIMED_MUTEX_NATIVE_HANDLE
boost::recursive_timed_mutex m;
boost::recursive_timed_mutex::native_handle_type h = m.native_handle();
BOOST_TEST(h);
-
+#else
+#error "Test not applicable: BOOST_THREAD_DEFINES_RECURSIVE_TIMED_MUTEX_NATIVE_HANDLE not defined for this platform as not supported"
+#endif
return boost::report_errors();
}
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_for_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_for_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_for_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,9 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
+
boost::recursive_timed_mutex m;
typedef boost::chrono::steady_clock Clock;
@@ -74,3 +77,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,9 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
+
boost::recursive_timed_mutex m;
typedef boost::chrono::system_clock Clock;
@@ -58,3 +61,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_until_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_until_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/recursive_timed_mutex/try_lock_until_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::recursive_timed_mutex m;
typedef boost::chrono::steady_clock Clock;
@@ -72,3 +74,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::timed_mutex m;
typedef boost::chrono::system_clock Clock;
@@ -51,4 +53,8 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/native_handle_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/native_handle_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/native_handle_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -25,10 +25,13 @@
int main()
{
+#if defined BOOST_THREAD_DEFINES_TIMED_MUTEX_NATIVE_HANDLE
boost::timed_mutex m;
boost::timed_mutex::native_handle_type h = m.native_handle();
BOOST_TEST(h);
-
+#else
+#error "Test not applicable: BOOST_THREAD_DEFINES_TIMED_MUTEX_NATIVE_HANDLE not defined for this platform as not supported"
+#endif
return boost::report_errors();
}
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_for_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_for_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_for_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::timed_mutex m;
typedef boost::chrono::steady_clock Clock;
@@ -72,3 +74,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::timed_mutex m;
typedef boost::chrono::system_clock Clock;
@@ -55,4 +57,8 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_until_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_until_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/sync/mutual_exclusion/timed_mutex/try_lock_until_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -23,6 +23,8 @@
#include <boost/thread/thread.hpp>
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
boost::timed_mutex m;
typedef boost::chrono::steady_clock Clock;
@@ -72,3 +74,7 @@
return boost::report_errors();
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/test_6130.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/test_6130.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/test_6130.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -18,6 +18,8 @@
boost::mutex::scoped_lock lk(mtx);
const bool res = cv.timed_wait(lk, boost::posix_time::from_time_t(wait_time));
const time_t end_time = ::time(0);
+ std::cerr << "end_time=" << end_time << " \n";
+ std::cerr << "wait_time=" << wait_time << " \n";
std::cerr << end_time - wait_time << " \n";
assert(end_time >= wait_time);
std::cerr << " OK\n";
Modified: branches/quickbook-dev/libs/thread/test/threads/this_thread/sleep_for/sleep_for_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/threads/this_thread/sleep_for/sleep_for_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/threads/this_thread/sleep_for/sleep_for_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,6 +20,8 @@
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
int main()
{
typedef boost::chrono::system_clock Clock;
@@ -38,3 +40,7 @@
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/threads/this_thread/sleep_until/sleep_until_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/threads/this_thread/sleep_until/sleep_until_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/threads/this_thread/sleep_until/sleep_until_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,6 +20,8 @@
#include <boost/detail/lightweight_test.hpp>
+#if defined BOOST_THREAD_USES_CHRONO
+
int main()
{
typedef boost::chrono::system_clock Clock;
@@ -37,3 +39,7 @@
}
+#else
+#error "Test not applicable: BOOST_THREAD_USES_CHRONO not defined for this platform as not supported"
+#endif
+
Modified: branches/quickbook-dev/libs/thread/test/threads/thread/constr/Frvalue_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/threads/thread/constr/Frvalue_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/threads/thread/constr/Frvalue_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -66,12 +66,17 @@
}
};
+MoveOnly MakeMoveOnly() {
+ MoveOnly x;
+ return boost::move(x);
+}
int main()
{
{
// FIXME The following fails
- //boost::thread t1 (( MoveOnly() ));
- boost::thread t (( boost::move( MoveOnly() ) ));
+ boost::thread t = boost::thread( MoveOnly() );
+ //boost::thread t = boost::thread( MakeMoveOnly() );
+ //boost::thread t (( boost::move( MoveOnly() ) ));
t.join();
}
return boost::report_errors();
Modified: branches/quickbook-dev/libs/thread/test/threads/thread/destr/dtor_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/threads/thread/destr/dtor_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/threads/thread/destr/dtor_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -68,7 +68,9 @@
BOOST_TEST(G::n_alive == 0);
BOOST_TEST(!G::op_run);
boost::thread t( (G()));
+#if defined BOOST_THREAD_USES_CHRONO
boost::this_thread::sleep_for(boost::chrono::milliseconds(250));
+#endif
}
#if 0
BOOST_TEST(false);
Modified: branches/quickbook-dev/libs/thread/test/threads/thread/members/detach_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/threads/thread/members/detach_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/threads/thread/members/detach_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -64,7 +64,9 @@
BOOST_TEST(t0.joinable());
t0.detach();
BOOST_TEST(!t0.joinable());
+#if defined BOOST_THREAD_USES_CHRONO
boost::this_thread::sleep_for(boost::chrono::milliseconds(250));
+#endif
BOOST_TEST(G::op_run);
BOOST_TEST(G::n_alive == 0);
}
Modified: branches/quickbook-dev/libs/thread/test/threads/thread/members/swap_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/threads/thread/members/swap_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/threads/thread/members/swap_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -47,6 +47,7 @@
void operator()()
{
BOOST_TEST(alive_ == 1);
+ std::cout << n_alive << std::endl;
BOOST_TEST(n_alive == 1);
op_run = true;
}
Modified: branches/quickbook-dev/libs/thread/test/threads/thread/non_members/swap_pass.cpp
==============================================================================
--- branches/quickbook-dev/libs/thread/test/threads/thread/non_members/swap_pass.cpp (original)
+++ branches/quickbook-dev/libs/thread/test/threads/thread/non_members/swap_pass.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -47,7 +47,6 @@
void operator()()
{
BOOST_TEST(alive_ == 1);
- std::cout << n_alive << std::endl;
BOOST_TEST(n_alive == 1);
op_run = true;
}
Modified: branches/quickbook-dev/libs/unordered/test/objects/minimal.hpp
==============================================================================
--- branches/quickbook-dev/libs/unordered/test/objects/minimal.hpp (original)
+++ branches/quickbook-dev/libs/unordered/test/objects/minimal.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -333,7 +333,7 @@
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef void_ptr void_pointer;
- typedef void_const_ptr void_const_pointer;
+ typedef void_const_ptr const_void_pointer;
typedef ptr<T> pointer;
typedef const_ptr<T> const_pointer;
typedef T& reference;
Modified: branches/quickbook-dev/libs/unordered/test/unordered/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/libs/unordered/test/unordered/Jamfile.v2 (original)
+++ branches/quickbook-dev/libs/unordered/test/unordered/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -9,6 +9,8 @@
: requirements
<warnings>all
<toolset>intel:<warnings>on
+ # Would be nice to define -Wundef, but I'm getting warnings from
+ # Boost.Preprocessor on trunk.
<toolset>gcc:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter -Wconversion -Wno-long-long"
<toolset>darwin:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter -Wconversion"
#<toolset>gcc:<define>_GLIBCXX_DEBUG
Modified: branches/quickbook-dev/libs/unordered/test/unordered/allocator_traits.cpp
==============================================================================
--- branches/quickbook-dev/libs/unordered/test/unordered/allocator_traits.cpp (original)
+++ branches/quickbook-dev/libs/unordered/test/unordered/allocator_traits.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -90,7 +90,12 @@
{
typedef empty_allocator<int> allocator;
typedef boost::unordered::detail::allocator_traits<allocator> traits;
+#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 1
+ BOOST_MPL_ASSERT((boost::is_same<traits::size_type,
+ std::make_unsigned<std::ptrdiff_t>::type>));
+#else
BOOST_MPL_ASSERT((boost::is_same<traits::size_type, std::size_t>));
+#endif
BOOST_MPL_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>));
BOOST_MPL_ASSERT((boost::is_same<traits::pointer, int*>));
BOOST_MPL_ASSERT((boost::is_same<traits::const_pointer, int const*>));
@@ -123,7 +128,12 @@
{
typedef allocator1<int> allocator;
typedef boost::unordered::detail::allocator_traits<allocator> traits;
+#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 1
+ BOOST_MPL_ASSERT((boost::is_same<traits::size_type,
+ std::make_unsigned<std::ptrdiff_t>::type>));
+#else
BOOST_MPL_ASSERT((boost::is_same<traits::size_type, std::size_t>));
+#endif
BOOST_MPL_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>));
BOOST_MPL_ASSERT((boost::is_same<traits::pointer, int*>));
BOOST_MPL_ASSERT((boost::is_same<traits::const_pointer, int const*>));
@@ -186,6 +196,20 @@
T& operator*() const { return *value_; }
};
+template <>
+struct ptr<void>
+{
+ void* value_;
+ ptr(void* v) : value_(v) {}
+};
+
+template <>
+struct ptr<const void>
+{
+ void const* value_;
+ ptr(void const* v) : value_(v) {}
+};
+
template <typename T>
struct allocator3
{
Modified: branches/quickbook-dev/libs/unordered/test/unordered/assign_tests.cpp
==============================================================================
--- branches/quickbook-dev/libs/unordered/test/unordered/assign_tests.cpp (original)
+++ branches/quickbook-dev/libs/unordered/test/unordered/assign_tests.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -208,9 +208,7 @@
#endif
-#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && \
- !defined(BOOST_NO_INITIALIZER_LISTS)
-
+#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST)
UNORDERED_AUTO_TEST(assign_initializer_list)
{
std::cerr<<"Initializer List Tests\n";
Modified: branches/quickbook-dev/libs/unordered/test/unordered/compile_tests.hpp
==============================================================================
--- branches/quickbook-dev/libs/unordered/test/unordered/compile_tests.hpp (original)
+++ branches/quickbook-dev/libs/unordered/test/unordered/compile_tests.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -22,6 +22,7 @@
#include <boost/type_traits/is_convertible.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <boost/limits.hpp>
+#include <boost/utility/swap.hpp>
#include "../helpers/check_return_type.hpp"
typedef long double comparison_type;
Modified: branches/quickbook-dev/libs/unordered/test/unordered/constructor_tests.cpp
==============================================================================
--- branches/quickbook-dev/libs/unordered/test/unordered/constructor_tests.cpp (original)
+++ branches/quickbook-dev/libs/unordered/test/unordered/constructor_tests.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -442,8 +442,7 @@
#endif
-#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && \
- !defined(BOOST_NO_INITIALIZER_LISTS)
+#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST)
UNORDERED_AUTO_TEST(test_initializer_list) {
std::cerr<<"Initializer List Tests\n";
Modified: branches/quickbook-dev/libs/unordered/test/unordered/insert_tests.cpp
==============================================================================
--- branches/quickbook-dev/libs/unordered/test/unordered/insert_tests.cpp (original)
+++ branches/quickbook-dev/libs/unordered/test/unordered/insert_tests.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -465,8 +465,7 @@
((default_generator)(generate_collisions))
)
-#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && \
- !defined(BOOST_NO_INITIALIZER_LISTS)
+#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST)
UNORDERED_AUTO_TEST(insert_initializer_list_set)
{
Modified: branches/quickbook-dev/libs/unordered/test/unordered/minimal_allocator.cpp
==============================================================================
--- branches/quickbook-dev/libs/unordered/test/unordered/minimal_allocator.cpp (original)
+++ branches/quickbook-dev/libs/unordered/test/unordered/minimal_allocator.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -51,7 +51,13 @@
//BOOST_MPL_ASSERT((boost::is_same<typename traits::const_void_pointer, void const*>));
BOOST_MPL_ASSERT((boost::is_same<typename traits::difference_type, std::ptrdiff_t>));
+
+#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 1
+ BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type,
+ std::make_unsigned<std::ptrdiff_t>::type>));
+#else
BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type, std::size_t>));
+#endif
BOOST_TEST(!traits::propagate_on_container_copy_assignment::value);
BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
Modified: branches/quickbook-dev/libs/utility/base_from_member.html
==============================================================================
--- branches/quickbook-dev/libs/utility/base_from_member.html (original)
+++ branches/quickbook-dev/libs/utility/base_from_member.html 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -129,6 +129,8 @@
<h2><a name="synopsis">Synopsis</a></h2>
<blockquote><pre>
+#include <type_traits> <i>// exposition only</i>
+
#ifndef BOOST_BASE_FROM_MEMBER_MAX_ARITY
#define BOOST_BASE_FROM_MEMBER_MAX_ARITY 10
#endif
@@ -139,6 +141,11 @@
protected:
MemberType member;
+#if <i>C++2011 is in use</i>
+ template< typename ...T >
+ explicit constexpr base_from_member( T&& ...x )
+ noexcept( std::is_nothrow_constructible<MemberType, T...>::value );
+#else
base_from_member();
template< typename T1 >
@@ -154,6 +161,7 @@
typename T10 >
base_from_member( T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6, T7 x7,
T8 x8, T9 x9, T10 x10 );
+#endif
};
</pre></blockquote>
@@ -166,13 +174,29 @@
data member called <var>member</var> that the derived class can use
for later base classes (or itself).</p>
-<p>There is a default constructor and several constructor member
-templates. These constructor templates can take as many arguments
-(currently up to ten) as possible and pass them to a constructor of
-the data member. Since C++ does not allow any way to explicitly state
+<p>If the appropriate features of C++2011 are present, there will be a single
+constructor template. It implements "perfect forwarding" to the best
+constructor call of <code>member</code> (if any). The constructor template is
+marked both <code>constexpr</code> and <code>explicit</code>. The former will
+be ignored if the corresponding inner constructor call (of <code>member</code>)
+does not have the marker. The latter binds the other way; always taking
+effect, even when the inner constructor call does not have the marker. The
+constructor template propagates the <code>noexcept</code> status of the inner
+constructor call. (The constructor template has a trailing parameter with a
+default value that disables the template when its signature is too close to the
+signatures of the automatically-defined non-template copy- and/or
+move-constructors of <code>base_from_member</code>.)</p>
+
+<p>On earlier-standard compilers, there is a default constructor and several
+constructor member templates. These constructor templates can take as many
+arguments (currently up to ten) as possible and pass them to a constructor of
+the data member.</p>
+
+<p>Since C++ does not allow any way to explicitly state
the template parameters of a templated constructor, make sure that
the arguments are already close as possible to the actual type used in
-the data member's desired constructor.</p>
+the data member's desired constructor. Explicit conversions may be
+necessary.</p>
<p>The <var>BOOST_BASE_FROM_MEMBER_MAX_ARITY</var> macro constant specifies
the maximum argument length for the constructor templates. The constant
@@ -180,7 +204,7 @@
constant may be read for code that is expandable like the class template and
needs to maintain the same maximum size. (Example code would be a class that
uses this class template as a base class for a member with a flexible set of
-constructors.)</p>
+constructors.) This constant is ignored when C++2011 features are present.</p>
<h2><a name="usage">Usage</a></h2>
@@ -323,11 +347,14 @@
argument for <code>pbase2_type</code> is converted from <code>int</code>
to <code>double</code>. The second constructor argument for
<code>pbase3_type</code> is a special case of necessary conversion; all
-forms of the null-pointer literal in C++ also look like compile-time
-integral expressions, so C++ always interprets such code as an integer
-when it has overloads that can take either an integer or a pointer. The
-last conversion is necessary for the compiler to call a constructor form
-with the exact pointer type used in <code>switcher</code>'s constructor.</p>
+forms of the null-pointer literal in C++ (except <code>nullptr</code> from
+C++2011) also look like compile-time integral expressions, so C++ always
+interprets such code as an integer when it has overloads that can take either
+an integer or a pointer. The last conversion is necessary for the compiler to
+call a constructor form with the exact pointer type used in
+<code>switcher</code>'s constructor. (If C++2011's <code>nullptr</code> is
+used, it still needs a conversion if multiple pointer types can be accepted in
+a constructor call but <code>std::nullptr_t</code> cannot.)</p>
<h2><a name="credits">Credits</a></h2>
@@ -360,9 +387,9 @@
<hr>
-<p>Revised: 28 August 2004</p>
+<p>Revised: 16 February 2012</p>
-<p>Copyright 2001, 2003, 2004 Daryle Walker. Use, modification, and distribution
+<p>Copyright 2001, 2003, 2004, 2012 Daryle Walker. Use, modification, and distribution
are subject to the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or a copy at <<a
href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt>>.)</p>
Modified: branches/quickbook-dev/libs/uuid/test/test_sha1.cpp
==============================================================================
--- branches/quickbook-dev/libs/uuid/test/test_sha1.cpp (original)
+++ branches/quickbook-dev/libs/uuid/test/test_sha1.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -50,7 +50,7 @@
}
-#define BOOST_TEST_SHA1_DEGEST(lhs, rhs) ( test_sha1_digest_equal_array(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, lhs, rhs) )
+#define BOOST_TEST_SHA1_DIGEST(lhs, rhs) ( test_sha1_digest_equal_array(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, lhs, rhs) )
void test_sha1(char const*const message, unsigned int length, const unsigned int (&correct_digest)[5])
{
@@ -60,7 +60,7 @@
unsigned int digest[5];
sha.get_digest(digest);
- BOOST_TEST_SHA1_DEGEST(digest, correct_digest);
+ BOOST_TEST_SHA1_DIGEST(digest, correct_digest);
}
void test_quick()
@@ -259,32 +259,48 @@
unsigned int digest[5];
sha.get_digest(digest);
- BOOST_TEST_SHA1_DEGEST(digest, tc.digest);
+ BOOST_TEST_SHA1_DIGEST(digest, tc.digest);
}
}
+// test long strings of 'a's
void test_long()
{
+
// test 1 million 'a's
+ struct test_case
+ {
+ unsigned int count;
+ unsigned int digest[5];
+ };
+ test_case cases[] =
+ { { 1000000, { 0x34aa973c, 0xd4c4daa4, 0xf61eeb2b, 0xdbad2731, 0x6534016f } }
+ , { 1000000000, { 0xd0f3e4f2, 0xf31c665a, 0xbbd8f518, 0xe848d5cb, 0x80ca78f7 } }
+ //, { 2000000000, { 0xda19be1b, 0x5ec3bc13, 0xda5533bd, 0x0c225a2f, 0x38da50ed } }
+ //, { 2147483647, { 0x1e5b490b, 0x10255e37, 0xfd96d096, 0x4f2fbfb9, 0x1ed47536 } }
+ //, { 4294967295 /*2^32 - 1*/, { 0xd84b866e, 0x70f6348f, 0xb0ddc21f, 0x373fe956, 0x1bf1005d } }
+ };
- boost::uuids::detail::sha1 sha;
- for (size_t i=0; i<1000000; i++) {
- sha.process_byte('a');
- }
+ for (size_t iCase=0; iCase<sizeof(cases)/sizeof(cases[0]); iCase++) {
+ test_case const& tc = cases[iCase];
- unsigned int correct_digest[5] =
- { 0x34aa973c, 0xd4c4daa4, 0xf61eeb2b, 0xdbad2731, 0x6534016f };
+ boost::uuids::detail::sha1 sha;
+ for (size_t i=0; i<tc.count; i++) {
+ sha.process_byte('a');
+ }
- unsigned int digest[5];
- sha.get_digest(digest);
+ unsigned int digest[5];
+ sha.get_digest(digest);
- BOOST_TEST_SHA1_DEGEST(digest, correct_digest);
+ BOOST_TEST_SHA1_DIGEST(digest, tc.digest);
+ }
}
int main(int, char*[])
{
test_quick();
test_short_messages();
+ test_long();
return boost::report_errors();
}
Modified: branches/quickbook-dev/status/Jamfile.v2
==============================================================================
--- branches/quickbook-dev/status/Jamfile.v2 (original)
+++ branches/quickbook-dev/status/Jamfile.v2 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -63,6 +63,7 @@
conversion/test # test-suite conversion
container/example # test-suite container_example
container/test # test-suite container_test
+ context/test # test-suite context
crc/test # test-suite crc
date_time/test # test-suite date_time
detail/test # test-suite detail
@@ -78,6 +79,7 @@
functional/factory/test # test-suite functional/factory
functional/forward/test # test-suite functional/forward
functional/hash/test # test-suite functional/hash
+ functional/overloaded_function/test # test-suite func./overloaded_function
function_types/test # test-suite function_types
fusion/test # test-suite fusion
geometry/test # test-suite geometry
@@ -95,6 +97,7 @@
iostreams/test # test-suite iostreams
iterator/test # test-suite iterator
lambda/test # test-suite lambda
+ local_function/test # test-suite local_function
locale/test # test-suite locale
logic/test # test-suite logic
math/test # test-suite math
@@ -149,6 +152,7 @@
unordered/test/unordered # test-suite unordered
unordered/test/exception # test-suite unordered-exception
utility/enable_if/test # test-suite utility/enable_if
+ utility/identity_type/test # test-suite utility/identity_type
utility/swap/test # test-suite utility/swap
utility/test # test-suite utility
uuid/test # test-suite uuid
Modified: branches/quickbook-dev/tools/build/v2/engine/builtins.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/builtins.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/builtins.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -1102,14 +1102,12 @@
source_name = list_next( source_name ),
target_name = list_next( target_name ) )
{
- RULE r_;
- RULE * r = &r_;
+ RULE * r;
RULE * imported;
- r_.name = source_name->value;
if ( !source_module->rules ||
- !hashcheck( source_module->rules, (HASHDATA * *)&r ) )
- unknown_rule( frame, "IMPORT", source_module, r_.name );
+ !(r = (RULE *)hash_find( source_module->rules, source_name->value ) ) )
+ unknown_rule( frame, "IMPORT", source_module, source_name->value );
imported = import_rule( r, target_module, target_name->value );
if ( localize )
@@ -1153,12 +1151,10 @@
for ( ; rules; rules = list_next( rules ) )
{
- RULE r_;
- RULE * r = &r_;
- r_.name = rules->value;
+ RULE * r;
- if ( !m->rules || !hashcheck( m->rules, (HASHDATA * *)&r ) )
- unknown_rule( frame, "EXPORT", m, r_.name );
+ if ( !m->rules || !(r = (RULE *)hash_find( m->rules, rules->value ) ) )
+ unknown_rule( frame, "EXPORT", m, rules->value );
r->exported = 1;
}
@@ -1583,10 +1579,8 @@
module_t * module = bindmodule( module_name->value );
- native_rule_t n;
- native_rule_t * np = &n;
- n.name = rule_name->value;
- if ( module->native_rules && hashcheck( module->native_rules, (HASHDATA * *)&np ) )
+ native_rule_t * np;
+ if ( module->native_rules && (np = (native_rule_t *)hash_find( module->native_rules, rule_name->value ) ) )
{
args_refer( np->arguments );
new_rule_body( module, np->name, np->arguments, np->procedure, 1 );
@@ -1595,7 +1589,7 @@
{
backtrace_line( frame->prev );
printf( "error: no native rule \"%s\" defined in module \"%s.\"\n",
- object_str( n.name ), object_str( module->name ) );
+ object_str( rule_name->value ), object_str( module->name ) );
backtrace( frame->prev );
exit( 1 );
}
@@ -1611,10 +1605,8 @@
module_t * module = bindmodule( module_name->value );
- native_rule_t n;
- native_rule_t * np = &n;
- n.name = rule_name->value;
- if ( module->native_rules && hashcheck( module->native_rules, (HASHDATA * *)&np ) )
+ native_rule_t * np;
+ if ( module->native_rules && (np = (native_rule_t *)hash_find( module->native_rules, rule_name->value ) ) )
{
int expected_version = atoi( object_str( version->value ) );
if ( np->version == expected_version )
Modified: branches/quickbook-dev/tools/build/v2/engine/class.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/class.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/class.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -19,8 +19,7 @@
{
for ( ; class_names; class_names = class_names->next )
{
- OBJECT * * p = &class_names->value;
- if ( !hashcheck( classes, (HASHDATA * *)&p ) )
+ if ( !hash_find( classes, class_names->value ) )
{
printf( "Class %s is not defined\n", object_str( class_names->value ) );
abort();
@@ -118,11 +117,13 @@
OBJECT * * pp = &xname->value;
module_t * class_module = 0;
module_t * outer_module = frame->module;
+ int found;
if ( !classes )
classes = hashinit( sizeof( OBJECT * ), "classes" );
- if ( hashenter( classes, (HASHDATA * *)&pp ) )
+ pp = (OBJECT * *)hash_insert( classes, xname->value, &found );
+ if ( !found )
{
*pp = object_copy( xname->value );
}
Modified: branches/quickbook-dev/tools/build/v2/engine/compile.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/compile.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/compile.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -203,13 +203,8 @@
}
/* If the checking rule can not be found, also bail. */
- {
- RULE checker_, *checker = &checker_;
-
- checker->name = type_name;
- if ( !typecheck->rules || !hashcheck( typecheck->rules, (HASHDATA * *)&checker ) )
- return;
- }
+ if ( !typecheck->rules || !hash_find( typecheck->rules, type_name ) )
+ return;
while ( values != 0 )
{
Modified: branches/quickbook-dev/tools/build/v2/engine/debug.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/debug.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/debug.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -30,18 +30,25 @@
if ( DEBUG_PROFILE )
{
clock_t start = clock();
- profile_info info;
- profile_info * p = &info;
-
- if ( !rulename ) p = &profile_other;
+ profile_info * p;
if ( !profile_hash && rulename )
profile_hash = hashinit( sizeof( profile_info ), "profile" );
- info.name = rulename;
-
- if ( rulename && hashenter( profile_hash, (HASHDATA * *)&p ) )
- p->cumulative = p->net = p->num_entries = p->stack_count = p->memory = 0;
+ if ( rulename )
+ {
+ int found;
+ p = (profile_info *)hash_insert( profile_hash, rulename, &found );
+ if ( !found )
+ {
+ p->name = rulename;
+ p->cumulative = p->net = p->num_entries = p->stack_count = p->memory = 0;
+ }
+ }
+ else
+ {
+ p = &profile_other;
+ }
++p->num_entries;
++p->stack_count;
Modified: branches/quickbook-dev/tools/build/v2/engine/execunix.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/execunix.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/execunix.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -66,7 +66,7 @@
*/
static clock_t tps = 0;
-static struct timeval tv;
+static struct timespec tv;
static int select_timeout = 0;
static int intr = 0;
static int cmdsrunning = 0;
@@ -91,6 +91,7 @@
void (*func)( void *closure, int status, timing_info*, const char *, const char * );
void *closure;
time_t start_dt; /* start of command timestamp */
+ long msgsize[2];
} cmdtab[ MAXJOBS ] = {{0}};
/*
@@ -342,28 +343,36 @@
int read_descriptor( int i, int s )
{
- int ret;
- int len;
+ int ret = 1, len, err;
char buffer[BUFSIZ];
- while ( 0 < ( ret = fread( buffer, sizeof(char), BUFSIZ-1, cmdtab[ i ].stream[ s ] ) ) )
- {
- buffer[ret] = 0;
- if ( !cmdtab[ i ].buffer[ s ] )
- {
- /* Never been allocated. */
- cmdtab[ i ].buffer[ s ] = (char*)BJAM_MALLOC_ATOMIC( ret + 1 );
- memcpy( cmdtab[ i ].buffer[ s ], buffer, ret + 1 );
- }
- else
- {
- /* Previously allocated. */
- char * tmp = cmdtab[ i ].buffer[ s ];
- len = strlen( tmp );
- cmdtab[ i ].buffer[ s ] = (char*)BJAM_MALLOC_ATOMIC( len + ret + 1 );
- memcpy( cmdtab[ i ].buffer[ s ], tmp, len );
- memcpy( cmdtab[ i ].buffer[ s ] + len, buffer, ret + 1 );
- BJAM_FREE( tmp );
+ while ( 0 < ( ret = fread( buffer, sizeof(char), BUFSIZ-1, cmdtab[ i ].stream[ s ] ) ) ) {
+
+ /* only copy action data until hit buffer limit, then ignore rest of data */
+ if (cmdtab[i].msgsize[s] < globs.maxbuf) {
+ cmdtab[i].msgsize[s] += ret;
+ buffer[ret] = 0;
+ if ( !cmdtab[ i ].buffer[ s ] )
+ {
+ /* Never been allocated. */
+ cmdtab[ i ].buffer[ s ] = (char*)BJAM_MALLOC_ATOMIC( ret + 1 );
+ memcpy( cmdtab[ i ].buffer[ s ], buffer, ret + 1 );
+ }
+ else
+ {
+ /* Previously allocated. */
+ char * tmp = cmdtab[ i ].buffer[ s ];
+ len = strlen( tmp );
+ cmdtab[ i ].buffer[ s ] = (char*)BJAM_MALLOC_ATOMIC( len + ret + 1 );
+ memcpy( cmdtab[ i ].buffer[ s ], tmp, len );
+ memcpy( cmdtab[ i ].buffer[ s ] + len, buffer, ret + 1 );
+ BJAM_FREE( tmp );
+ }
+
+ /* buffer was truncated, append newline to ensure pjl can find line end */
+ if (globs.maxbuf <= cmdtab[i].msgsize[s]) {
+ cmdtab[i].buffer[s][cmdtab[i].msgsize[s]-1] = '\n';
+ }
}
}
@@ -379,6 +388,8 @@
close(cmdtab[ i ].fd[ s ]);
cmdtab[ i ].fd[ s ] = 0;
+
+ cmdtab[i].msgsize[s] = 0;
}
@@ -423,6 +434,61 @@
*fmax = fd_max;
}
+void cleanup_child(int i, int status)
+{
+ int rstat;
+ struct tms new_time;
+ timing_info time_info;
+
+ cmdtab[ i ].pid = 0;
+
+ /* Set reason for exit if not timed out. */
+ if ( WIFEXITED( status ) ) {
+ cmdtab[ i ].exit_reason = 0 == WEXITSTATUS( status )
+ ? EXIT_OK : EXIT_FAIL;
+ }
+
+ /* Print out the rule and target name. */
+ out_action( cmdtab[ i ].action, cmdtab[ i ].target,
+ cmdtab[ i ].command, cmdtab[ i ].buffer[ OUT ],
+ cmdtab[ i ].buffer[ ERR ], cmdtab[ i ].exit_reason
+ );
+
+ times( &new_time );
+
+ time_info.system = (double)( new_time.tms_cstime - old_time.tms_cstime ) / CLOCKS_PER_SEC;
+ time_info.user = (double)( new_time.tms_cutime - old_time.tms_cutime ) / CLOCKS_PER_SEC;
+ time_info.start = cmdtab[ i ].start_dt;
+ time_info.end = time( 0 );
+
+ old_time = new_time;
+
+ if ( intr )
+ rstat = EXEC_CMD_INTR;
+ else if ( status != 0 )
+ rstat = EXEC_CMD_FAIL;
+ else
+ rstat = EXEC_CMD_OK;
+
+ /* Assume -p0 in effect so only pass buffer[ 0 ]
+ * containing merged output.
+ */
+ (*cmdtab[ i ].func)( cmdtab[ i ].closure, rstat, &time_info, cmdtab[ i ].command, cmdtab[ i ].buffer[ 0 ] );
+
+ BJAM_FREE( cmdtab[ i ].buffer[ OUT ] );
+ cmdtab[ i ].buffer[ OUT ] = 0;
+
+ BJAM_FREE( cmdtab[ i ].buffer[ ERR ] );
+ cmdtab[ i ].buffer[ ERR ] = 0;
+
+ BJAM_FREE( cmdtab[ i ].command );
+ cmdtab[ i ].command = 0;
+
+ cmdtab[ i ].func = 0;
+ cmdtab[ i ].closure = 0;
+ cmdtab[ i ].start_time = 0;
+}
+
/*
* exec_wait() - wait and drive at most one execution completion.
@@ -430,16 +496,13 @@
int exec_wait()
{
- int i;
+ int i, j;
int ret;
int fd_max;
int pid;
int status;
int finished;
- int rstat;
- timing_info time_info;
fd_set fds;
- struct tms new_time;
/* Handle naive make1() which does not know if commands are running. */
if ( !cmdsrunning )
@@ -457,17 +520,47 @@
/* Force select() to timeout so we can terminate expired processes.
*/
tv.tv_sec = select_timeout;
- tv.tv_usec = 0;
+ tv.tv_nsec = 0;
/* select() will wait until: i/o on a descriptor, a signal, or we
* time out.
*/
- ret = select( fd_max + 1, &fds, 0, 0, &tv );
+ ret = pselect( fd_max + 1, &fds, 0, 0, &tv, &empty_sigmask );
}
else
{
- /* select() will wait until i/o on a descriptor or a signal. */
- ret = select( fd_max + 1, &fds, 0, 0, 0 );
+ /* pselect() will wait until i/o on a descriptor or a signal. */
+ ret = pselect( fd_max + 1, &fds, 0, 0, 0, &empty_sigmask );
+ }
+
+ if (-1 == ret && errno != EINTR) {
+ perror("pselect()");
+ exit(-1);
+ }
+
+ if (0 < child_events) {
+ /* child terminated via SIGCHLD */
+ for (i=0; i<MAXJOBS; ++i) {
+ if (0 < terminated_children[i].pid) {
+ pid_t pid = terminated_children[i].pid;
+ /* get index of terminated pid */
+ for (j=0; j<globs.jobs; ++j) {
+ if (pid == cmdtab[j].pid) {
+ /* cleanup loose ends for terminated process */
+ close_streams(j, OUT);
+ if ( globs.pipe_action != 0 ) close_streams(j, ERR);
+ cleanup_child(j, terminated_children[i].status);
+ --cmdsrunning;
+ finished = 1;
+ break;
+ }
+ }
+ /* clear entry from list */
+ terminated_children[i].status = 0;
+ terminated_children[i].pid = 0;
+ --child_events;
+ }
+ }
}
if ( 0 < ret )
@@ -496,62 +589,10 @@
if ( pid == cmdtab[ i ].pid )
{
+ /* move into function so signal handler can also use */
finished = 1;
- pid = 0;
- cmdtab[ i ].pid = 0;
-
- /* Set reason for exit if not timed out. */
- if ( WIFEXITED( status ) )
- {
- cmdtab[ i ].exit_reason = 0 == WEXITSTATUS( status )
- ? EXIT_OK
- : EXIT_FAIL;
- }
-
- /* Print out the rule and target name. */
- out_action( cmdtab[ i ].action, cmdtab[ i ].target,
- cmdtab[ i ].command, cmdtab[ i ].buffer[ OUT ],
- cmdtab[ i ].buffer[ ERR ], cmdtab[ i ].exit_reason
- );
-
- times( &new_time );
-
- time_info.system = (double)( new_time.tms_cstime - old_time.tms_cstime ) / CLOCKS_PER_SEC;
- time_info.user = (double)( new_time.tms_cutime - old_time.tms_cutime ) / CLOCKS_PER_SEC;
- time_info.start = cmdtab[ i ].start_dt;
- time_info.end = time( 0 );
-
- old_time = new_time;
-
- /* Drive the completion. */
+ cleanup_child(i, status);
--cmdsrunning;
-
- if ( intr )
- rstat = EXEC_CMD_INTR;
- else if ( status != 0 )
- rstat = EXEC_CMD_FAIL;
- else
- rstat = EXEC_CMD_OK;
-
- /* Assume -p0 in effect so only pass buffer[ 0 ]
- * containing merged output.
- */
- (*cmdtab[ i ].func)( cmdtab[ i ].closure, rstat,
- &time_info, cmdtab[ i ].command,
- cmdtab[ i ].buffer[ 0 ] );
-
- BJAM_FREE( cmdtab[ i ].buffer[ OUT ] );
- cmdtab[ i ].buffer[ OUT ] = 0;
-
- BJAM_FREE( cmdtab[ i ].buffer[ ERR ] );
- cmdtab[ i ].buffer[ ERR ] = 0;
-
- BJAM_FREE( cmdtab[ i ].command );
- cmdtab[ i ].command = 0;
-
- cmdtab[ i ].func = 0;
- cmdtab[ i ].closure = 0;
- cmdtab[ i ].start_time = 0;
}
else
{
@@ -562,7 +603,6 @@
}
}
}
-
return 1;
}
Modified: branches/quickbook-dev/tools/build/v2/engine/filesys.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/filesys.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/filesys.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -39,22 +39,23 @@
file_info_t * file_info( OBJECT * filename )
{
file_info_t *finfo = &filecache_finfo;
+ int found;
if ( !filecache_hash )
filecache_hash = hashinit( sizeof( file_info_t ), "file_info" );
filename = path_as_key( filename );
- finfo->name = filename;
- finfo->is_file = 0;
- finfo->is_dir = 0;
- finfo->size = 0;
- finfo->time = 0;
- finfo->files = 0;
- if ( hashenter( filecache_hash, (HASHDATA**)&finfo ) )
+ finfo = (file_info_t *)hash_insert( filecache_hash, filename, &found );
+ if ( !found )
{
/* printf( "file_info: %s\n", filename ); */
- finfo->name = object_copy( finfo->name );
+ finfo->name = object_copy( filename );
+ finfo->is_file = 0;
+ finfo->is_dir = 0;
+ finfo->size = 0;
+ finfo->time = 0;
+ finfo->files = 0;
}
object_free( filename );
Modified: branches/quickbook-dev/tools/build/v2/engine/function.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/function.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/function.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -529,7 +529,7 @@
case 'T': edits->to_slashes = 1; continue;
case 'W': edits->to_windows = 1; continue;
default:
- break; /* Should complain, but so what... */
+ continue; /* Should complain, but so what... */
}
fileval:
@@ -1701,7 +1701,6 @@
static void parse_error( const char * message )
{
printf( "%s:%d: %s\n", current_file, current_line, message );
- exit(1);
}
/*
@@ -1751,10 +1750,14 @@
else if ( s[0] == '[' )
{
parse_error("unexpected subscript");
+ ++s;
}
else if ( s[0] == '\0' )
{
parse_error( "unbalanced parentheses" );
+ var_parse_group_maybe_add_constant( mod, *string, s );
+ *string = s;
+ return (VAR_PARSE *)result;
}
else
{
@@ -1777,26 +1780,29 @@
var_parse_group_maybe_add_constant( subscript, *string, s );
++s;
*string = s;
- if ( s[0] == '\0' )
- {
- parse_error( "unbalanced parentheses" );
- }
- else if ( s[0] == ')' || s[0] == ':' )
+ if ( s[0] == ')' || s[0] == ':' || s[0] == '\0')
{
break;
}
else
{
parse_error( "unexpected text following []" );
+ break;
}
}
else if ( isdigit( s[0] ) || s[0] == '-' )
{
++s;
}
+ else if( s[0] == '\0' )
+ {
+ parse_error( "malformed subscript" );
+ break;
+ }
else
{
parse_error( "malformed subscript" );
+ ++s;
}
}
}
@@ -1815,6 +1821,9 @@
else if ( s[0] == '\0' )
{
parse_error( "unbalanced parentheses" );
+ var_parse_group_maybe_add_constant( name, *string, s );
+ *string = s;
+ return (VAR_PARSE *)result;
}
else
{
@@ -1901,9 +1910,15 @@
for ( ; ; )
{
if ( try_parse_variable( &s, string, out ) ) { }
- else if(s[0] == ':' || s[0] == '[' || s[0] == '\0')
+ else if(s[0] == ':' || s[0] == '[')
{
parse_error( "unbalanced parentheses" );
+ ++s;
+ }
+ else if(s[0] == '\0')
+ {
+ parse_error( "unbalanced parentheses" );
+ break;
}
else if(s[0] == ')')
{
@@ -2124,8 +2139,19 @@
}
else
{
+ int f = compile_new_label( c );
+ int end = compile_new_label( c );
+
printf( "%s:%d: Conditional used as list (check operator precedence).\n", object_str(parse->file), parse->line );
- exit( 1 );
+
+ /* Emit the condition */
+ compile_condition( parse, c, 0, f );
+ compile_emit( c, INSTR_PUSH_CONSTANT, compile_emit_constant( c, constant_true ) );
+ compile_emit_branch( c, INSTR_JUMP, end );
+ compile_set_label( c, f );
+ compile_emit( c, INSTR_PUSH_EMPTY, 0 );
+ compile_set_label( c, end );
+ adjust_result( c, RESULT_STACK, result_location );
}
}
else if ( parse->type == PARSE_FOREACH )
Modified: branches/quickbook-dev/tools/build/v2/engine/hash.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/hash.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/hash.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -37,20 +37,9 @@
struct item * next;
};
-/* This structure overlays the one handed to hashenter(). Its actual size is
- * given to hashinit().
- */
-
-struct hashdata
-{
- OBJECT * key;
- /* rest of user data */
-};
-
typedef struct item
{
struct hashhdr hdr;
- struct hashdata data;
} ITEM ;
# define MAX_LISTS 32
@@ -105,6 +94,10 @@
#define hash_bucket(hp,keyval) ((hp)->tab.base + ( (keyval) % (hp)->tab.nel ))
+#define hash_data_key(data) (*(OBJECT * *)(data))
+#define hash_item_data(item) ((HASHDATA *)((char *)item + sizeof(struct hashhdr)))
+#define hash_item_key(item) (hash_data_key(hash_item_data(item)))
+
/* Find the hash item for the given data. Returns pointer to the
item and if given a pointer to the item before the found item.
If it's the first item in a bucket, there is no previous item,
@@ -121,7 +114,7 @@
for ( ; i; i = i->hdr.next )
{
- if ( object_equal( i->data.key, keydata ) )
+ if ( object_equal( hash_item_key( i ), keydata ) )
{
if (previous)
{
@@ -136,52 +129,13 @@
}
/*
- * hash_free() - remove the given item from the table if it's there.
- * Returns 1 if found, 0 otherwise.
- *
- * NOTE: 2nd argument is HASHDATA*, not HASHDATA** as elsewhere.
- */
-int
-hash_free(
- register struct hash *hp,
- HASHDATA *data)
-{
- ITEM * i = 0;
- ITEM * prev = 0;
- unsigned int keyval = hash_keyval(data->key);
-
- i = hash_search( hp, keyval, data->key, &prev );
- if (i)
- {
- /* mark it free so we skip it during enumeration */
- i->data.key = 0;
- /* unlink the record from the hash chain */
- if (prev) prev->hdr.next = i->hdr.next;
- else *hash_bucket(hp,keyval) = i->hdr.next;
- /* link it into the freelist */
- i->hdr.next = hp->items.free;
- hp->items.free = i;
- /* we have another item */
- hp->items.more++;
-
- return 1;
- }
- return 0;
-}
-
-/*
- * hashitem() - find a record in the table, and optionally enter a new one
+ * hash_insert() - insert a record in the table or return the existing one
*/
-int
-hashitem(
- register struct hash *hp,
- HASHDATA **data,
- int enter )
-{
- register ITEM *i;
- OBJECT *b = (*data)->key;
- unsigned int keyval = hash_keyval(b);
+HASHDATA * hash_insert( struct hash * hp, OBJECT * key, int * found )
+{
+ ITEM * i;
+ unsigned int keyval = hash_keyval( key );
#ifdef HASH_DEBUG_PROFILE
profile_frame prof[1];
@@ -189,38 +143,24 @@
profile_enter( 0, prof );
#endif
- if ( enter && !hp->items.more )
+ if ( !hp->items.more )
hashrehash( hp );
- if ( !enter && !hp->items.nel )
+ i = hash_search( hp, keyval, key, 0 );
+ if ( i )
{
- #ifdef HASH_DEBUG_PROFILE
- if ( DEBUG_PROFILE )
- profile_exit( prof );
- #endif
- return 0;
+ *found = 1;
}
-
- i = hash_search( hp, keyval, (*data)->key, 0 );
- if (i)
- {
- *data = &i->data;
- #ifdef HASH_DEBUG_PROFILE
- if ( DEBUG_PROFILE ) profile_exit( prof );
- #endif
- return !0;
- }
-
- if ( enter )
+ else
{
- ITEM * * base = hash_bucket(hp,keyval);
+ ITEM * * base = hash_bucket( hp, keyval );
/* try to grab one from the free list */
if ( hp->items.free )
{
i = hp->items.free;
hp->items.free = i->hdr.next;
- assert( i->data.key == 0 );
+ assert( hash_item_key( i ) == 0 );
}
else
{
@@ -228,23 +168,58 @@
hp->items.next += hp->items.size;
}
hp->items.more--;
- memcpy( (char *)&i->data, (char *)*data, hp->items.datalen );
i->hdr.next = *base;
*base = i;
- *data = &i->data;
- #ifdef OPT_BOEHM_GC
- if (sizeof(HASHDATA) == hp->items.datalen)
- {
- GC_REGISTER_FINALIZER(i->data.key,&hash_mem_finalizer,hp,0,0);
- }
+ *found = 0;
+ }
+
+ #ifdef HASH_DEBUG_PROFILE
+ if ( DEBUG_PROFILE )
+ profile_exit( prof );
+ #endif
+
+ return hash_item_data( i );
+}
+
+/*
+ * hash_find() - find a record in the table or NULL if none exists
+ */
+
+HASHDATA * hash_find( struct hash *hp, OBJECT *key )
+{
+ ITEM *i;
+ unsigned int keyval = hash_keyval(key);
+
+ #ifdef HASH_DEBUG_PROFILE
+ profile_frame prof[1];
+ if ( DEBUG_PROFILE )
+ profile_enter( 0, prof );
+ #endif
+
+ if ( !hp->items.nel )
+ {
+ #ifdef HASH_DEBUG_PROFILE
+ if ( DEBUG_PROFILE )
+ profile_exit( prof );
#endif
+ return 0;
}
+ i = hash_search( hp, keyval, key, 0 );
+
#ifdef HASH_DEBUG_PROFILE
if ( DEBUG_PROFILE )
profile_exit( prof );
#endif
- return 0;
+
+ if (i)
+ {
+ return hash_item_data( i );
+ }
+ else
+ {
+ return 0;
+ }
}
/*
@@ -278,9 +253,9 @@
for ( ; nel--; next += hp->items.size )
{
register ITEM *i = (ITEM *)next;
- ITEM **ip = hp->tab.base + object_hash( i->data.key ) % hp->tab.nel;
+ ITEM **ip = hp->tab.base + object_hash( hash_item_key( i ) ) % hp->tab.nel;
/* code currently assumes rehashing only when there are no free items */
- assert( i->data.key != 0 );
+ assert( hash_item_key( i ) != 0 );
i->hdr.next = *ip;
*ip = i;
@@ -301,8 +276,8 @@
for ( ; nel--; next += hp->items.size )
{
ITEM * i = (ITEM *)next;
- if ( i->data.key != 0 ) /* DO not enumerate freed items. */
- f( &i->data, data );
+ if ( hash_item_key( i ) != 0 ) /* DO not enumerate freed items. */
+ f( hash_item_data( i ), data );
}
}
}
@@ -359,45 +334,16 @@
hash_mem_free( hp->items.datalen, (char *)hp );
}
-const char *
-hashname ( struct hash * hp )
-{
- return hp->name;
-}
-
static void * hash_mem_alloc(size_t datalen, size_t size)
{
- if (sizeof(HASHDATA) == datalen)
- {
- return BJAM_MALLOC_RAW(size);
- }
- else
- {
- return BJAM_MALLOC(size);
- }
+ return BJAM_MALLOC(size);
}
static void hash_mem_free(size_t datalen, void * data)
{
- if (sizeof(HASHDATA) == datalen)
- {
- BJAM_FREE_RAW(data);
- }
- else
- {
- BJAM_FREE(data);
- }
+ BJAM_FREE(data);
}
-#ifdef OPT_BOEHM_GC
-static void hash_mem_finalizer(OBJECT * key, struct hash * hp)
-{
- HASHDATA d;
- d.key = key;
- hash_free(hp,&d);
-}
-#endif
-
/* ---- */
Modified: branches/quickbook-dev/tools/build/v2/engine/hash.h
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/hash.h (original)
+++ branches/quickbook-dev/tools/build/v2/engine/hash.h 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -11,16 +11,55 @@
#ifndef BOOST_JAM_HASH_H
#define BOOST_JAM_HASH_H
+/*
+ * An opaque struct representing an item in the
+ * hash table. The first element of every struct
+ * stored in the table must be an OBJECT * which
+ * is treated as the key.
+ */
typedef struct hashdata HASHDATA;
+/*
+ * hashinit() - initialize a hash table, returning a handle.
+ * datalen is the size of the items. name is used for debugging.
+ */
struct hash * hashinit ( int datalen, const char * name );
-int hashitem ( struct hash * hp, HASHDATA * * data, int enter );
+
+/*
+ * hashdone() - free a hash table, given its handle
+ */
void hashdone ( struct hash * hp );
+
+/*
+ * hashenumerate() - call f(i, data) on each item, i in the hash
+ * table. The order of the items is unspecified.
+ */
void hashenumerate( struct hash * hp, void (* f)( void *, void * ), void * data );
-int hash_free ( struct hash * hp, HASHDATA * data );
-const char * hashname ( struct hash * hp );
-#define hashenter( hp, data ) ( !hashitem( hp, data, !0 ) )
-#define hashcheck( hp, data ) hashitem( hp, data, 0 )
+/*
+ * hash_insert() - insert a new item in a hash table, or return an
+ * existing one.
+ *
+ * Preconditions:
+ * - hp must be a hash table created by hashinit
+ * - key must be an object created by object_new
+ *
+ * Postconditions:
+ * - if the key does not already exist in the hash
+ * table, *found == 0 and the result will be a
+ * pointer to an uninitialized item. The key
+ * of the new item must be set to a value equal to
+ * key before any further operations on the
+ * hash table except hashdone.
+ * - if the key is present then *found == 1 and
+ * the result is a pointer to the existing
+ * record.
+ */
+HASHDATA * hash_insert ( struct hash * hp, OBJECT * key, int * found );
+
+/*
+ * hash_find() - find a record in the table or NULL if none exists
+ */
+HASHDATA * hash_find ( struct hash * hp, OBJECT * key );
#endif
Modified: branches/quickbook-dev/tools/build/v2/engine/hcache.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/hcache.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/hcache.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -174,8 +174,6 @@
void hcache_init()
{
- HCACHEDATA cachedata;
- HCACHEDATA * c;
FILE * f;
OBJECT * version;
int header_count = 0;
@@ -201,6 +199,8 @@
while ( 1 )
{
+ HCACHEDATA cachedata;
+ HCACHEDATA * c;
OBJECT * record_type;
OBJECT * time_str;
OBJECT * age_str;
@@ -209,6 +209,7 @@
int i;
int count;
LIST * l;
+ int found;
record_type = read_netstring( f );
if ( !record_type )
@@ -225,21 +226,19 @@
goto bail;
}
- c = &cachedata;
-
- c->boundname = read_netstring( f );
- time_str = read_netstring( f );
- age_str = read_netstring( f );
- includes_count_str = read_netstring( f );
+ cachedata.boundname = read_netstring( f );
+ time_str = read_netstring( f );
+ age_str = read_netstring( f );
+ includes_count_str = read_netstring( f );
- if ( !c->boundname || !time_str || !age_str || !includes_count_str )
+ if ( !cachedata.boundname || !time_str || !age_str || !includes_count_str )
{
fprintf( stderr, "invalid %s\n", hcachename );
goto bail;
}
- c->time = atoi( object_str( time_str ) );
- c->age = atoi( object_str( age_str ) ) + 1;
+ cachedata.time = atoi( object_str( time_str ) );
+ cachedata.age = atoi( object_str( age_str ) ) + 1;
count = atoi( object_str( includes_count_str ) );
for ( l = 0, i = 0; i < count; ++i )
@@ -252,7 +251,7 @@
}
l = list_new( l, s );
}
- c->includes = l;
+ cachedata.includes = l;
hdrscan_count_str = read_netstring( f );
if ( !includes_count_str )
@@ -273,9 +272,18 @@
}
l = list_new( l, s );
}
- c->hdrscan = l;
+ cachedata.hdrscan = l;
- if ( !hashenter( hcachehash, (HASHDATA * *)&c ) )
+ c = (HCACHEDATA *)hash_insert( hcachehash, cachedata.boundname, &found );
+ if ( !found )
+ {
+ c->boundname = cachedata.boundname;
+ c->time = cachedata.time;
+ c->includes = cachedata.includes;
+ c->hdrscan = cachedata.hdrscan;
+ c->age = cachedata.age;
+ }
+ else
{
fprintf( stderr, "can't insert header cache item, bailing on %s\n",
hcachename );
@@ -375,76 +383,90 @@
LIST * hcache( TARGET * t, int rec, regexp * re[], LIST * hdrscan )
{
- HCACHEDATA cachedata;
- HCACHEDATA * c = &cachedata;
+ HCACHEDATA * c;
LIST * l = 0;
++queries;
- c->boundname = t->boundname;
-
- if (hashcheck (hcachehash, (HASHDATA **) &c))
+ if ( ( c = (HCACHEDATA *)hash_find( hcachehash, t->boundname ) ) )
{
- if (c->time == t->time)
- {
- LIST *l1 = hdrscan, *l2 = c->hdrscan;
- while (l1 && l2) {
- if (l1->value != l2->value) {
- l1 = NULL;
- } else {
- l1 = list_next(l1);
- l2 = list_next(l2);
- }
- }
- if (l1 || l2) {
- if (DEBUG_HEADER)
- printf("HDRSCAN out of date in cache for %s\n",
- object_str( t->boundname ));
-
- printf("HDRSCAN out of date for %s\n", object_str( t->boundname ) );
- printf(" real : ");
- list_print(hdrscan);
- printf("\n cached: ");
- list_print(c->hdrscan);
- printf("\n");
-
- list_free(c->includes);
- list_free(c->hdrscan);
- c->includes = 0;
- c->hdrscan = 0;
- } else {
- if (DEBUG_HEADER)
- printf ("using header cache for %s\n", object_str( t->boundname ) );
- c->age = 0;
- ++hits;
- l = list_copy (0, c->includes);
- return l;
- }
- } else {
- if (DEBUG_HEADER)
- printf ("header cache out of date for %s\n", object_str( t->boundname ) );
- list_free (c->includes);
- list_free(c->hdrscan);
- c->includes = 0;
- c->hdrscan = 0;
- }
- } else {
- if (hashenter (hcachehash, (HASHDATA **)&c)) {
- c->boundname = object_copy( c->boundname );
- c->next = hcachelist;
- hcachelist = c;
+ if ( c->time == t->time )
+ {
+ LIST *l1 = hdrscan, *l2 = c->hdrscan;
+ while ( l1 && l2 )
+ {
+ if (l1->value != l2->value)
+ {
+ l1 = NULL;
+ }
+ else
+ {
+ l1 = list_next( l1 );
+ l2 = list_next( l2 );
+ }
+ }
+ if ( l1 || l2 )
+ {
+ if (DEBUG_HEADER)
+ printf( "HDRSCAN out of date in cache for %s\n",
+ object_str( t->boundname ) );
+
+ printf( "HDRSCAN out of date for %s\n",
+ object_str( t->boundname ) );
+ printf(" real : ");
+ list_print( hdrscan );
+ printf( "\n cached: " );
+ list_print( c->hdrscan );
+ printf( "\n" );
+
+ list_free( c->includes );
+ list_free( c->hdrscan );
+ c->includes = 0;
+ c->hdrscan = 0;
+ }
+ else
+ {
+ if (DEBUG_HEADER)
+ printf( "using header cache for %s\n",
+ object_str( t->boundname ) );
+ c->age = 0;
+ ++hits;
+ l = list_copy( 0, c->includes );
+ return l;
+ }
+ }
+ else
+ {
+ if (DEBUG_HEADER)
+ printf ("header cache out of date for %s\n",
+ object_str( t->boundname ) );
+ list_free( c->includes );
+ list_free( c->hdrscan );
+ c->includes = 0;
+ c->hdrscan = 0;
+ }
}
+ else
+ {
+ int found;
+ c = (HCACHEDATA *)hash_insert( hcachehash, t->boundname, &found );
+ if ( !found )
+ {
+ c->boundname = object_copy( t->boundname );
+ c->next = hcachelist;
+ hcachelist = c;
+ }
}
/* 'c' points at the cache entry. Its out of date. */
- l = headers1 (0, t->boundname, rec, re);
+ l = headers1( 0, t->boundname, rec, re );
c->time = t->time;
c->age = 0;
- c->includes = list_copy (0, l);
- c->hdrscan = list_copy(0, hdrscan);
+ c->includes = list_copy( 0, l );
+ c->hdrscan = list_copy( 0, hdrscan );
return l;
}
Modified: branches/quickbook-dev/tools/build/v2/engine/hdrmacro.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/hdrmacro.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/hdrmacro.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -95,6 +95,7 @@
if ( regexec( re, buf ) && re->startp[1] )
{
OBJECT * symbol;
+ int found;
/* we detected a line that looks like "#define MACRO filename */
((char *)re->endp[1])[0] = '\0';
((char *)re->endp[2])[0] = '\0';
@@ -107,10 +108,11 @@
if ( !header_macros_hash )
header_macros_hash = hashinit( sizeof( HEADER_MACRO ), "hdrmacros" );
- v->symbol = symbol = object_new( re->startp[1] );
- v->filename = 0;
- if ( hashenter( header_macros_hash, (HASHDATA **)&v ) )
+ symbol = object_new( re->startp[1] );
+ v = (HEADER_MACRO *)hash_insert( header_macros_hash, symbol, &found );
+ if ( !found )
{
+ v->symbol = symbol;
v->filename = object_new( re->startp[2] ); /* never freed */
}
else
@@ -128,12 +130,9 @@
OBJECT * macro_header_get( OBJECT * macro_name )
{
- HEADER_MACRO var;
- HEADER_MACRO * v = &var;
+ HEADER_MACRO * v;
- v->symbol = macro_name;
-
- if ( header_macros_hash && hashcheck( header_macros_hash, (HASHDATA **)&v ) )
+ if ( header_macros_hash && ( v = (HEADER_MACRO *)hash_find( header_macros_hash, macro_name ) ) )
{
if ( DEBUG_HEADER )
printf( "### macro '%s' evaluated to '%s'\n", object_str( macro_name ), object_str( v->filename ) );
Modified: branches/quickbook-dev/tools/build/v2/engine/jam.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/jam.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/jam.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -102,6 +102,8 @@
*/
+#include "limits.h"
+
#include "jam.h"
#include "option.h"
#include "patchlevel.h"
@@ -134,9 +136,36 @@
#endif
/* And UNIX for this. */
-#ifdef unix
+#if defined(unix) || defined(__unix)
#include <sys/utsname.h>
+ #include <sys/wait.h>
#include <signal.h>
+
+ #include <sys/utsname.h>
+ #include <signal.h>
+
+ sigset_t empty_sigmask;
+ volatile sig_atomic_t child_events = 0;
+ struct terminated_child terminated_children[MAXJOBS] = {{ 0 }};
+
+ void child_sig_handler(int x) {
+ pid_t pid;
+ int i, status;
+ pid = waitpid(-1, &status, WNOHANG);
+ if (0 < pid) {
+ /* save terminated child pid and status */
+ for (i=0; i<MAXJOBS; ++i) {
+ /* find first available slot */
+ if (terminated_children[i].pid == 0) {
+ terminated_children[i].pid = pid;
+ terminated_children[i].status = status;
+ break;
+ }
+ }
+ }
+ ++child_events;
+ signal(SIGCHLD, child_sig_handler);
+ }
#endif
struct globs globs =
@@ -152,7 +181,9 @@
{ 0, 1 }, /* debug ... */
#endif
0, /* output commands, not run them */
- 0 /* action timeout */
+ 0, /* action timeout */
+ 0,
+ INT_MAX /* default is to accept all action output */
};
/* Symbols to be defined as true for use in Jambase. */
@@ -230,6 +261,20 @@
char const * progname = argv[0];
module_t * environ_module;
+#if defined(unix) || defined(__unix)
+ sigset_t sigmask;
+ struct sigaction sa;
+
+ sigemptyset(&sigmask);
+ sigaddset(&sigmask, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigmask, NULL);
+ sa.sa_flags = 0;
+ sa.sa_handler = child_sig_handler;
+ sigemptyset(&sa.sa_mask);
+ sigaction(SIGCHLD, &sa, NULL);
+ sigemptyset(&empty_sigmask);
+#endif
+
saved_argv0 = argv[0];
BJAM_MEM_INIT();
@@ -241,7 +286,7 @@
--argc;
++argv;
- if ( getoptions( argc, argv, "-:l:d:j:p:f:gs:t:ano:qv", optv ) < 0 )
+ if ( getoptions( argc, argv, "-:l:m:d:j:p:f:gs:t:ano:qv", optv ) < 0 )
{
printf( "\nusage: %s [ options ] targets...\n\n", progname );
@@ -251,6 +296,7 @@
/* printf( "-g Build from newest sources first.\n" ); */
printf( "-jx Run up to x shell commands concurrently.\n" );
printf( "-lx Limit actions to x number of seconds after which they are stopped.\n" );
+ printf( "-mx Limit action output buffer to x kb's of data, after which action output is read and ignored.\n" );
printf( "-n Don't actually execute the updating actions.\n" );
printf( "-ox Write the updating actions to file x.\n" );
printf( "-px x=0, pipes action stdout and stderr merged into action output.\n" );
@@ -318,6 +364,9 @@
if ( ( s = getoptval( optv, 'l', 0 ) ) )
globs.timeout = atoi( s );
+ if ( ( s = getoptval( optv, 'm', 0 ) ) )
+ globs.maxbuf = atoi( s ) * 1024;
+
/* Turn on/off debugging */
for ( n = 0; ( s = getoptval( optv, 'd', n ) ); ++n )
{
@@ -396,7 +445,7 @@
VAR_SET );
/* Set JAMUNAME. */
-#ifdef unix
+#if defined(unix) || defined(__unix)
{
struct utsname u;
Modified: branches/quickbook-dev/tools/build/v2/engine/jam.h
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/jam.h (original)
+++ branches/quickbook-dev/tools/build/v2/engine/jam.h 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -456,10 +456,23 @@
* default 0 for no limit.
*/
int dart; /* output build and test results formatted for Dart */
+ int maxbuf; /* limit action output buffer to maxbuf kb's of data */
};
extern struct globs globs;
+#if defined(unix) || defined(__unix)
+
+struct terminated_child
+{
+ pid_t pid;
+ int status;
+};
+
+extern struct terminated_child terminated_children[MAXJOBS];
+
+#endif
+
#define DEBUG_MAKE ( globs.debug[ 1 ] ) /* show actions when executed */
#define DEBUG_MAKEQ ( globs.debug[ 2 ] ) /* show even quiet actions */
#define DEBUG_EXEC ( globs.debug[ 2 ] ) /* show text of actons */
@@ -493,4 +506,12 @@
/* They also get the profile functions. */
#include "debug.h"
+/* Handle child process termination */
+#if defined(unix) || defined(__unix)
+#include <signal.h>
+extern sigset_t empty_sigmask;
+extern volatile sig_atomic_t child_events;
+void child_sig_handler(int x);
+#endif
+
#endif
Modified: branches/quickbook-dev/tools/build/v2/engine/modules.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/modules.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/modules.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -31,15 +31,14 @@
{
PROFILE_ENTER( BINDMODULE );
- module_t m_;
- module_t * m = &m_;
+ module_t * m;
+ int found;
if ( !module_hash )
module_hash = hashinit( sizeof( module_t ), "modules" );
- m->name = name;
-
- if ( hashenter( module_hash, (HASHDATA * *)&m ) )
+ m = (module_t *)hash_insert( module_hash, name, &found );
+ if ( !found )
{
m->name = object_copy( name );
m->variables = 0;
@@ -160,9 +159,10 @@
for ( ; module_names; module_names = module_names->next )
{
+ int found;
OBJECT * s = module_names->value;
- OBJECT * * ss = &s;
- if( hashenter( h, (HASHDATA * *)&ss ) )
+ OBJECT * * ss = (OBJECT * *)hash_insert( h, s, &found );
+ if( !found )
{
*ss = object_copy( s );
}
Modified: branches/quickbook-dev/tools/build/v2/engine/native.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/native.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/native.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -5,6 +5,7 @@
#include "native.h"
#include "hash.h"
#include "object.h"
+#include "assert.h"
void declare_native_rule( const char * module, const char * rule, const char * * args,
LIST * (*f)( FRAME *, int ), int version )
@@ -20,24 +21,28 @@
{
object_free( module_obj );
}
- if (m->native_rules == 0) {
+ if (m->native_rules == 0)
+ {
m->native_rules = hashinit( sizeof( native_rule_t ), "native rules");
}
{
- native_rule_t n, *np = &n;
- n.name = object_new( rule );
- if (args)
+ native_rule_t *np;
+ OBJECT * name = object_new( rule );
+ int found;
+ np = (native_rule_t *)hash_insert( m->native_rules, name, &found );
+ np->name = name;
+ assert( !found );
+ if ( args )
{
- n.arguments = args_new();
- lol_build( n.arguments->data, args );
+ np->arguments = args_new();
+ lol_build( np->arguments->data, args );
}
else
{
- n.arguments = 0;
+ np->arguments = 0;
}
- n.procedure = function_builtin( f, 0 );
- n.version = version;
- hashenter(m->native_rules, (HASHDATA**)&np);
+ np->procedure = function_builtin( f, 0 );
+ np->version = version;
}
}
Modified: branches/quickbook-dev/tools/build/v2/engine/pathunix.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/pathunix.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/pathunix.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -374,16 +374,18 @@
static void path_write_key( char * path_, string * out )
{
- struct path_key_entry e, *result = &e;
+ struct path_key_entry * result;
OBJECT * path = object_new( path_ );
+ int found;
/* This is only called by path_as_key, which initializes the cache. */
assert( path_key_cache );
- result->path = path;
- if ( hashenter( path_key_cache, (HASHDATA * *)&result ) )
+ result = (struct path_key_entry *)hash_insert( path_key_cache, path, &found );
+ if ( !found )
{
/* path_ is already normalized. */
+ result->path = path;
ShortPathToLongPath( path_, out );
result->key = object_new( out->value );
}
@@ -414,23 +416,25 @@
void path_add_key( OBJECT * path )
{
- struct path_key_entry e, *result = &e;
+ struct path_key_entry * result;
+ int found;
if ( ! path_key_cache )
path_key_cache = hashinit( sizeof( struct path_key_entry ), "path to key" );
- result->path = path;
- if ( hashenter( path_key_cache, (HASHDATA * *)&result ) )
+ result = (struct path_key_entry *)hash_insert( path_key_cache, path, &found );
+ if ( !found )
{
string buf[1];
OBJECT * normalized;
- struct path_key_entry ne, *nresult = ≠
+ struct path_key_entry * nresult;
+ result->path = path;
string_copy( buf, object_str( path ) );
normalize_path( buf );
normalized = object_new( buf->value );
string_free( buf );
- nresult->path = normalized;
- if ( hashenter( path_key_cache, (HASHDATA * *)&nresult ) || nresult == result )
+ nresult = (struct path_key_entry *)hash_insert( path_key_cache, normalized, &found );
+ if ( !found || nresult == result )
{
nresult->path = object_copy( normalized );
nresult->key = object_copy( path );
@@ -446,24 +450,27 @@
OBJECT * path_as_key( OBJECT * path )
{
- struct path_key_entry e, *result = &e;
+ struct path_key_entry * result;
+ int found;
if ( ! path_key_cache )
path_key_cache = hashinit( sizeof( struct path_key_entry ), "path to key" );
- result->path = path;
- if ( hashenter( path_key_cache, (HASHDATA * *)&result ) )
+ result = (struct path_key_entry *)hash_insert( path_key_cache, path, &found );
+ if ( !found )
{
string buf[1];
OBJECT * normalized;
- struct path_key_entry ne, *nresult = ≠
+ struct path_key_entry * nresult;
+ result->path = path;
string_copy( buf, object_str( path ) );
normalize_path( buf );
normalized = object_new( buf->value );
- nresult->path = normalized;
- if ( hashenter( path_key_cache, (HASHDATA * *)&nresult ) || nresult == result )
+ nresult = (struct path_key_entry *)hash_insert( path_key_cache, normalized, &found );
+ if ( !found || nresult == result )
{
string long_path[1];
+ nresult->path = normalized;
string_new( long_path );
ShortPathToLongPath( buf->value, long_path );
nresult->path = object_copy( normalized );
Modified: branches/quickbook-dev/tools/build/v2/engine/rules.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/rules.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/rules.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -76,12 +76,11 @@
static RULE * enter_rule( OBJECT * rulename, module_t * target_module )
{
- RULE rule;
- RULE * r = &rule;
+ int found;
+ RULE * r;
- r->name = rulename;
-
- if ( hashenter( demand_rules( target_module ), (HASHDATA * *)&r ) )
+ r = (RULE *)hash_insert( demand_rules(target_module), rulename, &found );
+ if ( !found )
{
r->name = object_copy( rulename );
r->procedure = 0;
@@ -149,15 +148,14 @@
TARGET * bindtarget( OBJECT * target_name )
{
- TARGET target;
- TARGET * t = ⌖
+ int found;
+ TARGET * t;
if ( !targethash )
targethash = hashinit( sizeof( TARGET ), "targets" );
- t->name = target_name;
-
- if ( hashenter( targethash, (HASHDATA * *)&t ) )
+ t = (TARGET *)hash_insert( targethash, target_name, &found );
+ if ( !found )
{
memset( (char *)t, '\0', sizeof( *t ) );
t->name = object_copy( target_name );
@@ -685,35 +683,31 @@
RULE * lookup_rule( OBJECT * rulename, module_t * m, int local_only )
{
- RULE rule;
- RULE * r = &rule;
+ RULE * r;
RULE * result = 0;
module_t * original_module = m;
- r->name = rulename;
-
if ( m->class_module )
m = m->class_module;
- if ( m->rules && hashcheck( m->rules, (HASHDATA * *)&r ) )
+ if ( m->rules && ( r = (RULE *)hash_find( m->rules, rulename ) ) )
result = r;
else if ( !local_only && m->imported_modules )
{
/* Try splitting the name into module and rule. */
- char *p = strchr( object_str( r->name ), '.' ) ;
+ char *p = strchr( object_str( rulename ), '.' ) ;
if ( p )
{
string buf[1];
OBJECT * module_part;
OBJECT * rule_part;
string_new( buf );
- string_append_range( buf, object_str( r->name ), p );
+ string_append_range( buf, object_str( rulename ), p );
module_part = object_new( buf->value );
rule_part = object_new( p + 1 );
- r->name = module_part;
/* Now, r->name keeps the module name, and p+1 keeps the rule name.
*/
- if ( hashcheck( m->imported_modules, (HASHDATA * *)&r ) )
+ if ( hash_find( m->imported_modules, module_part ) )
result = lookup_rule( rule_part, bindmodule( module_part ), 1 );
object_free( rule_part );
object_free( module_part );
Modified: branches/quickbook-dev/tools/build/v2/engine/search.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/search.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/search.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -139,7 +139,7 @@
{
while ( varlist )
{
- BINDING b, *ba = &b;
+ BINDING * ba;
file_info_t *ff;
OBJECT * key;
OBJECT * test_path;
@@ -159,9 +159,7 @@
ff = file_query( key );
timestamp( key, time );
- b.binding = key;
-
- if ( hashcheck( explicit_bindings, (HASHDATA**)&ba ) )
+ if ( ( ba = (BINDING *)hash_find( explicit_bindings, key ) ) )
{
if ( DEBUG_SEARCH )
printf(" search %s: found explicitly located target %s\n",
@@ -213,15 +211,19 @@
if ( explicitly_located )
{
- BINDING b;
- BINDING * ba = &b;
+ int found;
+ BINDING * ba;
OBJECT * key = path_as_key( boundname );
- b.binding = key;
- b.target = target;
/* CONSIDER: we probably should issue a warning is another file
is explicitly bound to the same location. This might break
compatibility, though. */
- if ( !hashenter( explicit_bindings, (HASHDATA * *)&ba ) )
+ ba = (BINDING *)hash_insert( explicit_bindings, key, &found );
+ if ( !found )
+ {
+ ba->binding = key;
+ ba->target = target;
+ }
+ else
{
object_free( key );
}
Modified: branches/quickbook-dev/tools/build/v2/engine/subst.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/subst.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/subst.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -20,13 +20,14 @@
regexp* regex_compile( OBJECT* pattern )
{
- regex_entry entry, *e = &entry;
- entry.pattern = pattern;
+ int found;
+ regex_entry * e ;
if ( !regex_hash )
regex_hash = hashinit(sizeof(regex_entry), "regex");
- if ( hashenter( regex_hash, (HASHDATA **)&e ) )
+ e = (regex_entry *)hash_insert( regex_hash, pattern, &found );
+ if ( !found )
{
e->pattern = object_copy( pattern );
e->regex = regcomp( (char*)pattern );
Modified: branches/quickbook-dev/tools/build/v2/engine/timestamp.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/timestamp.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/timestamp.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -71,8 +71,8 @@
PATHNAME f1;
PATHNAME f2;
- BINDING binding;
- BINDING * b = &binding;
+ int found;
+ BINDING * b;
string buf[ 1 ];
target = path_as_key( target );
@@ -83,12 +83,14 @@
bindhash = hashinit( sizeof( BINDING ), "bindings" );
/* Quick path - is it there? */
- b->name = target;
- b->time = b->flags = 0;
- b->progress = BIND_INIT;
- if ( hashenter( bindhash, (HASHDATA * *)&b ) )
+ b = (BINDING *)hash_insert( bindhash, target, &found );
+ if ( !found )
+ {
b->name = object_copy( target ); /* never freed */
+ b->time = b->flags = 0;
+ b->progress = BIND_INIT;
+ }
if ( b->progress != BIND_INIT )
goto afterscanning;
@@ -100,8 +102,8 @@
/* Scan directory if not already done so. */
{
- BINDING binding;
- BINDING * b = &binding;
+ int found;
+ BINDING * b;
OBJECT * name;
f2 = f1;
@@ -109,12 +111,15 @@
path_parent( &f2 );
path_build( &f2, buf, 0 );
- b->name = name = object_new( buf->value );
- b->time = b->flags = 0;
- b->progress = BIND_INIT;
+ name = object_new( buf->value );
- if ( hashenter( bindhash, (HASHDATA * *)&b ) )
+ b = (BINDING *)hash_insert( bindhash, name, &found );
+ if ( !found )
+ {
b->name = object_copy( name );
+ b->time = b->flags = 0;
+ b->progress = BIND_INIT;
+ }
if ( !( b->flags & BIND_SCANNED ) )
{
@@ -128,8 +133,8 @@
/* Scan archive if not already done so. */
if ( f1.f_member.len )
{
- BINDING binding;
- BINDING * b = &binding;
+ int found;
+ BINDING * b;
OBJECT * name;
f2 = f1;
@@ -138,12 +143,15 @@
string_truncate( buf, 0 );
path_build( &f2, buf, 0 );
- b->name = name = object_new( buf->value );
- b->time = b->flags = 0;
- b->progress = BIND_INIT;
+ name = object_new( buf->value );
- if ( hashenter( bindhash, (HASHDATA * *)&b ) )
+ b = (BINDING *)hash_insert( bindhash, name, &found );
+ if ( !found )
+ {
b->name = object_copy( name );
+ b->time = b->flags = 0;
+ b->progress = BIND_INIT;
+ }
if ( !( b->flags & BIND_SCANNED ) )
{
@@ -174,17 +182,18 @@
static void time_enter( void * closure, OBJECT * target, int found, time_t time )
{
- BINDING binding;
- BINDING * b = &binding;
+ int item_found;
+ BINDING * b;
struct hash * bindhash = (struct hash *)closure;
target = path_as_key( target );
- b->name = target;
- b->flags = 0;
-
- if ( hashenter( bindhash, (HASHDATA * *)&b ) )
- b->name = object_copy( target ); /* never freed */
+ b = (BINDING *)hash_insert( bindhash, target, &item_found );
+ if ( !item_found )
+ {
+ b->name = object_copy( target );
+ b->flags = 0;
+ }
b->time = time;
b->progress = found ? BIND_FOUND : BIND_SPOTTED;
Modified: branches/quickbook-dev/tools/build/v2/engine/variable.c
==============================================================================
--- branches/quickbook-dev/tools/build/v2/engine/variable.c (original)
+++ branches/quickbook-dev/tools/build/v2/engine/variable.c 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -201,12 +201,9 @@
else
#endif
{
- VARIABLE var;
- VARIABLE * v = &var;
+ VARIABLE * v;
- v->symbol = symbol;
-
- if ( module->variables && hashcheck( module->variables, (HASHDATA * *)&v ) )
+ if ( module->variables && ( v = (VARIABLE *)hash_find( module->variables, symbol ) ) )
{
if ( DEBUG_VARGET )
var_dump( v->symbol, v->value, "get" );
@@ -279,17 +276,18 @@
static VARIABLE * var_enter( struct module_t * module, OBJECT * symbol )
{
- VARIABLE var;
- VARIABLE * v = &var;
+ int found;
+ VARIABLE * v;
if ( !module->variables )
module->variables = hashinit( sizeof( VARIABLE ), "variables" );
- v->symbol = symbol;
- v->value = 0;
-
- if ( hashenter( module->variables, (HASHDATA * *)&v ) )
+ v = (VARIABLE *)hash_insert( module->variables, symbol, &found );
+ if ( !found )
+ {
v->symbol = object_copy( symbol );
+ v->value = 0;
+ }
return v;
}
Modified: branches/quickbook-dev/tools/build/v2/tools/gcc.jam
==============================================================================
--- branches/quickbook-dev/tools/build/v2/tools/gcc.jam (original)
+++ branches/quickbook-dev/tools/build/v2/tools/gcc.jam 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -446,13 +446,17 @@
}
else
{
- if $(model) = 32
+ local arch = [ feature.get-values architecture : $(properties) ] ;
+ if $(arch) != arm
{
- option = -m32 ;
- }
- else if $(model) = 64
- {
- option = -m64 ;
+ if $(model) = 32
+ {
+ option = -m32 ;
+ }
+ else if $(model) = 64
+ {
+ option = -m64 ;
+ }
}
# For darwin, the model can be 32_64. darwin.jam will handle that
# on its own.
@@ -1097,9 +1101,10 @@
#
# x86 and compatible
# The 'native' option appeared in gcc 4.2 so we cannot safely use it
-# as default. Use conservative i386 instead.
+# as default. Use conservative i386 instead for 32-bit.
+toolset.flags gcc OPTIONS <architecture>x86/<address-model>32/<instruction-set> : -march=i386 ;
cpu-flags gcc OPTIONS : x86 : native : -march=native ;
-cpu-flags gcc OPTIONS : x86 : i386 : -march=i386 : default ;
+cpu-flags gcc OPTIONS : x86 : i386 : -march=i386 ;
cpu-flags gcc OPTIONS : x86 : i486 : -march=i486 ;
cpu-flags gcc OPTIONS : x86 : i586 : -march=i586 ;
cpu-flags gcc OPTIONS : x86 : i686 : -march=i686 ;
Modified: branches/quickbook-dev/tools/quickbook/doc/block.qbk
==============================================================================
--- branches/quickbook-dev/tools/quickbook/doc/block.qbk (original)
+++ branches/quickbook-dev/tools/quickbook/doc/block.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -14,7 +14,8 @@
[source-mode teletype]
]
-[section xinclude]
+[#quickbook.ref.xinclude]
+[section:xinclude xinclude]
You can include another XML file with:
@@ -27,7 +28,8 @@
[endsect] [/xinclude]
-[section Paragraphs]
+[#quickbook.ref.paragraphs]
+[section:paragraphs Paragraphs]
Paragraphs start left-flushed and are terminated by two or more newlines. No
markup is needed for paragraphs. QuickBook automatically detects paragraphs from
@@ -36,10 +38,12 @@
[/ <-- There's a space here. Don't remove. this is intentianal, for testing]
This is a new paragraph...
-[endsect] [/Paragraphs]
+[endsect] [/paragraphs]
-[section Lists]
-[section Ordered lists]
+[#quickbook.ref.lists]
+[section:lists Lists]
+[#quickbook.ref.ordered_lists]
+[section:ordered_lists Ordered lists]
[pre
# One
@@ -53,8 +57,9 @@
# Two
# Three
-[endsect] [/Ordered lists]
-[section List Hierarchies]
+[endsect] [/ordered_lists]
+[#quickbook.ref.list_hierarchies]
+[section:list_hierarchies List Hierarchies]
List hierarchies are supported. Example:
@@ -86,8 +91,9 @@
# Four.a.ii
# Five
-[endsect] [/List Hierarchies]
-[section Long List Lines]
+[endsect] [/list_hierarchies]
+[#quickbook.ref.long_list_lines]
+[section:long_list_lines Long List Lines]
Long lines will be wrapped appropriately. Example:
@@ -109,8 +115,9 @@
A very long item. A very long item. A very long item.
# A short item.
-[endsect] [/Long list lines]
-[section Unordered lists]
+[endsect] [/long_list_lines]
+[#quickbook.ref.unordered_lists]
+[section:unordered_lists Unordered lists]
```
* First
@@ -124,8 +131,9 @@
* Second
* Third
-[endsect] [/Unordered lists]
-[section Mixed lists]
+[endsect] [/unordered_lists]
+[#quickbook.ref.mixed_lists]
+[section:mixed_lists Mixed lists]
Mixed lists (ordered and unordered) are supported. Example:
@@ -181,10 +189,11 @@
* 2.b.2.a
* 2.b.2.b
-[endsect] [/Mixed lists]
-[endsect] [/Lists]
+[endsect] [/mixed_lists]
+[endsect] [/lists]
-[section Code]
+[#quickbook.ref.code]
+[section:code Code]
Preformatted code starts with a space or a tab. The code will be
syntax highlighted according to the current __source_mode__:
@@ -227,8 +236,9 @@
using __boost__::__array__;
-[endsect] [/Code]
+[endsect] [/code]
+[#quickbook.ref.escape_back]
[section:escape_back Escaping Back To QuickBook]
Inside code, code blocks and inline code, QuickBook does not allow any
@@ -252,9 +262,10 @@
When escaping from code to QuickBook, only phrase level markups are
allowed. Block level markups like lists, tables etc. are not allowed.
-[endsect] [/Escaping back to quickbook]
+[endsect] [/escaping_back_to_quickbook]
-[section Preformatted]
+[#quickbook.ref.preformatted]
+[section:preformatted Preformatted]
Sometimes, you don't want some preformatted text to be parsed as source code. In such
cases, use the [^\[pre ... \]] markup block.
@@ -288,9 +299,10 @@
Notice that unlike Code, phrase markup such as font style is still permitted
inside =pre= blocks.
-[endsect] [/Preformatted]
+[endsect] [/preformatted]
-[section Blockquote]
+[#quickbook.ref.blockquote]
+[section:blockquote Blockquote]
[pre
'''[:sometext...]'''
@@ -298,9 +310,10 @@
[:Indents the paragraph. This applies to one paragraph only.]
-[endsect] [/Blockquote]
+[endsect] [/blockquote]
-[section Admonitions]
+[#quickbook.ref.admonitions]
+[section:admonitions Admonitions]
```
[note This is a note]
@@ -322,9 +335,10 @@
for example [^\[information This is some information\]] is unlikely
to produce the desired effect.
-[endsect] [/Admonitions]
+[endsect] [/admonitions]
-[section Headings]
+[#quickbook.ref.headings]
+[section:headings Headings]
```
[h1 Heading 1]
@@ -356,9 +370,10 @@
to link to them. See __anchor_links__ and __section__ for more info.
-[endsect] [/Headings]
+[endsect] [/headings]
-[section Generic Heading]
+[#quickbook.ref.generic_heading]
+[section:generic_heading Generic Heading]
In cases when you don't want to care about the heading level (1 to 6), you
can use the /Generic Heading/:
@@ -402,9 +417,10 @@
with /section/ and /heading/, you have all you need. /h1/../h6/ becomes
redundant. /h1/../h6/ might be deprecated in the future.
-[endsect] [/Generic Heading]
+[endsect] [/generic_heading]
-[section Macros]
+[#quickbook.ref.macros]
+[section:macros Macros]
```
[def macro_identifier some text]
@@ -455,9 +471,10 @@
Hi __spirit__ :-)
-[endsect] [/Macros]
+[endsect] [/macros]
-[section Predefined Macros]
+[#quickbook.ref.predefined_macros]
+[section:predefined_macros Predefined Macros]
Quickbook has some predefined macros that you can already use.
@@ -468,9 +485,10 @@
[[[^\__FILENAME__]][Quickbook source filename] [__FILENAME__]]
]
-[endsect] [/Predefined Macros]
+[endsect] [/predefined_macros]
-[section Templates]
+[#quickbook.ref.templates]
+[section:templates Templates]
Templates provide a more versatile text substitution mechanism. Templates
come in handy when you need to create parameterizable, multi-line,
@@ -496,6 +514,7 @@
]
+[#quickbook.ref.template_identifier]
[heading Template Identifier]
Template identifiers can either consist of:
@@ -513,7 +532,7 @@
C/C++ identifier.
A template formal argument temporarily hides a template of the same name at
-the point where the [link quickbook.syntax.block.templates.template_expansion
+the point where the [link quickbook.ref.template_expansion
template is expanded]. Note that the body of the [^person] template above
refers to [^name] [^age] and [^what] as [^\[name\]] [^\[age\]] and
[^\[what\]]. [^name] [^age] and [^what] are actually templates that exist
@@ -620,7 +639,7 @@
The difference with macros are
-* The explicit [link quickbook.syntax.block.templates.template_expansion
+* The explicit [link quickbook.ref.template_expansion
template expansion syntax]. This is an advantage because, now, we don't
have to use obscure naming conventions like double underscores (e.g.
\_\_alpha\_\_) to avoid unwanted
@@ -729,7 +748,7 @@
in QuickBook (as a qbk library). For that to happen, we need to accommodate
single character punctuation templates which are fairly common in
QuickBook. You might have noticed that single character punctuations are
-allowed as [link quickbook.syntax.block.templates.template_identifier
+allowed as [link quickbook.ref.template_identifier
template identifiers]. Example:
```
@@ -748,9 +767,10 @@
<hey>baz</hey>
]
-[endsect] [/Templates]
+[endsect] [/templates]
-[section Blurbs]
+[#quickbook.ref.blurbs]
+[section:blurbs Blurbs]
```
[blurb ``\:-)`` [*An eye catching advertisement or note...]
@@ -772,12 +792,13 @@
(EBNF) completely in C++.
]
-[note Prefer [link quickbook.syntax.block.admonitions admonitions] wherever
+[note Prefer [link quickbook.ref.admonitions admonitions] wherever
appropriate.]
-[endsect] [/Blurbs]
+[endsect] [/blurbs]
-[section Tables]
+[#quickbook.ref.tables]
+[section:tables Tables]
```
[table:id A Simple Table
@@ -899,9 +920,10 @@
]
]
-[endsect] [/Tables]
+[endsect] [/tables]
-[section Variable Lists]
+[#quickbook.ref.variable_lists]
+[section:variable_lists Variable Lists]
```
[variablelist A Variable List
@@ -932,9 +954,10 @@
the second column contains the definitions. Those familiar with HTML
will recognize this as a "definition list".
-[endsect] [/Variable Lists]
+[endsect] [/variable_lists]
-[section Include]
+[#quickbook.ref.include]
+[section:include Include]
You can include one QuickBook file from another. The syntax is simply:
@@ -963,9 +986,10 @@
named anchor for that section will be "someid.intro", and you can link to
it with [^\[link someid.intro The Intro\]].
-[endsect] [/Include]
+[endsect] [/include]
-[section Import]
+[#quickbook.ref.import]
+[section:import Import]
When documenting code, you'd surely need to present code from actual source
files. While it is possible to copy some code and paste them in your QuickBook
@@ -1110,4 +1134,4 @@
See the actual code here: [@boost:/tools/quickbook/test/stub.cpp]
-[endsect] [/Import]
+[endsect] [/import]
Modified: branches/quickbook-dev/tools/quickbook/doc/change_log.qbk
==============================================================================
--- branches/quickbook-dev/tools/quickbook/doc/change_log.qbk (original)
+++ branches/quickbook-dev/tools/quickbook/doc/change_log.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -208,3 +208,43 @@
* Close open sections at end of document (still warns about them).
* New anchor markup for headers, will hopefully generate better pdfs.
* Remove some whitespace around code from post processed output.
+
+[heading Version 1.5.7 - Boost 1.49]
+
+* Several internal changes.
+* Some improved error messages.
+* Better handling of block templates expanded in a phrase context.
+* Avoids empty simple markup (i.e. \/\/ is not treated as an italic empty
+ space.
+* Better anchor markup for headers, which should be better for printing
+ - suggested by John Maddock.
+* Further improvements to the id generator.
+* If sections are left unopened at the end of a document, then close them
+ in the generated markup.
+* Try to handle whitespace better at the beginning and end of code blocks.
+* Handle lists that come immediately after an anchor.
+* Make horizontal rules followed by multi-line comments a little more
+ sensible.
+* Better support for empty ids and titles in docinfo.
+* Fix some minor regressions in SVG handling.
+* Better handling of invalid command line macros.
+* When auto-building quickbook, build the release version.
+* Lots of changes for 1.6:
+ * Scope templates in included files.
+ * Support import of templates and macros.
+ * Including top level quickbook blocks from source files.
+ * Use doc info blocks in included quickbook files.
+ * Better handling of macros with the same name.
+ * `block` element.
+ * Better handling of significant punctuation (e.g. escapes, square brackets).
+ * Support escapes in links, anchors, images, includes etc.
+ * Improved table title syntax.
+ * Paragraphs nested in lists.
+ * New docinfo attributes:
+ * `compatibility-mode` to make it possible to upgrade documents without
+ breaking ids.
+ * `xmlbase` for escaped `xi:include`s.
+ * Allow some docinfo attributes to be used before, or without, a doc info
+ block (`quickbook`, `compatibility-mode`, `source-mode`).
+ * Only add explicit alt text to images.
+ * Don't put 'inline' code blocks inside paragraphs.
Modified: branches/quickbook-dev/tools/quickbook/doc/phrase.qbk
==============================================================================
--- branches/quickbook-dev/tools/quickbook/doc/phrase.qbk (original)
+++ branches/quickbook-dev/tools/quickbook/doc/phrase.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -14,7 +14,8 @@
[source-mode teletype]
]
-[section Font Styles]
+[#quickbook.ref.font_styles]
+[section:font_styles Font Styles]
```
['italic], [*bold], [_underline], [^teletype], [-strikethrough]
@@ -34,9 +35,10 @@
[*['bold-italic]]
-[endsect] [/Font Styles]
+[endsect] [/font_styles]
-[section Replaceable]
+[#quickbook.ref.replaceable]
+[section:replaceable Replaceable]
When you want content that may or must be replaced by the user, use the syntax:
@@ -48,9 +50,10 @@
[~replacement]
-[endsect] [/Replaceable]
+[endsect] [/replaceable]
-[section Quotations]
+[#quickbook.ref.quotations]
+[section:quotations Quotations]
```
["A question that sometimes drives me hazy: am I or are the others crazy?]--Einstein
@@ -76,9 +79,10 @@
["Here's the rule for bargains: ["Do other men, for they would do you.]
That's the true business precept.]
-[endsect] [/Quotations]
+[endsect] [/quotations]
-[section Simple formatting]
+[#quickbook.ref.simple_formatting]
+[section:simple_formatting Simple formatting]
Simple markup for formatting text, common in many applications, is now supported:
@@ -159,9 +163,10 @@
One for the master, one for the dame,
And one for the little boy who lives down the lane.
-[endsect] [/Simple Formatting]
+[endsect] [/simple_formatting]
-[section Inline code]
+[#quickbook.ref.inline_code]
+[section:inline_code Inline code]
Inlining code in paragraphs is quite common when writing C++ documentation. We
provide a very simple markup for this. For example, this:
@@ -179,9 +184,10 @@
single quote: `"'"`. Note too that [^\`some code\`] is preferred over
`[^some code]`. ]
-[endsect] [/Inline Code]
+[endsect] [/inline_code]
-[section Code blocks]
+[#quickbook.ref.code_blocks]
+[section:code_blocks Code blocks]
Preformatted code simply starts with a space or a tab (See __code__).
However, such a simple syntax cannot be used as phrase elements in lists
@@ -235,9 +241,10 @@
[teletype]
-[endsect] [/Code blocks]
+[endsect] [/code_blocks]
-[section Source Mode]
+[#quickbook.ref.source_mode]
+[section:source_mode Source Mode]
If a document contains more than one type of source code then the source
mode may be changed dynamically as the document is processed. All QuickBook
@@ -270,10 +277,10 @@
[note The source mode strings are lowercase.]
-[endsect] [/Source Mode]
+[endsect] [/source_mode]
-[#ref-line-break]
-[section line-break]
+[#quickbook.ref.line_break]
+[section:line_break line-break]
```
[br]
@@ -283,9 +290,10 @@
there might be problems, especially when using an alternative docbook
processor.]
-[endsect] [/Line break]
+[endsect] [/line_break]
-[section Anchors]
+[#quickbook.ref.anchors]
+[section:anchors Anchors]
```
[#named_anchor]
@@ -299,9 +307,10 @@
quickbook documentation. Be careful to avoid clashes with anchors in
other sections.
-[endsect] [/Anchors]
+[endsect] [/anchors]
-[section Links]
+[#quickbook.ref.links]
+[section:links Links]
```
[@http://www.boost.org this is [*boost's] website....]
@@ -339,9 +348,10 @@
Note that this is only available when using BoostBook, and only for links
- it can't be used for images.
-[endsect] [/Links]
+[endsect] [/links]
-[section Anchor links]
+[#quickbook.ref.anchor_links]
+[section:anchor_links Anchor links]
You can link within a document using:
@@ -351,9 +361,10 @@
See sections __section__ and __heading__ for more info.
-[endsect] [/Anchor links]
+[endsect] [/anchor_links]
-[section refentry links]
+[#quickbook.ref.refentry_links]
+[section:refentry_links refentry links]
In addition, you can link internally to an XML refentry like:
@@ -372,8 +383,9 @@
This gets converted into [^<link linkend="xml.refentry">xml.refentry</link>].
-[endsect] [/refentry links]
+[endsect] [/refentry_links]
+[#quickbook.ref.code_links]
[section:code_links Code Links]
If you want to link to a function, class, member, enum, concept, global, or header in
@@ -400,9 +412,10 @@
would have "boost::bar::baz" as the link text.
-[endsect] [/Code Links]
+[endsect] [/code_links]
-[section Escape]
+[#quickbook.ref.escape]
+[section:escape Escape]
The escape mark-up is used when we don't want to do any processing.
@@ -427,9 +440,10 @@
[important Be careful when using the escape. The text must conform to
__boostbook__/__docbook__ syntax.]
-[endsect] [/Escape]
+[endsect] [/escape]
-[section Single char escape]
+[#quickbook.ref.single_char_escape]
+[section:single_char_escape Single char escape]
The backslash may be used to escape a single punctuation character. The
punctuation immediately after the backslash is passed without any processing.
@@ -439,15 +453,16 @@
`\n` has a special meaning. It is used to generate line breaks.
-[warning `\n` is now deprecated, use [link ref-line-break `[br]`]
+[warning `\n` is now deprecated, use [link quickbook.ref.line_break `[br]`]
instead. Although, use it sparingly as it can generated invalid docbook]
The escaped space: `\ ` also has a special meaning. The escaped space is removed
from the output.
-[endsect] [/Single char escape]
+[endsect] [/single_char_escape]
-[section Unicode escape]
+[#quickbook.ref.unicode_escape]
+[section:unicode_escape Unicode escape]
You can enter any 16-bit unicode character by using `\u` followed by its 4 digit
hexadecimal code, or a 32-bit character by using `\U` followed by an 8 digit
@@ -463,9 +478,10 @@
\u03B1 + \u03B2
]
-[endsect] [/Unicode escape]
+[endsect] [/unicode_escape]
-[section Images]
+[#quickbook.ref.images]
+[section:images Images]
```
[$image.jpg]
@@ -479,9 +495,10 @@
[$image.jpg [width 200in] [height 200in]]
```
-[endsect] [/Images]
+[endsect] [/images]
-[section Footnotes]
+[#quickbook.ref.footnotes]
+[section:footnotes Footnotes]
As of version 1.3, QuickBook supports footnotes. Just put the text of the
footnote in a `[footnote]` block, and the text will be put at the bottom
@@ -493,9 +510,10 @@
will generate this[footnote A sample footnote].
-[endsect] [/Footnotes]
+[endsect] [/footnotes]
-[section Macro Expansion]
+[#quickbook.ref.macro_expansion]
+[section:macro_expansion Macro Expansion]
```
__a_macro_identifier__
@@ -503,9 +521,10 @@
See __macros__ for details.
-[endsect] [/Macro Expansion]
+[endsect] [/macro_expansion]
-[section Template Expansion]
+[#quickbook.ref.template_expansion]
+[section:template_expansion Template Expansion]
```
[a_template_identifier]
@@ -513,8 +532,9 @@
See __templates__ for details.
-[endsect] [/Template Expansion]
+[endsect] [/template_expansion]
+[#quickbook.ref.cond]
[section:cond Conditional Generation]
Like C++ `#ifdef`, you can generate phrases depending on the presence of
@@ -543,4 +563,4 @@
Yes!
-[endsect] [/Condition Generation]
+[endsect] [/cond]
Modified: branches/quickbook-dev/tools/quickbook/doc/quickbook.qbk
==============================================================================
--- branches/quickbook-dev/tools/quickbook/doc/quickbook.qbk (original)
+++ branches/quickbook-dev/tools/quickbook/doc/quickbook.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -37,49 +37,49 @@
[def __boostbook__ [@http://www.boost.org/doc/html/boostbook.html BoostBook]]
[def __docbook__ [@http://www.docbook.org/ DocBook]]
-[def __comments__ [link quickbook.syntax.comments Comments]]
+[def __comments__ [link quickbook.ref.comments Comments]]
-[def __font_styles__ [link quickbook.syntax.phrase.font_styles Font Styles]]
-[def __quotations__ [link quickbook.syntax.phrase.quotations Quotations]]
-[def __replaceable__ [link quickbook.syntax.phrase.replaceable Replaceble]]
-[def __simple_formatting__ [link quickbook.syntax.phrase.simple_formatting Simple formatting]]
-[def __inline_code__ [link quickbook.syntax.phrase.inline_code Inline code]]
-[def __code_blocks__ [link quickbook.syntax.phrase.code_blocks Code blocks]]
-[def __source_mode__ [link quickbook.syntax.phrase.source_mode Source Mode]]
-[def __line_break__ [link quickbook.syntax.phrase.line_break line-break]]
-[def __anchors__ [link quickbook.syntax.phrase.anchors Anchors]]
-[def __links__ [link quickbook.syntax.phrase.links Links]]
-[def __anchor_links__ [link quickbook.syntax.phrase.anchor_links Anchor links]]
-[def __refentry_links__ [link quickbook.syntax.phrase.refentry_links refentry links]]
-[def __code_links__ [link quickbook.syntax.phrase.code_links function, class, member, enum, macro, concept or header links]]
-[def __escape__ [link quickbook.syntax.phrase.escape Escape]]
-[def __single_char_escape__ [link quickbook.syntax.phrase.single_char_escape Single char escape]]
-[def __images__ [link quickbook.syntax.phrase.images Images]]
-[def __cond__ [link quickbook.syntax.phrase.cond Conditional Generation]]
+[def __font_styles__ [link quickbook.ref.font_styles Font Styles]]
+[def __quotations__ [link quickbook.ref.quotations Quotations]]
+[def __replaceable__ [link quickbook.ref.replaceable Replaceble]]
+[def __simple_formatting__ [link quickbook.ref.simple_formatting Simple formatting]]
+[def __inline_code__ [link quickbook.ref.inline_code Inline code]]
+[def __code_blocks__ [link quickbook.ref.code_blocks Code blocks]]
+[def __source_mode__ [link quickbook.ref.source_mode Source Mode]]
+[def __line_break__ [link quickbook.ref.line_break line-break]]
+[def __anchors__ [link quickbook.ref.anchors Anchors]]
+[def __links__ [link quickbook.ref.links Links]]
+[def __anchor_links__ [link quickbook.ref.anchor_links Anchor links]]
+[def __refentry_links__ [link quickbook.ref.refentry_links refentry links]]
+[def __code_links__ [link quickbook.ref.code_links function, class, member, enum, macro, concept or header links]]
+[def __escape__ [link quickbook.ref.escape Escape]]
+[def __single_char_escape__ [link quickbook.ref.single_char_escape Single char escape]]
+[def __images__ [link quickbook.ref.images Images]]
+[def __cond__ [link quickbook.ref.cond Conditional Generation]]
-[def __document__ [link quickbook.syntax.structure.docinfo Document]]
-[def __section__ [link quickbook.syntax.structure.section Section]]
-[def __xinclude__ [link quickbook.syntax.block.xinclude xinclude]]
-[def __paragraphs__ [link quickbook.syntax.block.paragraphs Paragraphs]]
-[def __ordered_lists__ [link quickbook.syntax.block.lists.ordered_lists Ordered lists]]
-[def __list_hierarchies__ [link quickbook.syntax.block.lists.list_hierarchies List Hierarchies]]
-[def __long_list_lines__ [link quickbook.syntax.block.lists.long_list_lines Long List Lines]]
-[def __unordered_lists__ [link quickbook.syntax.block.lists.unordered_lists Unordered lists]]
-[def __mixed_lists__ [link quickbook.syntax.block.lists.mixed_lists Mixed lists]]
-[def __code__ [link quickbook.syntax.block.code Code]]
-[def __escape_back__ [link quickbook.syntax.block.escape_back Escaping Back To QuickBook]]
-[def __preformatted__ [link quickbook.syntax.block.preformatted Preformatted]]
-[def __blockquote__ [link quickbook.syntax.block.blockquote Blockquote]]
-[def __heading__ [link quickbook.syntax.block.headings Heading]]
-[def __macros__ [link quickbook.syntax.block.macros Macros]]
-[def __templates__ [link quickbook.syntax.block.templates Templates]]
-[def __predefined_macros__ [link quickbook.syntax.block.predefined_macros Predefined Macros]]
-[def __blurbs__ [link quickbook.syntax.block.blurbs Blurbs]]
-[def __admonitions__ [link quickbook.syntax.block.admonitions Admonitions]]
-[def __tables__ [link quickbook.syntax.block.tables Tables]]
-[def __variable_lists__ [link quickbook.syntax.block.variable_lists Variable Lists]]
-[def __include__ [link quickbook.syntax.block.include Include]]
-[def __import__ [link quickbook.syntax.block.import Import]]
+[def __document__ [link quickbook.ref.docinfo Document]]
+[def __section__ [link quickbook.ref.section Section]]
+[def __xinclude__ [link quickbook.ref.xinclude xinclude]]
+[def __paragraphs__ [link quickbook.ref.paragraphs Paragraphs]]
+[def __ordered_lists__ [link quickbook.ref.ordered_lists Ordered lists]]
+[def __list_hierarchies__ [link quickbook.ref.list_hierarchies List Hierarchies]]
+[def __long_list_lines__ [link quickbook.ref.long_list_lines Long List Lines]]
+[def __unordered_lists__ [link quickbook.ref.unordered_lists Unordered lists]]
+[def __mixed_lists__ [link quickbook.ref.mixed_lists Mixed lists]]
+[def __code__ [link quickbook.ref.code Code]]
+[def __escape_back__ [link quickbook.ref.escape_back Escaping Back To QuickBook]]
+[def __preformatted__ [link quickbook.ref.preformatted Preformatted]]
+[def __blockquote__ [link quickbook.ref.blockquote Blockquote]]
+[def __heading__ [link quickbook.ref.headings Heading]]
+[def __macros__ [link quickbook.ref.macros Macros]]
+[def __templates__ [link quickbook.ref.templates Templates]]
+[def __predefined_macros__ [link quickbook.ref.predefined_macros Predefined Macros]]
+[def __blurbs__ [link quickbook.ref.blurbs Blurbs]]
+[def __admonitions__ [link quickbook.ref.admonitions Admonitions]]
+[def __tables__ [link quickbook.ref.tables Tables]]
+[def __variable_lists__ [link quickbook.ref.variable_lists Variable Lists]]
+[def __include__ [link quickbook.ref.include Include]]
+[def __import__ [link quickbook.ref.import Import]]
[include introduction.qbk]
[include change_log.qbk]
Modified: branches/quickbook-dev/tools/quickbook/doc/structure.qbk
==============================================================================
--- branches/quickbook-dev/tools/quickbook/doc/structure.qbk (original)
+++ branches/quickbook-dev/tools/quickbook/doc/structure.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -7,6 +7,7 @@
[@http://www.boost.org/LICENSE_1_0.txt])
]
+[#quickbook.ref.structure]
[chapter Document Structure
[quickbook 1.6]
[id quickbook.syntax.structure]
@@ -26,7 +27,7 @@
currently a work in progress and subject to change.
]
-[#ref-docinfo]
+[#quickbook.ref.docinfo]
[section:docinfo Document Info]
Every document must begin with a Document Info section, which looks something
@@ -73,6 +74,7 @@
]
```
+[#quickbook.ref.attributes]
[section:attributes Document Info Attributes]
The document info block has a few different types of attributes.
@@ -145,6 +147,7 @@
[endsect] [/docinfo]
+[#quickbook.ref.section]
[section:section Sections]
Quickbook documents are structured using 'sections'. These are used
@@ -173,11 +176,12 @@
```
Sections start with the `section` tag, and end with the `[endsect]` tag.
-(`[/...]` is a comment, [link quickbook.syntax.comments described later]).
+(`[/...]` is a comment, [link quickbook.ref.comments described later]).
Sections can be given an optional id:
```
+[#quickbook.ref.id]
[section:id The Section Title]
```
Modified: branches/quickbook-dev/tools/quickbook/doc/syntax.qbk
==============================================================================
--- branches/quickbook-dev/tools/quickbook/doc/syntax.qbk (original)
+++ branches/quickbook-dev/tools/quickbook/doc/syntax.qbk 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,7 +28,8 @@
such as un-matched closing brackets do not go haywire and corrupt anything past
a single block.
-[section Comments]
+[#quickbook.ref.comments]
+[section:comments Comments]
Can be placed anywhere.
@@ -50,5 +51,4 @@
[/ for testing [*only ] ]
-[endsect] [/Comments]
-
+[endsect] [/comments]
Modified: branches/quickbook-dev/tools/quickbook/src/actions.cpp
==============================================================================
--- branches/quickbook-dev/tools/quickbook/src/actions.cpp (original)
+++ branches/quickbook-dev/tools/quickbook/src/actions.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -332,6 +332,14 @@
void list_item_action::operator()() const
{
+ // Be careful as this is sometimes called in the wrong place
+ // for markup such as:
+ //
+ // * A
+ // [endsect]
+ //
+ // This action is called before [endsect] (to end the list item)
+ // and then also after it due to the way the parser works.
std::string str;
state.phrase.swap(str);
state.out << str;
Modified: branches/quickbook-dev/tools/quickbook/src/grammar_impl.hpp
==============================================================================
--- branches/quickbook-dev/tools/quickbook/src/grammar_impl.hpp (original)
+++ branches/quickbook-dev/tools/quickbook/src/grammar_impl.hpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -38,6 +38,7 @@
in_block = phrase | maybe_block | nested_block | conditional_or_block | block,
only_nested_block = nested_block,
only_block = nested_block | conditional_or_block | block,
+ only_list_block = nested_block | conditional_or_block,
only_contextual_block = maybe_block | nested_block | conditional_or_block | block
};
Modified: branches/quickbook-dev/tools/quickbook/src/main_grammar.cpp
==============================================================================
--- branches/quickbook-dev/tools/quickbook/src/main_grammar.cpp (original)
+++ branches/quickbook-dev/tools/quickbook/src/main_grammar.cpp 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -28,8 +28,6 @@
#include <boost/range/algorithm/find_first_of.hpp>
#include <boost/range/as_literal.hpp>
-#include <iostream>
-
namespace quickbook
{
namespace cl = boost::spirit::classic;
@@ -205,7 +203,15 @@
info_ = l.info;
- if (info_.type != element_info::phrase &&
+ if (!l.list_stack.empty() && !l.list_stack.top().root &&
+ info_.type == element_info::block)
+ {
+ // If in a list and the element is a block, end the list.
+ list_item_action list_item(l.state_);
+ list_item();
+ l.clear_stack();
+ }
+ else if (info_.type != element_info::phrase &&
info_.type != element_info::maybe_block)
{
paragraph_action para(l.state_);
@@ -315,7 +321,7 @@
member_action<main_grammar_local> check_indentation(local,
&main_grammar_local::check_indentation_impl);
member_action<main_grammar_local> check_code_block(local,
- &main_grammar_local::check_indentation_impl);
+ &main_grammar_local::check_code_block_impl);
member_action<main_grammar_local> start_blocks(local,
&main_grammar_local::start_blocks_impl);
member_action<main_grammar_local> end_blocks(local,
@@ -430,8 +436,12 @@
>> (cl::ch_p('*') | '#')
>> (*cl::blank_p) [local.list.still_in_block = true]
>> *( cl::eps_p(local.list.still_in_block)
- >> local.list_item(element_info::only_block)
+ >> ( qbk_ver(106u) >> local.list_item(element_info::only_block)
+ | qbk_ver(0, 106u) >> local.list_item(element_info::only_list_block)
+ )
)
+ // TODO: This is sometimes called in the wrong place. Currently
+ // harmless.
>> cl::eps_p [list_item]
;
Modified: branches/quickbook-dev/tools/quickbook/test/list_test-1_5.gold
==============================================================================
--- branches/quickbook-dev/tools/quickbook/test/list_test-1_5.gold (original)
+++ branches/quickbook-dev/tools/quickbook/test/list_test-1_5.gold 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -383,4 +383,20 @@
</listitem>
</itemizedlist>
</section>
+ <section id="list_test.list_immediately_following_markup_2">
+ <title><link linkend="list_test.list_immediately_following_markup_2">List immediately
+ following markup 2</link></title>
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ One [section Nested section]
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Two [endsect]
+ </simpara>
+ </listitem>
+ </itemizedlist>
+ </section>
</article>
Modified: branches/quickbook-dev/tools/quickbook/test/list_test-1_5.quickbook
==============================================================================
--- branches/quickbook-dev/tools/quickbook/test/list_test-1_5.quickbook (original)
+++ branches/quickbook-dev/tools/quickbook/test/list_test-1_5.quickbook 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -98,3 +98,11 @@
* Three
[endsect]
+
+[section List immediately following markup 2]
+* One
+[section Nested section]
+* Two
+[endsect]
+
+[endsect]
Modified: branches/quickbook-dev/tools/quickbook/test/list_test-1_6.gold
==============================================================================
--- branches/quickbook-dev/tools/quickbook/test/list_test-1_6.gold (original)
+++ branches/quickbook-dev/tools/quickbook/test/list_test-1_6.gold 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -420,6 +420,28 @@
</listitem>
</itemizedlist>
</section>
+ <section id="list_test.list_immediately_following_mark0">
+ <title><link linkend="list_test.list_immediately_following_mark0">List immediately
+ following markup 2</link></title>
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ One
+ </simpara>
+ </listitem>
+ </itemizedlist>
+ <section id="list_test.list_immediately_following_mark0.nested_section">
+ <title><link linkend="list_test.list_immediately_following_mark0.nested_section">Nested
+ section</link></title>
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ Two
+ </simpara>
+ </listitem>
+ </itemizedlist>
+ </section>
+ </section>
<section id="list_test.paragraphs_in_list_items">
<title><link linkend="list_test.paragraphs_in_list_items">Paragraphs in list
items</link></title>
@@ -473,4 +495,32 @@
</listitem>
</itemizedlist>
</section>
+ <section id="list_test.indented_code_blocks_in_lists">
+ <title><link linkend="list_test.indented_code_blocks_in_lists">Indented code
+ blocks in lists</link></title>
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ A
+<programlisting><phrase role="identifier">B</phrase>
+</programlisting>
+ <para>
+ C
+ </para>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ D
+<programlisting><phrase role="identifier">E</phrase>
+</programlisting>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ F
+ </simpara>
+ </listitem>
+ </itemizedlist>
+ </section>
</article>
Modified: branches/quickbook-dev/tools/quickbook/test/list_test-1_6.quickbook
==============================================================================
--- branches/quickbook-dev/tools/quickbook/test/list_test-1_6.quickbook (original)
+++ branches/quickbook-dev/tools/quickbook/test/list_test-1_6.quickbook 2012-03-16 04:48:10 EDT (Fri, 16 Mar 2012)
@@ -103,6 +103,13 @@
[endsect]
+[section List immediately following markup 2]
+* One
+[section Nested section]
+* Two
+[endsect]
+[endsect]
+
[section Paragraphs in list items]
* A1
@@ -125,4 +132,16 @@
D2
-[endsect]
\ No newline at end of file
+[endsect]
+
+[section Indented code blocks in lists]
+
+* A
+
+ B
+ C
+* D
+
+ E
+* F
+[endsect]
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