summaryrefslogtreecommitdiff
path: root/boost
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2013-08-26 12:15:55 (GMT)
committerAnas Nashif <anas.nashif@intel.com>2013-08-26 12:15:55 (GMT)
commitbb4dd8289b351fae6b55e303f189127a394a1edd (patch)
tree77c9c35a31b1459dd7988c2448e797d142530c41 /boost
parent1a78a62555be32868418fe52f8e330c9d0f95d5a (diff)
downloadboost-bb4dd8289b351fae6b55e303f189127a394a1edd.zip
boost-bb4dd8289b351fae6b55e303f189127a394a1edd.tar.gz
boost-bb4dd8289b351fae6b55e303f189127a394a1edd.tar.bz2
Imported Upstream version 1.51.0upstream/1.51.0refs/changes/75/8775/1
Diffstat (limited to 'boost')
-rw-r--r--boost/accumulators/framework/accumulators/droppable_accumulator.hpp11
-rw-r--r--boost/accumulators/statistics.hpp4
-rw-r--r--boost/accumulators/statistics/extended_p_square_quantile.hpp1
-rw-r--r--boost/accumulators/statistics/median.hpp2
-rw-r--r--boost/accumulators/statistics/p_square_cumul_dist.hpp260
-rw-r--r--boost/accumulators/statistics/p_square_cumulative_distribution.hpp259
-rw-r--r--boost/accumulators/statistics/weighted_median.hpp2
-rw-r--r--boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp262
-rw-r--r--boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp261
-rw-r--r--boost/accumulators/statistics/weighted_peaks_over_threshold.hpp1
-rw-r--r--boost/algorithm/clamp.hpp175
-rw-r--r--boost/algorithm/cxx11/all_of.hpp91
-rw-r--r--boost/algorithm/cxx11/any_of.hpp90
-rw-r--r--boost/algorithm/cxx11/copy_if.hpp133
-rw-r--r--boost/algorithm/cxx11/copy_n.hpp44
-rw-r--r--boost/algorithm/cxx11/find_if_not.hpp60
-rw-r--r--boost/algorithm/cxx11/iota.hpp74
-rw-r--r--boost/algorithm/cxx11/is_partitioned.hpp65
-rw-r--r--boost/algorithm/cxx11/is_permutation.hpp139
-rw-r--r--boost/algorithm/cxx11/is_sorted.hpp287
-rw-r--r--boost/algorithm/cxx11/none_of.hpp88
-rw-r--r--boost/algorithm/cxx11/one_of.hpp82
-rw-r--r--boost/algorithm/cxx11/partition_copy.hpp78
-rw-r--r--boost/algorithm/cxx11/partition_point.hpp72
-rw-r--r--boost/algorithm/hex.hpp265
-rw-r--r--boost/algorithm/searching/boyer_moore.hpp268
-rw-r--r--boost/algorithm/searching/boyer_moore_horspool.hpp194
-rw-r--r--boost/algorithm/searching/detail/bm_traits.hpp105
-rw-r--r--boost/algorithm/searching/detail/debugging.hpp30
-rw-r--r--boost/algorithm/searching/knuth_morris_pratt.hpp253
-rw-r--r--boost/algorithm/string/find.hpp8
-rw-r--r--boost/algorithm/string/iter_find.hpp6
-rw-r--r--boost/archive/basic_archive.hpp3
-rw-r--r--boost/archive/detail/basic_serializer_map.hpp2
-rw-r--r--boost/archive/detail/iserializer.hpp2
-rw-r--r--boost/archive/iterators/head_iterator.hpp4
-rw-r--r--boost/archive/iterators/remove_whitespace.hpp11
-rw-r--r--boost/archive/shared_ptr_helper.hpp2
-rw-r--r--boost/array.hpp13
-rw-r--r--boost/asio/basic_socket_iostream.hpp6
-rw-r--r--boost/asio/buffered_write_stream.hpp2
-rw-r--r--boost/asio/buffers_iterator.hpp4
-rw-r--r--boost/asio/detail/atomic_count.hpp3
-rw-r--r--boost/asio/detail/config.hpp33
-rw-r--r--boost/asio/detail/epoll_reactor.hpp2
-rw-r--r--boost/asio/detail/fenced_block.hpp6
-rw-r--r--boost/asio/detail/gcc_x86_fenced_block.hpp21
-rw-r--r--boost/asio/detail/impl/epoll_reactor.ipp50
-rw-r--r--boost/asio/detail/impl/socket_ops.ipp1
-rw-r--r--boost/asio/detail/impl/strand_service.hpp5
-rw-r--r--boost/asio/detail/impl/strand_service.ipp2
-rw-r--r--boost/asio/detail/impl/task_io_service.hpp2
-rw-r--r--boost/asio/detail/impl/task_io_service.ipp176
-rw-r--r--boost/asio/detail/keyword_tss_ptr.hpp72
-rw-r--r--boost/asio/detail/strand_service.hpp3
-rw-r--r--boost/asio/detail/task_io_service.hpp28
-rw-r--r--boost/asio/detail/tss_ptr.hpp6
-rw-r--r--boost/asio/detail/win_iocp_io_service.hpp16
-rw-r--r--boost/asio/ssl/detail/impl/engine.ipp10
-rw-r--r--boost/asio/ssl/detail/impl/openssl_init.ipp2
-rw-r--r--boost/asio/ssl/detail/openssl_types.hpp4
-rw-r--r--boost/asio/strand.hpp1
-rw-r--r--boost/asio/version.hpp2
-rw-r--r--boost/asio/windows/basic_object_handle.hpp6
-rw-r--r--boost/bimap/container_adaptor/list_map_adaptor.hpp1
-rw-r--r--boost/bimap/container_adaptor/map_adaptor.hpp1
-rw-r--r--boost/bimap/container_adaptor/multimap_adaptor.hpp1
-rw-r--r--boost/bimap/container_adaptor/unordered_map_adaptor.hpp1
-rw-r--r--boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp1
-rw-r--r--boost/bimap/container_adaptor/vector_map_adaptor.hpp1
-rw-r--r--boost/bimap/detail/map_view_iterator.hpp6
-rw-r--r--boost/bimap/detail/set_view_iterator.hpp6
-rw-r--r--boost/bimap/relation/detail/mutant.hpp2
-rw-r--r--boost/bimap/relation/mutant_relation.hpp5
-rw-r--r--boost/bimap/views/unconstrained_map_view.hpp2
-rw-r--r--boost/bimap/views/unconstrained_set_view.hpp2
-rw-r--r--boost/chrono/config.hpp23
-rw-r--r--boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp67
-rw-r--r--boost/chrono/detail/inlined/posix/thread_clock.hpp11
-rw-r--r--boost/chrono/detail/inlined/win/chrono.hpp1
-rw-r--r--boost/chrono/detail/inlined/win/process_cpu_clocks.hpp6
-rw-r--r--boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp2
-rw-r--r--boost/chrono/detail/scan_keyword.hpp7
-rw-r--r--boost/chrono/detail/system.hpp5
-rw-r--r--boost/chrono/duration.hpp19
-rw-r--r--boost/chrono/process_cpu_clocks.hpp4
-rw-r--r--boost/chrono/system_clocks.hpp12
-rw-r--r--boost/chrono/thread_clock.hpp7
-rw-r--r--boost/chrono/time_point.hpp20
-rw-r--r--boost/concept_check.hpp10
-rw-r--r--boost/config/compiler/borland.hpp56
-rw-r--r--boost/config/compiler/clang.hpp66
-rw-r--r--boost/config/compiler/codegear.hpp39
-rw-r--r--boost/config/compiler/common_edg.hpp52
-rw-r--r--boost/config/compiler/cray.hpp46
-rw-r--r--boost/config/compiler/digitalmars.hpp50
-rw-r--r--boost/config/compiler/gcc.hpp60
-rw-r--r--boost/config/compiler/gcc_xml.hpp51
-rw-r--r--boost/config/compiler/hp_acc.hpp50
-rw-r--r--boost/config/compiler/intel.hpp50
-rw-r--r--boost/config/compiler/metrowerks.hpp52
-rw-r--r--boost/config/compiler/mpw.hpp52
-rw-r--r--boost/config/compiler/pathscale.hpp82
-rw-r--r--boost/config/compiler/pgi.hpp99
-rw-r--r--boost/config/compiler/sunpro_cc.hpp52
-rw-r--r--boost/config/compiler/vacpp.hpp62
-rw-r--r--boost/config/compiler/visualc.hpp137
-rw-r--r--boost/config/stdlib/dinkumware.hpp47
-rw-r--r--boost/config/stdlib/libcomo.hpp43
-rw-r--r--boost/config/stdlib/libcpp.hpp9
-rw-r--r--boost/config/stdlib/libstdcpp3.hpp58
-rw-r--r--boost/config/stdlib/modena.hpp43
-rw-r--r--boost/config/stdlib/msl.hpp43
-rw-r--r--boost/config/stdlib/roguewave.hpp43
-rw-r--r--boost/config/stdlib/sgi.hpp43
-rw-r--r--boost/config/stdlib/stlport.hpp47
-rw-r--r--boost/config/stdlib/vacpp.hpp43
-rw-r--r--boost/config/suffix.hpp329
-rw-r--r--boost/container/allocator/scoped_allocator.hpp651
-rw-r--r--boost/container/allocator_traits.hpp (renamed from boost/container/allocator/allocator_traits.hpp)131
-rw-r--r--boost/container/container_fwd.hpp32
-rw-r--r--boost/container/deque.hpp384
-rw-r--r--boost/container/detail/adaptive_node_pool_impl.hpp20
-rw-r--r--boost/container/detail/advanced_insert_int.hpp139
-rw-r--r--boost/container/detail/algorithms.hpp4
-rw-r--r--boost/container/detail/allocation_type.hpp4
-rw-r--r--boost/container/detail/config_begin.hpp3
-rw-r--r--boost/container/detail/config_end.hpp2
-rw-r--r--boost/container/detail/destroyers.hpp102
-rw-r--r--boost/container/detail/flat_tree.hpp353
-rw-r--r--boost/container/detail/function_detector.hpp6
-rw-r--r--boost/container/detail/iterators.hpp54
-rw-r--r--boost/container/detail/math_functions.hpp6
-rw-r--r--boost/container/detail/memory_util.hpp (renamed from boost/container/allocator/memory_util.hpp)2
-rw-r--r--boost/container/detail/mpl.hpp22
-rw-r--r--boost/container/detail/multiallocation_chain.hpp2
-rw-r--r--boost/container/detail/node_alloc_holder.hpp67
-rw-r--r--boost/container/detail/node_pool_impl.hpp22
-rw-r--r--boost/container/detail/pair.hpp121
-rw-r--r--boost/container/detail/pool_common.hpp2
-rw-r--r--boost/container/detail/preprocessor.hpp35
-rw-r--r--boost/container/detail/stored_ref.hpp2
-rw-r--r--boost/container/detail/transform_iterator.hpp8
-rw-r--r--boost/container/detail/tree.hpp254
-rw-r--r--boost/container/detail/type_traits.hpp13
-rw-r--r--boost/container/detail/utilities.hpp19
-rw-r--r--boost/container/detail/value_init.hpp8
-rw-r--r--boost/container/detail/variadic_templates_tools.hpp6
-rw-r--r--boost/container/detail/version_type.hpp4
-rw-r--r--boost/container/detail/workaround.hpp7
-rw-r--r--boost/container/flat_map.hpp823
-rw-r--r--boost/container/flat_set.hpp625
-rw-r--r--boost/container/list.hpp395
-rw-r--r--boost/container/map.hpp628
-rw-r--r--boost/container/scoped_allocator.hpp1466
-rw-r--r--boost/container/scoped_allocator_fwd.hpp83
-rw-r--r--boost/container/set.hpp560
-rw-r--r--boost/container/slist.hpp530
-rw-r--r--boost/container/stable_vector.hpp354
-rw-r--r--boost/container/string.hpp607
-rw-r--r--boost/container/vector.hpp484
-rw-r--r--boost/context/all.hpp14
-rw-r--r--boost/context/detail/config.hpp42
-rw-r--r--boost/context/detail/fcontext_arm.hpp66
-rw-r--r--boost/context/detail/fcontext_i386.hpp68
-rw-r--r--boost/context/detail/fcontext_i386_win.hpp83
-rw-r--r--boost/context/detail/fcontext_mips.hpp68
-rw-r--r--boost/context/detail/fcontext_ppc.hpp70
-rw-r--r--boost/context/detail/fcontext_x86_64.hpp66
-rw-r--r--boost/context/detail/fcontext_x86_64_win.hpp90
-rw-r--r--boost/context/fcontext.hpp82
-rw-r--r--boost/context/stack_allocator.hpp37
-rw-r--r--boost/context/stack_utils.hpp41
-rw-r--r--boost/date_time.hpp2
-rw-r--r--boost/date_time/adjust_functors.hpp2
-rw-r--r--boost/date_time/c_local_time_adjustor.hpp2
-rw-r--r--boost/date_time/c_time.hpp2
-rw-r--r--boost/date_time/compiler_config.hpp2
-rw-r--r--boost/date_time/constrained_value.hpp2
-rw-r--r--boost/date_time/date.hpp2
-rw-r--r--boost/date_time/date_clock_device.hpp2
-rw-r--r--boost/date_time/date_defs.hpp2
-rw-r--r--boost/date_time/date_duration.hpp2
-rw-r--r--boost/date_time/date_duration_types.hpp2
-rw-r--r--boost/date_time/date_facet.hpp2
-rw-r--r--boost/date_time/date_format_simple.hpp2
-rw-r--r--boost/date_time/date_formatting.hpp2
-rw-r--r--boost/date_time/date_formatting_limited.hpp2
-rw-r--r--boost/date_time/date_formatting_locales.hpp2
-rw-r--r--boost/date_time/date_generator_formatter.hpp2
-rw-r--r--boost/date_time/date_generator_parser.hpp2
-rw-r--r--boost/date_time/date_generators.hpp2
-rw-r--r--boost/date_time/date_iterator.hpp2
-rw-r--r--boost/date_time/date_names_put.hpp2
-rw-r--r--boost/date_time/date_parsing.hpp2
-rw-r--r--boost/date_time/dst_rules.hpp2
-rw-r--r--boost/date_time/filetime_functions.hpp2
-rw-r--r--boost/date_time/format_date_parser.hpp2
-rw-r--r--boost/date_time/gregorian/conversion.hpp2
-rw-r--r--boost/date_time/gregorian/formatters.hpp2
-rw-r--r--boost/date_time/gregorian/formatters_limited.hpp2
-rw-r--r--boost/date_time/gregorian/greg_calendar.hpp2
-rw-r--r--boost/date_time/gregorian/greg_date.hpp2
-rw-r--r--boost/date_time/gregorian/greg_day.hpp2
-rw-r--r--boost/date_time/gregorian/greg_day_of_year.hpp2
-rw-r--r--boost/date_time/gregorian/greg_duration.hpp2
-rw-r--r--boost/date_time/gregorian/greg_duration_types.hpp2
-rw-r--r--boost/date_time/gregorian/greg_facet.hpp2
-rw-r--r--boost/date_time/gregorian/greg_month.hpp2
-rw-r--r--boost/date_time/gregorian/greg_serialize.hpp29
-rw-r--r--boost/date_time/gregorian/greg_weekday.hpp2
-rw-r--r--boost/date_time/gregorian/greg_year.hpp2
-rw-r--r--boost/date_time/gregorian/greg_ymd.hpp2
-rw-r--r--boost/date_time/gregorian/gregorian.hpp2
-rw-r--r--boost/date_time/gregorian/gregorian_io.hpp2
-rw-r--r--boost/date_time/gregorian/gregorian_types.hpp2
-rw-r--r--boost/date_time/gregorian/parsers.hpp2
-rw-r--r--boost/date_time/gregorian_calendar.hpp2
-rw-r--r--boost/date_time/gregorian_calendar.ipp2
-rw-r--r--boost/date_time/int_adapter.hpp2
-rw-r--r--boost/date_time/iso_format.hpp2
-rw-r--r--boost/date_time/local_time/conversion.hpp2
-rw-r--r--boost/date_time/local_time/custom_time_zone.hpp2
-rw-r--r--boost/date_time/local_time/date_duration_operators.hpp2
-rw-r--r--boost/date_time/local_time/dst_transition_day_rules.hpp2
-rw-r--r--boost/date_time/local_time/local_date_time.hpp2
-rw-r--r--boost/date_time/local_time/local_time.hpp2
-rw-r--r--boost/date_time/local_time/local_time_io.hpp2
-rw-r--r--boost/date_time/local_time/local_time_types.hpp2
-rw-r--r--boost/date_time/local_time/posix_time_zone.hpp2
-rw-r--r--boost/date_time/local_time/tz_database.hpp2
-rw-r--r--boost/date_time/local_time_adjustor.hpp2
-rw-r--r--boost/date_time/local_timezone_defs.hpp2
-rw-r--r--boost/date_time/locale_config.hpp2
-rw-r--r--boost/date_time/microsec_time_clock.hpp2
-rw-r--r--boost/date_time/parse_format_base.hpp2
-rw-r--r--boost/date_time/period.hpp2
-rw-r--r--boost/date_time/period_formatter.hpp2
-rw-r--r--boost/date_time/period_parser.hpp2
-rw-r--r--boost/date_time/posix_time/conversion.hpp2
-rw-r--r--boost/date_time/posix_time/date_duration_operators.hpp2
-rw-r--r--boost/date_time/posix_time/posix_time.hpp2
-rw-r--r--boost/date_time/posix_time/posix_time_config.hpp2
-rw-r--r--boost/date_time/posix_time/posix_time_duration.hpp2
-rw-r--r--boost/date_time/posix_time/posix_time_io.hpp2
-rw-r--r--boost/date_time/posix_time/posix_time_legacy_io.hpp2
-rw-r--r--boost/date_time/posix_time/posix_time_system.hpp2
-rw-r--r--boost/date_time/posix_time/ptime.hpp2
-rw-r--r--boost/date_time/posix_time/time_formatters.hpp2
-rw-r--r--boost/date_time/posix_time/time_formatters_limited.hpp2
-rw-r--r--boost/date_time/posix_time/time_parsers.hpp2
-rw-r--r--boost/date_time/posix_time/time_period.hpp2
-rw-r--r--boost/date_time/posix_time/time_serialize.hpp2
-rw-r--r--boost/date_time/special_defs.hpp2
-rw-r--r--boost/date_time/special_values_formatter.hpp2
-rw-r--r--boost/date_time/string_convert.hpp2
-rw-r--r--boost/date_time/string_parse_tree.hpp2
-rw-r--r--boost/date_time/strings_from_facet.hpp2
-rw-r--r--boost/date_time/time.hpp2
-rw-r--r--boost/date_time/time_clock.hpp2
-rw-r--r--boost/date_time/time_defs.hpp2
-rw-r--r--boost/date_time/time_duration.hpp2
-rw-r--r--boost/date_time/time_facet.hpp2
-rw-r--r--boost/date_time/time_formatting_streams.hpp2
-rw-r--r--boost/date_time/time_iterator.hpp2
-rw-r--r--boost/date_time/time_parsing.hpp2
-rw-r--r--boost/date_time/time_resolution_traits.hpp2
-rw-r--r--boost/date_time/time_system_counted.hpp2
-rw-r--r--boost/date_time/time_system_split.hpp2
-rw-r--r--boost/date_time/time_zone_base.hpp2
-rw-r--r--boost/date_time/time_zone_names.hpp2
-rw-r--r--boost/date_time/tz_db_base.hpp2
-rw-r--r--boost/date_time/wrapping_int.hpp2
-rw-r--r--boost/date_time/year_month_day.hpp2
-rw-r--r--boost/detail/container_fwd.hpp15
-rw-r--r--boost/detail/scoped_enum_emulation.hpp349
-rw-r--r--boost/detail/utf8_codecvt_facet.ipp285
-rw-r--r--boost/exception/detail/attribute_noreturn.hpp2
-rw-r--r--boost/exception/detail/error_info_impl.hpp1
-rw-r--r--boost/exception/detail/exception_ptr.hpp9
-rw-r--r--boost/exception/error_info.hpp3
-rw-r--r--boost/exception/exception.hpp31
-rw-r--r--boost/exception/info.hpp2
-rw-r--r--boost/exception/info_tuple.hpp24
-rw-r--r--boost/filesystem.hpp29
-rw-r--r--boost/filesystem/config.hpp104
-rw-r--r--boost/filesystem/convenience.hpp67
-rw-r--r--boost/filesystem/exception.hpp40
-rw-r--r--boost/filesystem/fstream.hpp181
-rw-r--r--boost/filesystem/operations.hpp1095
-rw-r--r--boost/filesystem/path.hpp757
-rw-r--r--boost/filesystem/path_traits.hpp (renamed from boost/filesystem/v3/path_traits.hpp)20
-rw-r--r--boost/filesystem/v2/config.hpp106
-rw-r--r--boost/filesystem/v2/convenience.hpp339
-rw-r--r--boost/filesystem/v2/exception.hpp9
-rw-r--r--boost/filesystem/v2/fstream.hpp613
-rw-r--r--boost/filesystem/v2/operations.hpp1245
-rw-r--r--boost/filesystem/v2/path.hpp1571
-rw-r--r--boost/filesystem/v3/config.hpp85
-rw-r--r--boost/filesystem/v3/convenience.hpp74
-rw-r--r--boost/filesystem/v3/exception.hpp9
-rw-r--r--boost/filesystem/v3/fstream.hpp208
-rw-r--r--boost/filesystem/v3/operations.hpp1199
-rw-r--r--boost/filesystem/v3/path.hpp760
-rw-r--r--boost/foreach.hpp4
-rw-r--r--boost/foreach_fwd.hpp23
-rw-r--r--boost/functional/detail/container_fwd.hpp14
-rw-r--r--boost/functional/hash/detail/container_fwd_0x.hpp29
-rw-r--r--boost/functional/hash/detail/hash_float.hpp16
-rw-r--r--boost/functional/hash/extensions.hpp101
-rw-r--r--boost/functional/hash/hash.hpp172
-rw-r--r--boost/functional/overloaded_function.hpp311
-rw-r--r--boost/functional/overloaded_function/config.hpp50
-rw-r--r--boost/functional/overloaded_function/detail/base.hpp86
-rw-r--r--boost/functional/overloaded_function/detail/function_type.hpp85
-rw-r--r--boost/fusion/adapted/adt/detail/extension.hpp21
-rw-r--r--boost/fusion/adapted/std_tuple/detail/at_impl.hpp10
-rw-r--r--boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp10
-rw-r--r--boost/fusion/adapted/std_tuple/tag_of.hpp6
-rw-r--r--boost/fusion/adapted/struct.hpp1
-rw-r--r--boost/fusion/adapted/struct/define_struct_inline.hpp25
-rw-r--r--boost/fusion/adapted/struct/detail/define_struct_inline.hpp375
-rw-r--r--boost/fusion/algorithm/auxiliary/copy.hpp13
-rw-r--r--boost/fusion/algorithm/iteration/accumulate.hpp16
-rw-r--r--boost/fusion/algorithm/iteration/accumulate_fwd.hpp15
-rw-r--r--boost/fusion/algorithm/iteration/for_each.hpp16
-rw-r--r--boost/fusion/algorithm/iteration/for_each_fwd.hpp17
-rw-r--r--boost/fusion/algorithm/query/count.hpp9
-rw-r--r--boost/fusion/algorithm/query/count_if.hpp9
-rw-r--r--boost/fusion/algorithm/transformation/erase.hpp35
-rw-r--r--boost/fusion/algorithm/transformation/insert.hpp10
-rw-r--r--boost/fusion/algorithm/transformation/push_back.hpp9
-rw-r--r--boost/fusion/algorithm/transformation/push_front.hpp9
-rw-r--r--boost/fusion/algorithm/transformation/replace.hpp9
-rw-r--r--boost/fusion/algorithm/transformation/replace_if.hpp8
-rw-r--r--boost/fusion/algorithm/transformation/reverse.hpp9
-rw-r--r--boost/fusion/container/deque/back_extended_deque.hpp41
-rw-r--r--boost/fusion/container/deque/convert.hpp6
-rw-r--r--boost/fusion/container/deque/deque.hpp133
-rw-r--r--boost/fusion/container/deque/deque_fwd.hpp47
-rw-r--r--boost/fusion/container/deque/deque_iterator.hpp10
-rw-r--r--boost/fusion/container/deque/detail/as_deque.hpp2
-rw-r--r--boost/fusion/container/deque/detail/at_impl.hpp36
-rw-r--r--boost/fusion/container/deque/detail/begin_impl.hpp26
-rw-r--r--boost/fusion/container/deque/detail/convert_impl.hpp4
-rw-r--r--boost/fusion/container/deque/detail/cpp03_deque.hpp125
-rw-r--r--boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp54
-rw-r--r--boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp (renamed from boost/fusion/container/deque/detail/deque_keyed_values.hpp)6
-rw-r--r--boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp56
-rw-r--r--boost/fusion/container/deque/detail/deque_forward_ctor.hpp8
-rw-r--r--boost/fusion/container/deque/detail/deque_initial_size.hpp6
-rw-r--r--boost/fusion/container/deque/detail/deque_keyed_values_call.hpp6
-rw-r--r--boost/fusion/container/deque/detail/end_impl.hpp26
-rw-r--r--boost/fusion/container/deque/detail/is_sequence_impl.hpp10
-rw-r--r--boost/fusion/container/deque/detail/keyed_element.hpp39
-rw-r--r--boost/fusion/container/deque/detail/value_at_impl.hpp22
-rw-r--r--boost/fusion/container/deque/front_extended_deque.hpp39
-rw-r--r--boost/fusion/container/deque/limits.hpp6
-rw-r--r--boost/fusion/container/list/detail/at_impl.hpp12
-rw-r--r--boost/fusion/container/map/detail/at_impl.hpp10
-rw-r--r--boost/fusion/container/map/detail/deref_data_impl.hpp9
-rw-r--r--boost/fusion/container/vector/detail/at_impl.hpp4
-rw-r--r--boost/fusion/container/vector/detail/deref_impl.hpp9
-rw-r--r--boost/fusion/container/vector/detail/preprocessed/vector10.hpp141
-rw-r--r--boost/fusion/container/vector/detail/preprocessed/vector20.hpp140
-rw-r--r--boost/fusion/container/vector/detail/preprocessed/vector30.hpp140
-rw-r--r--boost/fusion/container/vector/detail/preprocessed/vector40.hpp140
-rw-r--r--boost/fusion/container/vector/detail/preprocessed/vector50.hpp140
-rw-r--r--boost/fusion/container/vector/detail/vector_n.hpp19
-rw-r--r--boost/fusion/functional/adapter/unfused.hpp12
-rw-r--r--boost/fusion/functional/adapter/unfused_typed.hpp12
-rw-r--r--boost/fusion/include/define_struct_inline.hpp13
-rw-r--r--boost/fusion/include/repetitive_view.hpp (renamed from boost/fusion/include/repetetive_view.hpp)0
-rw-r--r--boost/fusion/sequence/comparison/detail/equal_to.hpp3
-rw-r--r--boost/fusion/sequence/comparison/detail/greater.hpp6
-rw-r--r--boost/fusion/sequence/comparison/detail/greater_equal.hpp6
-rw-r--r--boost/fusion/sequence/comparison/detail/less.hpp6
-rw-r--r--boost/fusion/sequence/comparison/detail/less_equal.hpp6
-rw-r--r--boost/fusion/sequence/comparison/detail/not_equal_to.hpp3
-rw-r--r--boost/fusion/support.hpp1
-rw-r--r--boost/fusion/support/as_const.hpp26
-rw-r--r--boost/fusion/support/detail/access.hpp4
-rw-r--r--boost/fusion/support/is_segmented.hpp7
-rw-r--r--boost/fusion/support/is_sequence.hpp6
-rw-r--r--boost/fusion/support/is_view.hpp7
-rw-r--r--boost/fusion/tuple/detail/preprocessed/make_tuple.hpp2
-rw-r--r--boost/fusion/tuple/detail/preprocessed/tuple_fwd.hpp2
-rw-r--r--boost/fusion/tuple/detail/preprocessed/tuple_tie.hpp2
-rw-r--r--boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp14
-rw-r--r--boost/geometry/algorithms/area.hpp2
-rw-r--r--boost/geometry/algorithms/detail/for_each_range.hpp1
-rw-r--r--boost/geometry/algorithms/detail/get_left_turns.hpp367
-rw-r--r--boost/geometry/algorithms/detail/occupation_info.hpp329
-rw-r--r--boost/geometry/algorithms/detail/overlay/add_rings.hpp28
-rw-r--r--boost/geometry/algorithms/detail/overlay/assign_parents.hpp7
-rw-r--r--boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp15
-rw-r--r--boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp4
-rw-r--r--boost/geometry/algorithms/detail/overlay/copy_segments.hpp6
-rw-r--r--boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp2
-rw-r--r--boost/geometry/algorithms/detail/overlay/follow.hpp2
-rw-r--r--boost/geometry/algorithms/detail/overlay/get_ring.hpp2
-rw-r--r--boost/geometry/algorithms/detail/overlay/get_turn_info.hpp204
-rw-r--r--boost/geometry/algorithms/detail/overlay/get_turns.hpp13
-rw-r--r--boost/geometry/algorithms/detail/overlay/overlay.hpp2
-rw-r--r--boost/geometry/algorithms/detail/overlay/turn_info.hpp16
-rw-r--r--boost/geometry/algorithms/detail/partition.hpp24
-rw-r--r--boost/geometry/algorithms/detail/point_on_border.hpp9
-rw-r--r--boost/geometry/algorithms/detail/sections/sectionalize.hpp2
-rw-r--r--boost/geometry/algorithms/disjoint.hpp63
-rw-r--r--boost/geometry/algorithms/distance.hpp2
-rw-r--r--boost/geometry/algorithms/touches.hpp181
-rw-r--r--boost/geometry/algorithms/within.hpp2
-rw-r--r--boost/geometry/core/access.hpp161
-rw-r--r--boost/geometry/core/coordinate_dimension.hpp6
-rw-r--r--boost/geometry/core/coordinate_system.hpp15
-rw-r--r--boost/geometry/core/coordinate_type.hpp20
-rw-r--r--boost/geometry/core/point_type.hpp4
-rw-r--r--boost/geometry/core/tag.hpp5
-rw-r--r--boost/geometry/geometry.hpp1
-rw-r--r--boost/geometry/iterators/ever_circling_iterator.hpp126
-rw-r--r--boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp2
-rw-r--r--boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp2
-rw-r--r--boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp2
-rw-r--r--boost/geometry/multi/algorithms/detail/point_on_border.hpp16
-rw-r--r--boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp2
-rw-r--r--boost/geometry/multi/io/wkt/read.hpp66
-rw-r--r--boost/geometry/policies/relate/direction.hpp2
-rw-r--r--boost/geometry/policies/relate/intersection_points.hpp41
-rw-r--r--boost/geometry/policies/relate/tupled.hpp6
-rw-r--r--boost/geometry/strategies/cartesian/cart_intersect.hpp476
-rw-r--r--boost/geometry/strategies/cartesian/distance_projected_point.hpp22
-rw-r--r--boost/geometry/strategies/side_info.hpp87
-rw-r--r--boost/geometry/strategies/spherical/distance_cross_track.hpp47
-rw-r--r--boost/geometry/strategies/strategy_transform.hpp34
-rw-r--r--boost/geometry/util/bare_type.hpp38
-rw-r--r--boost/geometry/util/math.hpp56
-rw-r--r--boost/graph/adj_list_serialize.hpp3
-rw-r--r--boost/graph/adjacency_list.hpp179
-rw-r--r--boost/graph/adjacency_list_io.hpp10
-rw-r--r--boost/graph/adjacency_matrix.hpp462
-rw-r--r--boost/graph/astar_search.hpp3
-rw-r--r--boost/graph/bellman_ford_shortest_paths.hpp2
-rw-r--r--boost/graph/betweenness_centrality.hpp6
-rw-r--r--boost/graph/biconnected_components.hpp104
-rw-r--r--boost/graph/breadth_first_search.hpp79
-rw-r--r--boost/graph/bron_kerbosch_all_cliques.hpp3
-rw-r--r--boost/graph/chrobak_payne_drawing.hpp1
-rw-r--r--boost/graph/clustering_coefficient.hpp2
-rw-r--r--boost/graph/compressed_sparse_row_graph.hpp375
-rw-r--r--boost/graph/copy.hpp4
-rw-r--r--boost/graph/depth_first_search.hpp43
-rw-r--r--boost/graph/detail/adjacency_list.hpp165
-rw-r--r--boost/graph/detail/compressed_sparse_row_struct.hpp1
-rw-r--r--boost/graph/detail/histogram_sort.hpp5
-rw-r--r--boost/graph/detail/read_graphviz_spirit.hpp4
-rw-r--r--boost/graph/directed_graph.hpp44
-rw-r--r--boost/graph/distributed/adjacency_list.hpp24
-rw-r--r--boost/graph/distributed/adjlist/redistribute.hpp4
-rw-r--r--boost/graph/distributed/betweenness_centrality.hpp18
-rw-r--r--boost/graph/distributed/breadth_first_search.hpp2
-rw-r--r--boost/graph/distributed/compressed_sparse_row_graph.hpp299
-rw-r--r--boost/graph/distributed/dijkstra_shortest_paths.hpp11
-rw-r--r--boost/graph/distributed/page_rank.hpp1
-rw-r--r--boost/graph/eccentricity.hpp2
-rw-r--r--boost/graph/edmonds_karp_max_flow.hpp38
-rw-r--r--boost/graph/fruchterman_reingold.hpp7
-rw-r--r--boost/graph/graph_archetypes.hpp6
-rw-r--r--boost/graph/graph_test.hpp10
-rw-r--r--boost/graph/graph_traits.hpp44
-rw-r--r--boost/graph/graphml.hpp10
-rw-r--r--boost/graph/graphviz.hpp112
-rw-r--r--boost/graph/grid_graph.hpp5
-rw-r--r--boost/graph/is_kuratowski_subgraph.hpp5
-rw-r--r--boost/graph/is_straight_line_drawing.hpp15
-rw-r--r--boost/graph/isomorphism.hpp233
-rw-r--r--boost/graph/johnson_all_pairs_shortest.hpp2
-rw-r--r--boost/graph/make_connected.hpp2
-rw-r--r--boost/graph/matrix_as_graph.hpp2
-rw-r--r--boost/graph/max_cardinality_matching.hpp1
-rw-r--r--boost/graph/named_function_params.hpp336
-rw-r--r--boost/graph/named_graph.hpp49
-rw-r--r--boost/graph/neighbor_bfs.hpp7
-rw-r--r--boost/graph/planar_canonical_ordering.hpp2
-rw-r--r--boost/graph/planar_detail/boyer_myrvold_impl.hpp2
-rw-r--r--boost/graph/planar_face_traversal.hpp5
-rw-r--r--boost/graph/properties.hpp236
-rw-r--r--boost/graph/property_maps/null_property_map.hpp2
-rw-r--r--boost/graph/reverse_graph.hpp93
-rw-r--r--boost/graph/stanford_graph.hpp8
-rw-r--r--boost/graph/stoer_wagner_min_cut.hpp6
-rw-r--r--boost/graph/strong_components.hpp8
-rw-r--r--boost/graph/subgraph.hpp291
-rw-r--r--boost/graph/two_graphs_common_spanning_trees.hpp870
-rw-r--r--boost/graph/undirected_dfs.hpp7
-rw-r--r--boost/graph/undirected_graph.hpp77
-rw-r--r--boost/graph/vector_as_graph.hpp13
-rw-r--r--boost/heap/binomial_heap.hpp8
-rw-r--r--boost/heap/d_ary_heap.hpp18
-rw-r--r--boost/heap/detail/mutable_heap.hpp45
-rw-r--r--boost/heap/detail/stable_heap.hpp5
-rw-r--r--boost/heap/detail/tree_iterator.hpp10
-rw-r--r--boost/heap/fibonacci_heap.hpp18
-rw-r--r--boost/heap/pairing_heap.hpp7
-rw-r--r--boost/heap/skew_heap.hpp8
-rw-r--r--boost/icl/concept/interval_associator.hpp28
-rw-r--r--boost/icl/functors.hpp43
-rw-r--r--boost/icl/gregorian.hpp8
-rw-r--r--boost/icl/map.hpp2
-rw-r--r--boost/icl/ptime.hpp8
-rw-r--r--boost/integer.hpp34
-rw-r--r--boost/integer_traits.hpp2
-rw-r--r--boost/interprocess/allocators/adaptive_pool.hpp56
-rw-r--r--boost/interprocess/allocators/allocator.hpp22
-rw-r--r--boost/interprocess/allocators/cached_adaptive_pool.hpp32
-rw-r--r--boost/interprocess/allocators/cached_node_allocator.hpp28
-rw-r--r--boost/interprocess/allocators/detail/adaptive_node_pool.hpp4
-rw-r--r--boost/interprocess/allocators/detail/allocator_common.hpp54
-rw-r--r--boost/interprocess/allocators/detail/node_pool.hpp8
-rw-r--r--boost/interprocess/allocators/node_allocator.hpp56
-rw-r--r--boost/interprocess/allocators/private_adaptive_pool.hpp38
-rw-r--r--boost/interprocess/allocators/private_node_allocator.hpp40
-rw-r--r--boost/interprocess/anonymous_shared_memory.hpp12
-rw-r--r--boost/interprocess/detail/atomic.hpp355
-rw-r--r--boost/interprocess/detail/config_begin.hpp1
-rw-r--r--boost/interprocess/detail/file_locking_helpers.hpp298
-rw-r--r--boost/interprocess/detail/file_wrapper.hpp22
-rw-r--r--boost/interprocess/detail/in_place_interface.hpp2
-rw-r--r--boost/interprocess/detail/intermodule_singleton.hpp1148
-rw-r--r--boost/interprocess/detail/intermodule_singleton_common.hpp495
-rw-r--r--boost/interprocess/detail/intersegment_ptr.hpp120
-rw-r--r--boost/interprocess/detail/managed_global_memory.hpp115
-rw-r--r--boost/interprocess/detail/managed_memory_impl.hpp166
-rw-r--r--boost/interprocess/detail/managed_multi_shared_memory.hpp52
-rw-r--r--boost/interprocess/detail/managed_open_or_create_impl.hpp39
-rw-r--r--boost/interprocess/detail/math_functions.hpp4
-rw-r--r--boost/interprocess/detail/min_max.hpp4
-rw-r--r--boost/interprocess/detail/mpl.hpp20
-rw-r--r--boost/interprocess/detail/multi_segment_services.hpp2
-rw-r--r--boost/interprocess/detail/named_proxy.hpp24
-rw-r--r--boost/interprocess/detail/os_file_functions.hpp66
-rw-r--r--boost/interprocess/detail/os_thread_functions.hpp4
-rw-r--r--boost/interprocess/detail/pointer_type.hpp4
-rw-r--r--boost/interprocess/detail/portable_intermodule_singleton.hpp356
-rw-r--r--boost/interprocess/detail/posix_time_types_wrk.hpp2
-rw-r--r--boost/interprocess/detail/preprocessor.hpp32
-rw-r--r--boost/interprocess/detail/ptime_wrk.hpp2
-rw-r--r--boost/interprocess/detail/robust_emulation.hpp10
-rw-r--r--boost/interprocess/detail/segment_manager_helper.hpp48
-rw-r--r--boost/interprocess/detail/tmp_dir_helpers.hpp163
-rw-r--r--boost/interprocess/detail/transform_iterator.hpp8
-rw-r--r--boost/interprocess/detail/type_traits.hpp4
-rw-r--r--boost/interprocess/detail/utilities.hpp8
-rw-r--r--boost/interprocess/detail/variadic_templates_tools.hpp4
-rw-r--r--boost/interprocess/detail/win32_api.hpp766
-rw-r--r--boost/interprocess/detail/windows_intermodule_singleton.hpp306
-rw-r--r--boost/interprocess/detail/workaround.hpp133
-rw-r--r--boost/interprocess/detail/xsi_shared_memory_device.hpp10
-rw-r--r--boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp6
-rw-r--r--boost/interprocess/errors.hpp16
-rw-r--r--boost/interprocess/file_mapping.hpp20
-rw-r--r--boost/interprocess/indexes/iset_index.hpp22
-rw-r--r--boost/interprocess/indexes/iunordered_set_index.hpp28
-rw-r--r--boost/interprocess/indexes/map_index.hpp2
-rw-r--r--boost/interprocess/indexes/null_index.hpp2
-rw-r--r--boost/interprocess/indexes/unordered_map_index.hpp2
-rw-r--r--boost/interprocess/interprocess_fwd.hpp6
-rw-r--r--boost/interprocess/ipc/message_queue.hpp152
-rw-r--r--boost/interprocess/managed_external_buffer.hpp18
-rw-r--r--boost/interprocess/managed_heap_memory.hpp26
-rw-r--r--boost/interprocess/managed_mapped_file.hpp46
-rw-r--r--boost/interprocess/managed_shared_memory.hpp50
-rw-r--r--boost/interprocess/managed_windows_shared_memory.hpp32
-rw-r--r--boost/interprocess/managed_xsi_shared_memory.hpp36
-rw-r--r--boost/interprocess/mapped_region.hpp458
-rw-r--r--boost/interprocess/mem_algo/detail/mem_algo_common.hpp30
-rw-r--r--boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp68
-rw-r--r--boost/interprocess/mem_algo/rbtree_best_fit.hpp98
-rw-r--r--boost/interprocess/mem_algo/simple_seq_fit.hpp4
-rw-r--r--boost/interprocess/offset_ptr.hpp70
-rw-r--r--boost/interprocess/segment_manager.hpp138
-rw-r--r--boost/interprocess/shared_memory_object.hpp26
-rw-r--r--boost/interprocess/smart_ptr/deleter.hpp6
-rw-r--r--boost/interprocess/smart_ptr/detail/shared_count.hpp6
-rw-r--r--boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp6
-rw-r--r--boost/interprocess/smart_ptr/intrusive_ptr.hpp24
-rw-r--r--boost/interprocess/smart_ptr/scoped_ptr.hpp12
-rw-r--r--boost/interprocess/smart_ptr/shared_ptr.hpp63
-rw-r--r--boost/interprocess/smart_ptr/unique_ptr.hpp10
-rw-r--r--boost/interprocess/smart_ptr/weak_ptr.hpp16
-rw-r--r--boost/interprocess/streams/bufferstream.hpp38
-rw-r--r--boost/interprocess/streams/vectorstream.hpp50
-rw-r--r--boost/interprocess/sync/detail/condition_algorithm_8a.hpp316
-rw-r--r--boost/interprocess/sync/file_lock.hpp32
-rw-r--r--boost/interprocess/sync/interprocess_condition.hpp22
-rw-r--r--boost/interprocess/sync/interprocess_mutex.hpp12
-rw-r--r--boost/interprocess/sync/interprocess_recursive_mutex.hpp12
-rw-r--r--boost/interprocess/sync/interprocess_semaphore.hpp14
-rw-r--r--boost/interprocess/sync/interprocess_upgradable_mutex.hpp100
-rw-r--r--boost/interprocess/sync/mutex_family.hpp4
-rw-r--r--boost/interprocess/sync/named_condition.hpp34
-rw-r--r--boost/interprocess/sync/named_mutex.hpp33
-rw-r--r--boost/interprocess/sync/named_recursive_mutex.hpp20
-rw-r--r--boost/interprocess/sync/named_semaphore.hpp21
-rw-r--r--boost/interprocess/sync/named_upgradable_mutex.hpp64
-rw-r--r--boost/interprocess/sync/posix/condition.hpp18
-rw-r--r--boost/interprocess/sync/posix/mutex.hpp6
-rw-r--r--boost/interprocess/sync/posix/pthread_helpers.hpp22
-rw-r--r--boost/interprocess/sync/posix/recursive_mutex.hpp4
-rw-r--r--boost/interprocess/sync/posix/semaphore_wrapper.hpp8
-rw-r--r--boost/interprocess/sync/scoped_lock.hpp38
-rw-r--r--boost/interprocess/sync/sharable_lock.hpp20
-rw-r--r--boost/interprocess/sync/shm/named_condition.hpp47
-rw-r--r--boost/interprocess/sync/shm/named_creation_functor.hpp2
-rw-r--r--boost/interprocess/sync/shm/named_mutex.hpp6
-rw-r--r--boost/interprocess/sync/shm/named_recursive_mutex.hpp4
-rw-r--r--boost/interprocess/sync/shm/named_upgradable_mutex.hpp64
-rw-r--r--boost/interprocess/sync/spin/condition.hpp32
-rw-r--r--boost/interprocess/sync/spin/mutex.hpp8
-rw-r--r--boost/interprocess/sync/spin/recursive_mutex.hpp8
-rw-r--r--boost/interprocess/sync/upgradable_lock.hpp20
-rw-r--r--boost/interprocess/sync/windows/condition.hpp315
-rw-r--r--boost/interprocess/sync/windows/mutex.hpp63
-rw-r--r--boost/interprocess/sync/windows/named_condition.hpp334
-rw-r--r--boost/interprocess/sync/windows/named_mutex.hpp175
-rw-r--r--boost/interprocess/sync/windows/named_recursive_mutex.hpp58
-rw-r--r--boost/interprocess/sync/windows/named_semaphore.hpp178
-rw-r--r--boost/interprocess/sync/windows/named_sync.hpp215
-rw-r--r--boost/interprocess/sync/windows/semaphore.hpp63
-rw-r--r--boost/interprocess/sync/windows/sync_utils.hpp117
-rw-r--r--boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp163
-rw-r--r--boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp198
-rw-r--r--boost/interprocess/sync/xsi/xsi_named_mutex.hpp16
-rw-r--r--boost/interprocess/windows_shared_memory.hpp45
-rw-r--r--boost/interprocess/xsi_shared_memory.hpp14
-rw-r--r--boost/intrusive/any_hook.hpp86
-rw-r--r--boost/intrusive/avl_set.hpp1066
-rw-r--r--boost/intrusive/avl_set_hook.hpp132
-rw-r--r--boost/intrusive/avltree.hpp562
-rw-r--r--boost/intrusive/avltree_algorithms.hpp253
-rw-r--r--boost/intrusive/bs_set_hook.hpp132
-rw-r--r--boost/intrusive/circular_list_algorithms.hpp176
-rw-r--r--boost/intrusive/circular_slist_algorithms.hpp136
-rw-r--r--boost/intrusive/derivation_value_traits.hpp8
-rw-r--r--boost/intrusive/detail/any_node_and_algorithms.hpp20
-rw-r--r--boost/intrusive/detail/assert.hpp4
-rw-r--r--boost/intrusive/detail/avltree_node.hpp8
-rw-r--r--boost/intrusive/detail/clear_on_destructor_base.hpp2
-rw-r--r--boost/intrusive/detail/common_slist_algorithms.hpp18
-rw-r--r--boost/intrusive/detail/config_begin.hpp6
-rw-r--r--boost/intrusive/detail/config_end.hpp2
-rw-r--r--boost/intrusive/detail/ebo_functor_holder.hpp2
-rw-r--r--boost/intrusive/detail/function_detector.hpp6
-rw-r--r--boost/intrusive/detail/generic_hook.hpp16
-rw-r--r--boost/intrusive/detail/has_member_function_callable_with.hpp30
-rw-r--r--boost/intrusive/detail/hashtable_node.hpp10
-rw-r--r--boost/intrusive/detail/is_stateful_value_traits.hpp2
-rw-r--r--boost/intrusive/detail/list_node.hpp28
-rw-r--r--boost/intrusive/detail/memory_util.hpp23
-rw-r--r--boost/intrusive/detail/mpl.hpp24
-rw-r--r--boost/intrusive/detail/parent_from_member.hpp38
-rw-r--r--boost/intrusive/detail/preprocessor.hpp4
-rw-r--r--boost/intrusive/detail/rbtree_node.hpp8
-rw-r--r--boost/intrusive/detail/slist_node.hpp24
-rw-r--r--boost/intrusive/detail/transform_iterator.hpp4
-rw-r--r--boost/intrusive/detail/tree_algorithms.hpp410
-rw-r--r--boost/intrusive/detail/tree_node.hpp30
-rw-r--r--boost/intrusive/detail/utilities.hpp20
-rw-r--r--boost/intrusive/detail/workaround.hpp2
-rw-r--r--boost/intrusive/hashtable.hpp480
-rw-r--r--boost/intrusive/intrusive_fwd.hpp2
-rw-r--r--boost/intrusive/linear_slist_algorithms.hpp108
-rw-r--r--boost/intrusive/link_mode.hpp6
-rw-r--r--boost/intrusive/list.hpp520
-rw-r--r--boost/intrusive/list_hook.hpp134
-rw-r--r--boost/intrusive/member_value_traits.hpp10
-rw-r--r--boost/intrusive/options.hpp12
-rw-r--r--boost/intrusive/parent_from_member.hpp6
-rw-r--r--boost/intrusive/pointer_plus_bits.hpp8
-rw-r--r--boost/intrusive/pointer_traits.hpp8
-rw-r--r--boost/intrusive/rbtree.hpp568
-rw-r--r--boost/intrusive/rbtree_algorithms.hpp275
-rw-r--r--boost/intrusive/set.hpp1078
-rw-r--r--boost/intrusive/set_hook.hpp136
-rw-r--r--boost/intrusive/sg_set.hpp1106
-rw-r--r--boost/intrusive/sgtree.hpp602
-rw-r--r--boost/intrusive/sgtree_algorithms.hpp247
-rw-r--r--boost/intrusive/slist.hpp680
-rw-r--r--boost/intrusive/slist_hook.hpp140
-rw-r--r--boost/intrusive/splay_set.hpp1098
-rw-r--r--boost/intrusive/splay_set_hook.hpp136
-rw-r--r--boost/intrusive/splaytree.hpp576
-rw-r--r--boost/intrusive/splaytree_algorithms.hpp251
-rw-r--r--boost/intrusive/treap.hpp594
-rw-r--r--boost/intrusive/treap_algorithms.hpp241
-rw-r--r--boost/intrusive/treap_set.hpp1166
-rw-r--r--boost/intrusive/trivial_value_traits.hpp6
-rw-r--r--boost/intrusive/unordered_set.hpp854
-rw-r--r--boost/intrusive/unordered_set_hook.hpp146
-rw-r--r--boost/iostreams/chain.hpp2
-rw-r--r--boost/iostreams/close.hpp2
-rw-r--r--boost/iostreams/combine.hpp8
-rw-r--r--boost/iostreams/compose.hpp4
-rw-r--r--boost/iostreams/detail/adapter/range_adapter.hpp2
-rw-r--r--boost/iostreams/detail/buffer.hpp4
-rw-r--r--boost/iostreams/detail/restrict_impl.hpp6
-rw-r--r--boost/iostreams/detail/streambuf/chainbuf.hpp2
-rw-r--r--boost/iostreams/filter/aggregate.hpp2
-rw-r--r--boost/iostreams/filter/counter.hpp2
-rw-r--r--boost/iostreams/filter/line.hpp2
-rw-r--r--boost/iostreams/invert.hpp4
-rw-r--r--boost/iostreams/stream.hpp8
-rw-r--r--boost/iostreams/tee.hpp4
-rw-r--r--boost/iterator/iterator_facade.hpp66
-rw-r--r--boost/iterator/transform_iterator.hpp2
-rw-r--r--boost/lexical_cast.hpp1172
-rw-r--r--boost/local_function.hpp459
-rw-r--r--boost/local_function/aux_/add_pointed_const.hpp33
-rw-r--r--boost/local_function/aux_/function.hpp330
-rw-r--r--boost/local_function/aux_/macro/code_/bind.hpp252
-rw-r--r--boost/local_function/aux_/macro/code_/functor.hpp892
-rw-r--r--boost/local_function/aux_/macro/code_/result.hpp107
-rw-r--r--boost/local_function/aux_/macro/decl.hpp65
-rw-r--r--boost/local_function/aux_/macro/name.hpp201
-rw-r--r--boost/local_function/aux_/macro/typeof.hpp22
-rw-r--r--boost/local_function/aux_/member.hpp51
-rw-r--r--boost/local_function/aux_/nobind.hpp32
-rw-r--r--boost/local_function/aux_/preprocessor/traits/bind.hpp46
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl.hpp29
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_/append.hpp212
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_/index.hpp21
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_/nil.hpp39
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_/set_error.hpp38
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_/validate.hpp24
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_/validate_/return_count.hpp32
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_/validate_/this_count.hpp38
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_binds.hpp35
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_const_binds.hpp40
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_error.hpp27
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_params.hpp59
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_returns.hpp22
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_sign_/any_bind_type.hpp88
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_sign_/sign.hpp138
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_sign_/validate.hpp32
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/defaults.hpp125
-rw-r--r--boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/this.hpp66
-rw-r--r--boost/local_function/aux_/preprocessor/traits/param.hpp36
-rw-r--r--boost/local_function/aux_/symbol.hpp50
-rw-r--r--boost/local_function/config.hpp114
-rw-r--r--boost/local_function/detail/preprocessor/keyword/auto.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/bind.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/const.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/const_bind.hpp74
-rw-r--r--boost/local_function/detail/preprocessor/keyword/default.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/facility/add.hpp25
-rw-r--r--boost/local_function/detail/preprocessor/keyword/facility/is.hpp51
-rw-r--r--boost/local_function/detail/preprocessor/keyword/facility/remove.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/inline.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/recursive.hpp60
-rw-r--r--boost/local_function/detail/preprocessor/keyword/register.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/return.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/this.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/keyword/thisunderscore.hpp63
-rw-r--r--boost/local_function/detail/preprocessor/keyword/void.hpp58
-rw-r--r--boost/local_function/detail/preprocessor/line_counter.hpp23
-rw-r--r--boost/local_function/detail/preprocessor/void_list.hpp120
-rw-r--r--boost/locale/boundary/index.hpp39
-rw-r--r--boost/locale/utf.hpp36
-rw-r--r--boost/math/bindings/detail/big_lanczos.hpp11
-rw-r--r--boost/math/bindings/e_float.hpp5
-rw-r--r--boost/math/bindings/mpfr.hpp6
-rw-r--r--boost/math/bindings/rr.hpp11
-rw-r--r--boost/math/concepts/real_concept.hpp7
-rw-r--r--boost/math/concepts/real_type_concept.hpp1
-rw-r--r--boost/math/concepts/std_real_concept.hpp7
-rw-r--r--boost/math/constants/calculate_constants.hpp959
-rw-r--r--boost/math/constants/constants.hpp281
-rw-r--r--boost/math/constants/generate.hpp76
-rw-r--r--boost/math/constants/info.hpp163
-rw-r--r--boost/math/distributions/detail/inv_discrete_quantile.hpp10
-rw-r--r--boost/math/distributions/skew_normal.hpp716
-rw-r--r--boost/math/distributions/triangular.hpp2
-rw-r--r--boost/math/policies/error_handling.hpp34
-rw-r--r--boost/math/special_functions.hpp2
-rw-r--r--boost/math/special_functions/detail/bessel_i0.hpp30
-rw-r--r--boost/math/special_functions/detail/bessel_i1.hpp31
-rw-r--r--boost/math/special_functions/detail/bessel_j0.hpp30
-rw-r--r--boost/math/special_functions/detail/bessel_j1.hpp30
-rw-r--r--boost/math/special_functions/detail/bessel_jy.hpp16
-rw-r--r--boost/math/special_functions/detail/bessel_k0.hpp30
-rw-r--r--boost/math/special_functions/detail/bessel_k1.hpp30
-rw-r--r--boost/math/special_functions/detail/bessel_y0.hpp30
-rw-r--r--boost/math/special_functions/detail/bessel_y1.hpp30
-rw-r--r--boost/math/special_functions/detail/erf_inv.hpp40
-rw-r--r--boost/math/special_functions/detail/iconv.hpp2
-rw-r--r--boost/math/special_functions/detail/igamma_large.hpp1
-rw-r--r--boost/math/special_functions/detail/lanczos_sse2.hpp5
-rw-r--r--boost/math/special_functions/detail/lgamma_small.hpp8
-rw-r--r--boost/math/special_functions/digamma.hpp28
-rw-r--r--boost/math/special_functions/erf.hpp57
-rw-r--r--boost/math/special_functions/expint.hpp92
-rw-r--r--boost/math/special_functions/expm1.hpp43
-rw-r--r--boost/math/special_functions/gamma.hpp108
-rw-r--r--boost/math/special_functions/hankel.hpp178
-rw-r--r--boost/math/special_functions/lanczos.hpp55
-rw-r--r--boost/math/special_functions/log1p.hpp31
-rw-r--r--boost/math/special_functions/math_fwd.hpp52
-rw-r--r--boost/math/special_functions/nonfinite_num_facets.hpp153
-rw-r--r--boost/math/special_functions/owens_t.hpp1061
-rw-r--r--boost/math/special_functions/round.hpp2
-rw-r--r--boost/math/special_functions/trunc.hpp2
-rw-r--r--boost/math/special_functions/zeta.hpp47
-rw-r--r--boost/math/tools/big_constant.hpp20
-rw-r--r--boost/math/tools/config.hpp11
-rw-r--r--boost/math/tools/precision.hpp4
-rw-r--r--boost/math/tools/test.hpp68
-rw-r--r--boost/math/tools/test_data.hpp4
-rw-r--r--boost/math/tools/tuple.hpp2
-rw-r--r--boost/math/tr1.hpp2
-rw-r--r--boost/move/move.hpp89
-rw-r--r--boost/mpl/O1_size.hpp2
-rw-r--r--boost/mpl/O1_size_fwd.hpp2
-rw-r--r--boost/mpl/accumulate.hpp2
-rw-r--r--boost/mpl/advance.hpp2
-rw-r--r--boost/mpl/advance_fwd.hpp2
-rw-r--r--boost/mpl/alias.hpp2
-rw-r--r--boost/mpl/always.hpp2
-rw-r--r--boost/mpl/and.hpp2
-rw-r--r--boost/mpl/apply.hpp2
-rw-r--r--boost/mpl/apply_fwd.hpp2
-rw-r--r--boost/mpl/apply_wrap.hpp2
-rw-r--r--boost/mpl/arg.hpp2
-rw-r--r--boost/mpl/arg_fwd.hpp2
-rw-r--r--boost/mpl/arithmetic.hpp2
-rw-r--r--boost/mpl/as_sequence.hpp2
-rw-r--r--boost/mpl/assert.hpp2
-rw-r--r--boost/mpl/at.hpp2
-rw-r--r--boost/mpl/at_fwd.hpp2
-rw-r--r--boost/mpl/aux_/O1_size_impl.hpp2
-rw-r--r--boost/mpl/aux_/adl_barrier.hpp2
-rw-r--r--boost/mpl/aux_/advance_backward.hpp2
-rw-r--r--boost/mpl/aux_/advance_forward.hpp2
-rw-r--r--boost/mpl/aux_/apply_1st.hpp2
-rw-r--r--boost/mpl/aux_/arg_typedef.hpp2
-rw-r--r--boost/mpl/aux_/arithmetic_op.hpp2
-rw-r--r--boost/mpl/aux_/arity.hpp2
-rw-r--r--boost/mpl/aux_/arity_spec.hpp2
-rw-r--r--boost/mpl/aux_/at_impl.hpp2
-rw-r--r--boost/mpl/aux_/back_impl.hpp2
-rw-r--r--boost/mpl/aux_/basic_bind.hpp2
-rw-r--r--boost/mpl/aux_/begin_end_impl.hpp2
-rw-r--r--boost/mpl/aux_/clear_impl.hpp2
-rw-r--r--boost/mpl/aux_/common_name_wknd.hpp2
-rw-r--r--boost/mpl/aux_/comparison_op.hpp2
-rw-r--r--boost/mpl/aux_/config/adl.hpp2
-rw-r--r--boost/mpl/aux_/config/arrays.hpp2
-rw-r--r--boost/mpl/aux_/config/bind.hpp2
-rw-r--r--boost/mpl/aux_/config/compiler.hpp2
-rw-r--r--boost/mpl/aux_/config/ctps.hpp2
-rw-r--r--boost/mpl/aux_/config/dependent_nttp.hpp2
-rw-r--r--boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp2
-rw-r--r--boost/mpl/aux_/config/dtp.hpp2
-rw-r--r--boost/mpl/aux_/config/eti.hpp2
-rw-r--r--boost/mpl/aux_/config/forwarding.hpp2
-rw-r--r--boost/mpl/aux_/config/gcc.hpp2
-rw-r--r--boost/mpl/aux_/config/has_apply.hpp2
-rw-r--r--boost/mpl/aux_/config/has_xxx.hpp2
-rw-r--r--boost/mpl/aux_/config/integral.hpp2
-rw-r--r--boost/mpl/aux_/config/intel.hpp2
-rw-r--r--boost/mpl/aux_/config/lambda.hpp2
-rw-r--r--boost/mpl/aux_/config/msvc.hpp2
-rw-r--r--boost/mpl/aux_/config/msvc_typename.hpp2
-rw-r--r--boost/mpl/aux_/config/nttp.hpp2
-rw-r--r--boost/mpl/aux_/config/operators.hpp2
-rw-r--r--boost/mpl/aux_/config/overload_resolution.hpp2
-rw-r--r--boost/mpl/aux_/config/pp_counter.hpp2
-rw-r--r--boost/mpl/aux_/config/preprocessor.hpp2
-rw-r--r--boost/mpl/aux_/config/static_constant.hpp2
-rw-r--r--boost/mpl/aux_/config/ttp.hpp2
-rw-r--r--boost/mpl/aux_/config/typeof.hpp2
-rw-r--r--boost/mpl/aux_/config/use_preprocessed.hpp2
-rw-r--r--boost/mpl/aux_/config/workaround.hpp2
-rw-r--r--boost/mpl/aux_/contains_impl.hpp2
-rw-r--r--boost/mpl/aux_/count_args.hpp2
-rw-r--r--boost/mpl/aux_/count_impl.hpp2
-rw-r--r--boost/mpl/aux_/empty_impl.hpp2
-rw-r--r--boost/mpl/aux_/erase_impl.hpp2
-rw-r--r--boost/mpl/aux_/erase_key_impl.hpp2
-rw-r--r--boost/mpl/aux_/filter_iter.hpp2
-rw-r--r--boost/mpl/aux_/fold_impl.hpp2
-rw-r--r--boost/mpl/aux_/fold_impl_body.hpp2
-rw-r--r--boost/mpl/aux_/fold_op.hpp2
-rw-r--r--boost/mpl/aux_/fold_pred.hpp2
-rw-r--r--boost/mpl/aux_/front_impl.hpp2
-rw-r--r--boost/mpl/aux_/full_lambda.hpp2
-rw-r--r--boost/mpl/aux_/has_apply.hpp2
-rw-r--r--boost/mpl/aux_/has_begin.hpp2
-rw-r--r--boost/mpl/aux_/has_key_impl.hpp2
-rw-r--r--boost/mpl/aux_/has_rebind.hpp2
-rw-r--r--boost/mpl/aux_/has_size.hpp2
-rw-r--r--boost/mpl/aux_/has_tag.hpp2
-rw-r--r--boost/mpl/aux_/has_type.hpp2
-rw-r--r--boost/mpl/aux_/include_preprocessed.hpp2
-rw-r--r--boost/mpl/aux_/insert_impl.hpp2
-rw-r--r--boost/mpl/aux_/insert_range_impl.hpp2
-rw-r--r--boost/mpl/aux_/inserter_algorithm.hpp2
-rw-r--r--boost/mpl/aux_/integral_wrapper.hpp2
-rw-r--r--boost/mpl/aux_/is_msvc_eti_arg.hpp2
-rw-r--r--boost/mpl/aux_/iter_apply.hpp2
-rw-r--r--boost/mpl/aux_/iter_fold_if_impl.hpp2
-rw-r--r--boost/mpl/aux_/iter_fold_impl.hpp2
-rw-r--r--boost/mpl/aux_/iter_push_front.hpp2
-rw-r--r--boost/mpl/aux_/joint_iter.hpp2
-rw-r--r--boost/mpl/aux_/lambda_arity_param.hpp2
-rw-r--r--boost/mpl/aux_/lambda_no_ctps.hpp2
-rw-r--r--boost/mpl/aux_/lambda_spec.hpp2
-rw-r--r--boost/mpl/aux_/lambda_support.hpp2
-rw-r--r--boost/mpl/aux_/largest_int.hpp2
-rw-r--r--boost/mpl/aux_/logical_op.hpp2
-rw-r--r--boost/mpl/aux_/msvc_dtw.hpp2
-rw-r--r--boost/mpl/aux_/msvc_eti_base.hpp2
-rw-r--r--boost/mpl/aux_/msvc_is_class.hpp2
-rw-r--r--boost/mpl/aux_/msvc_never_true.hpp2
-rw-r--r--boost/mpl/aux_/msvc_type.hpp2
-rw-r--r--boost/mpl/aux_/na.hpp2
-rw-r--r--boost/mpl/aux_/na_assert.hpp2
-rw-r--r--boost/mpl/aux_/na_fwd.hpp2
-rw-r--r--boost/mpl/aux_/na_spec.hpp2
-rw-r--r--boost/mpl/aux_/nested_type_wknd.hpp2
-rw-r--r--boost/mpl/aux_/nttp_decl.hpp2
-rw-r--r--boost/mpl/aux_/numeric_cast_utils.hpp2
-rw-r--r--boost/mpl/aux_/numeric_op.hpp2
-rw-r--r--boost/mpl/aux_/order_impl.hpp2
-rw-r--r--boost/mpl/aux_/overload_names.hpp2
-rw-r--r--boost/mpl/aux_/partition_op.hpp2
-rw-r--r--boost/mpl/aux_/pop_back_impl.hpp2
-rw-r--r--boost/mpl/aux_/pop_front_impl.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/add.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/def_params_tail.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/default_params.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/enum.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/ext_params.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/filter_params.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/is_seq.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/params.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/partial_spec_params.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/range.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/repeat.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/sub.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/token_equal.hpp2
-rw-r--r--boost/mpl/aux_/preprocessor/tuple.hpp2
-rw-r--r--boost/mpl/aux_/ptr_to_ref.hpp2
-rw-r--r--boost/mpl/aux_/push_back_impl.hpp2
-rw-r--r--boost/mpl/aux_/push_front_impl.hpp2
-rw-r--r--boost/mpl/aux_/range_c/O1_size.hpp2
-rw-r--r--boost/mpl/aux_/range_c/back.hpp2
-rw-r--r--boost/mpl/aux_/range_c/empty.hpp2
-rw-r--r--boost/mpl/aux_/range_c/front.hpp2
-rw-r--r--boost/mpl/aux_/range_c/iterator.hpp2
-rw-r--r--boost/mpl/aux_/range_c/size.hpp2
-rw-r--r--boost/mpl/aux_/range_c/tag.hpp2
-rw-r--r--boost/mpl/aux_/reverse_fold_impl.hpp2
-rw-r--r--boost/mpl/aux_/reverse_fold_impl_body.hpp2
-rw-r--r--boost/mpl/aux_/reverse_iter_fold_impl.hpp2
-rw-r--r--boost/mpl/aux_/sequence_wrapper.hpp2
-rw-r--r--boost/mpl/aux_/shift_op.hpp2
-rw-r--r--boost/mpl/aux_/single_element_iter.hpp2
-rw-r--r--boost/mpl/aux_/size_impl.hpp2
-rw-r--r--boost/mpl/aux_/sort_impl.hpp2
-rw-r--r--boost/mpl/aux_/static_cast.hpp2
-rw-r--r--boost/mpl/aux_/template_arity.hpp2
-rw-r--r--boost/mpl/aux_/template_arity_fwd.hpp2
-rw-r--r--boost/mpl/aux_/test.hpp2
-rw-r--r--boost/mpl/aux_/test/assert.hpp2
-rw-r--r--boost/mpl/aux_/test/data.hpp2
-rw-r--r--boost/mpl/aux_/test/test_case.hpp2
-rw-r--r--boost/mpl/aux_/traits_lambda_spec.hpp2
-rw-r--r--boost/mpl/aux_/transform_iter.hpp2
-rw-r--r--boost/mpl/aux_/type_wrapper.hpp2
-rw-r--r--boost/mpl/aux_/unwrap.hpp2
-rw-r--r--boost/mpl/aux_/value_wknd.hpp2
-rw-r--r--boost/mpl/aux_/yes_no.hpp2
-rw-r--r--boost/mpl/back.hpp2
-rw-r--r--boost/mpl/back_fwd.hpp2
-rw-r--r--boost/mpl/back_inserter.hpp2
-rw-r--r--boost/mpl/base.hpp2
-rw-r--r--boost/mpl/begin.hpp2
-rw-r--r--boost/mpl/begin_end.hpp2
-rw-r--r--boost/mpl/begin_end_fwd.hpp2
-rw-r--r--boost/mpl/bind.hpp2
-rw-r--r--boost/mpl/bind_fwd.hpp2
-rw-r--r--boost/mpl/bitand.hpp2
-rw-r--r--boost/mpl/bitor.hpp2
-rw-r--r--boost/mpl/bitwise.hpp2
-rw-r--r--boost/mpl/bitxor.hpp2
-rw-r--r--boost/mpl/bool.hpp2
-rw-r--r--boost/mpl/bool_fwd.hpp2
-rw-r--r--boost/mpl/clear.hpp2
-rw-r--r--boost/mpl/clear_fwd.hpp2
-rw-r--r--boost/mpl/comparison.hpp2
-rw-r--r--boost/mpl/contains.hpp2
-rw-r--r--boost/mpl/contains_fwd.hpp2
-rw-r--r--boost/mpl/copy.hpp2
-rw-r--r--boost/mpl/copy_if.hpp2
-rw-r--r--boost/mpl/count.hpp2
-rw-r--r--boost/mpl/count_fwd.hpp2
-rw-r--r--boost/mpl/count_if.hpp2
-rw-r--r--boost/mpl/deque.hpp2
-rw-r--r--boost/mpl/deref.hpp2
-rw-r--r--boost/mpl/distance.hpp2
-rw-r--r--boost/mpl/distance_fwd.hpp2
-rw-r--r--boost/mpl/divides.hpp2
-rw-r--r--boost/mpl/empty.hpp2
-rw-r--r--boost/mpl/empty_base.hpp2
-rw-r--r--boost/mpl/empty_fwd.hpp2
-rw-r--r--boost/mpl/empty_sequence.hpp2
-rw-r--r--boost/mpl/end.hpp2
-rw-r--r--boost/mpl/equal.hpp2
-rw-r--r--boost/mpl/equal_to.hpp2
-rw-r--r--boost/mpl/erase.hpp2
-rw-r--r--boost/mpl/erase_fwd.hpp2
-rw-r--r--boost/mpl/erase_key.hpp2
-rw-r--r--boost/mpl/erase_key_fwd.hpp2
-rw-r--r--boost/mpl/eval_if.hpp2
-rw-r--r--boost/mpl/filter_view.hpp2
-rw-r--r--boost/mpl/find.hpp2
-rw-r--r--boost/mpl/find_if.hpp2
-rw-r--r--boost/mpl/fold.hpp2
-rw-r--r--boost/mpl/for_each.hpp2
-rw-r--r--boost/mpl/front.hpp2
-rw-r--r--boost/mpl/front_fwd.hpp2
-rw-r--r--boost/mpl/front_inserter.hpp2
-rw-r--r--boost/mpl/greater.hpp2
-rw-r--r--boost/mpl/greater_equal.hpp2
-rw-r--r--boost/mpl/has_key.hpp2
-rw-r--r--boost/mpl/has_key_fwd.hpp2
-rw-r--r--boost/mpl/has_xxx.hpp2
-rw-r--r--boost/mpl/identity.hpp2
-rw-r--r--boost/mpl/if.hpp2
-rw-r--r--boost/mpl/index_if.hpp2
-rw-r--r--boost/mpl/index_of.hpp2
-rw-r--r--boost/mpl/inherit.hpp2
-rw-r--r--boost/mpl/inherit_linearly.hpp2
-rw-r--r--boost/mpl/insert.hpp2
-rw-r--r--boost/mpl/insert_fwd.hpp2
-rw-r--r--boost/mpl/insert_range.hpp2
-rw-r--r--boost/mpl/insert_range_fwd.hpp2
-rw-r--r--boost/mpl/inserter.hpp2
-rw-r--r--boost/mpl/int.hpp2
-rw-r--r--boost/mpl/int_fwd.hpp2
-rw-r--r--boost/mpl/integral_c.hpp2
-rw-r--r--boost/mpl/integral_c_fwd.hpp2
-rw-r--r--boost/mpl/integral_c_tag.hpp2
-rw-r--r--boost/mpl/is_placeholder.hpp2
-rw-r--r--boost/mpl/is_sequence.hpp2
-rw-r--r--boost/mpl/iter_fold.hpp2
-rw-r--r--boost/mpl/iter_fold_if.hpp2
-rw-r--r--boost/mpl/iterator_category.hpp2
-rw-r--r--boost/mpl/iterator_range.hpp2
-rw-r--r--boost/mpl/iterator_tags.hpp2
-rw-r--r--boost/mpl/joint_view.hpp2
-rw-r--r--boost/mpl/key_type.hpp2
-rw-r--r--boost/mpl/key_type_fwd.hpp2
-rw-r--r--boost/mpl/lambda.hpp2
-rw-r--r--boost/mpl/lambda_fwd.hpp2
-rw-r--r--boost/mpl/less.hpp2
-rw-r--r--boost/mpl/less_equal.hpp2
-rw-r--r--boost/mpl/limits/arity.hpp2
-rw-r--r--boost/mpl/limits/list.hpp2
-rw-r--r--boost/mpl/limits/map.hpp2
-rw-r--r--boost/mpl/limits/set.hpp2
-rw-r--r--boost/mpl/limits/unrolling.hpp2
-rw-r--r--boost/mpl/limits/vector.hpp2
-rw-r--r--boost/mpl/list.hpp2
-rw-r--r--boost/mpl/list/aux_/O1_size.hpp2
-rw-r--r--boost/mpl/list/aux_/begin_end.hpp2
-rw-r--r--boost/mpl/list/aux_/clear.hpp2
-rw-r--r--boost/mpl/list/aux_/empty.hpp2
-rw-r--r--boost/mpl/list/aux_/front.hpp2
-rw-r--r--boost/mpl/list/aux_/include_preprocessed.hpp2
-rw-r--r--boost/mpl/list/aux_/item.hpp2
-rw-r--r--boost/mpl/list/aux_/iterator.hpp2
-rw-r--r--boost/mpl/list/aux_/numbered.hpp2
-rw-r--r--boost/mpl/list/aux_/numbered_c.hpp2
-rw-r--r--boost/mpl/list/aux_/pop_front.hpp2
-rw-r--r--boost/mpl/list/aux_/push_back.hpp2
-rw-r--r--boost/mpl/list/aux_/push_front.hpp2
-rw-r--r--boost/mpl/list/aux_/size.hpp2
-rw-r--r--boost/mpl/list/aux_/tag.hpp2
-rw-r--r--boost/mpl/list/list0.hpp2
-rw-r--r--boost/mpl/list/list0_c.hpp2
-rw-r--r--boost/mpl/list/list10.hpp2
-rw-r--r--boost/mpl/list/list10_c.hpp2
-rw-r--r--boost/mpl/list/list20.hpp2
-rw-r--r--boost/mpl/list/list20_c.hpp2
-rw-r--r--boost/mpl/list/list30.hpp2
-rw-r--r--boost/mpl/list/list30_c.hpp2
-rw-r--r--boost/mpl/list/list40.hpp2
-rw-r--r--boost/mpl/list/list40_c.hpp2
-rw-r--r--boost/mpl/list/list50.hpp2
-rw-r--r--boost/mpl/list/list50_c.hpp2
-rw-r--r--boost/mpl/list_c.hpp2
-rw-r--r--boost/mpl/logical.hpp2
-rw-r--r--boost/mpl/long.hpp2
-rw-r--r--boost/mpl/long_fwd.hpp2
-rw-r--r--boost/mpl/lower_bound.hpp2
-rw-r--r--boost/mpl/map.hpp2
-rw-r--r--boost/mpl/map/aux_/at_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/begin_end_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/clear_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/contains_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/empty_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/erase_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/erase_key_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/has_key_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/include_preprocessed.hpp2
-rw-r--r--boost/mpl/map/aux_/insert_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/item.hpp2
-rw-r--r--boost/mpl/map/aux_/iterator.hpp2
-rw-r--r--boost/mpl/map/aux_/key_type_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/map0.hpp2
-rw-r--r--boost/mpl/map/aux_/numbered.hpp2
-rw-r--r--boost/mpl/map/aux_/size_impl.hpp2
-rw-r--r--boost/mpl/map/aux_/tag.hpp2
-rw-r--r--boost/mpl/map/aux_/value_type_impl.hpp2
-rw-r--r--boost/mpl/map/map0.hpp2
-rw-r--r--boost/mpl/map/map10.hpp2
-rw-r--r--boost/mpl/map/map20.hpp2
-rw-r--r--boost/mpl/map/map30.hpp2
-rw-r--r--boost/mpl/map/map40.hpp2
-rw-r--r--boost/mpl/map/map50.hpp2
-rw-r--r--boost/mpl/math/fixed_c.hpp2
-rw-r--r--boost/mpl/math/is_even.hpp2
-rw-r--r--boost/mpl/math/rational_c.hpp2
-rw-r--r--boost/mpl/max.hpp2
-rw-r--r--boost/mpl/max_element.hpp2
-rw-r--r--boost/mpl/min.hpp2
-rw-r--r--boost/mpl/min_element.hpp2
-rw-r--r--boost/mpl/min_max.hpp2
-rw-r--r--boost/mpl/minus.hpp2
-rw-r--r--boost/mpl/modulus.hpp2
-rw-r--r--boost/mpl/multiplies.hpp2
-rw-r--r--boost/mpl/multiset/aux_/count_impl.hpp2
-rw-r--r--boost/mpl/multiset/aux_/insert_impl.hpp2
-rw-r--r--boost/mpl/multiset/aux_/item.hpp2
-rw-r--r--boost/mpl/multiset/aux_/multiset0.hpp2
-rw-r--r--boost/mpl/multiset/aux_/tag.hpp2
-rw-r--r--boost/mpl/multiset/multiset0.hpp2
-rw-r--r--boost/mpl/negate.hpp2
-rw-r--r--boost/mpl/next.hpp2
-rw-r--r--boost/mpl/next_prior.hpp2
-rw-r--r--boost/mpl/not.hpp2
-rw-r--r--boost/mpl/not_equal_to.hpp2
-rw-r--r--boost/mpl/numeric_cast.hpp2
-rw-r--r--boost/mpl/or.hpp2
-rw-r--r--boost/mpl/order.hpp2
-rw-r--r--boost/mpl/order_fwd.hpp2
-rw-r--r--boost/mpl/pair.hpp2
-rw-r--r--boost/mpl/pair_view.hpp2
-rw-r--r--boost/mpl/partition.hpp2
-rw-r--r--boost/mpl/placeholders.hpp2
-rw-r--r--boost/mpl/plus.hpp2
-rw-r--r--boost/mpl/pop_back.hpp2
-rw-r--r--boost/mpl/pop_back_fwd.hpp2
-rw-r--r--boost/mpl/pop_front.hpp2
-rw-r--r--boost/mpl/pop_front_fwd.hpp2
-rw-r--r--boost/mpl/print.hpp2
-rw-r--r--boost/mpl/prior.hpp2
-rw-r--r--boost/mpl/protect.hpp2
-rw-r--r--boost/mpl/push_back.hpp2
-rw-r--r--boost/mpl/push_back_fwd.hpp2
-rw-r--r--boost/mpl/push_front.hpp2
-rw-r--r--boost/mpl/push_front_fwd.hpp2
-rw-r--r--boost/mpl/quote.hpp2
-rw-r--r--boost/mpl/range_c.hpp2
-rw-r--r--boost/mpl/remove.hpp2
-rw-r--r--boost/mpl/remove_if.hpp2
-rw-r--r--boost/mpl/replace.hpp2
-rw-r--r--boost/mpl/replace_if.hpp2
-rw-r--r--boost/mpl/reverse.hpp2
-rw-r--r--boost/mpl/reverse_fold.hpp2
-rw-r--r--boost/mpl/reverse_iter_fold.hpp2
-rw-r--r--boost/mpl/same_as.hpp2
-rw-r--r--boost/mpl/sequence_tag.hpp2
-rw-r--r--boost/mpl/sequence_tag_fwd.hpp2
-rw-r--r--boost/mpl/set.hpp2
-rw-r--r--boost/mpl/set/aux_/at_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/begin_end_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/clear_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/empty_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/erase_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/erase_key_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/has_key_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/include_preprocessed.hpp2
-rw-r--r--boost/mpl/set/aux_/insert_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/item.hpp2
-rw-r--r--boost/mpl/set/aux_/iterator.hpp2
-rw-r--r--boost/mpl/set/aux_/key_type_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/numbered.hpp2
-rw-r--r--boost/mpl/set/aux_/numbered_c.hpp2
-rw-r--r--boost/mpl/set/aux_/set0.hpp2
-rw-r--r--boost/mpl/set/aux_/size_impl.hpp2
-rw-r--r--boost/mpl/set/aux_/tag.hpp2
-rw-r--r--boost/mpl/set/aux_/value_type_impl.hpp2
-rw-r--r--boost/mpl/set/set0.hpp2
-rw-r--r--boost/mpl/set/set0_c.hpp2
-rw-r--r--boost/mpl/set/set10.hpp2
-rw-r--r--boost/mpl/set/set10_c.hpp2
-rw-r--r--boost/mpl/set/set20.hpp2
-rw-r--r--boost/mpl/set/set20_c.hpp2
-rw-r--r--boost/mpl/set/set30.hpp2
-rw-r--r--boost/mpl/set/set30_c.hpp2
-rw-r--r--boost/mpl/set/set40.hpp2
-rw-r--r--boost/mpl/set/set40_c.hpp2
-rw-r--r--boost/mpl/set/set50.hpp2
-rw-r--r--boost/mpl/set/set50_c.hpp2
-rw-r--r--boost/mpl/set_c.hpp2
-rw-r--r--boost/mpl/shift_left.hpp2
-rw-r--r--boost/mpl/shift_right.hpp2
-rw-r--r--boost/mpl/single_view.hpp2
-rw-r--r--boost/mpl/size.hpp2
-rw-r--r--boost/mpl/size_fwd.hpp2
-rw-r--r--boost/mpl/size_t.hpp2
-rw-r--r--boost/mpl/size_t_fwd.hpp2
-rw-r--r--boost/mpl/sizeof.hpp2
-rw-r--r--boost/mpl/sort.hpp2
-rw-r--r--boost/mpl/stable_partition.hpp2
-rw-r--r--boost/mpl/switch.hpp2
-rw-r--r--boost/mpl/tag.hpp2
-rw-r--r--boost/mpl/times.hpp2
-rw-r--r--boost/mpl/transform.hpp2
-rw-r--r--boost/mpl/transform_view.hpp2
-rw-r--r--boost/mpl/unique.hpp2
-rw-r--r--boost/mpl/unpack_args.hpp2
-rw-r--r--boost/mpl/upper_bound.hpp2
-rw-r--r--boost/mpl/value_type.hpp2
-rw-r--r--boost/mpl/value_type_fwd.hpp2
-rw-r--r--boost/mpl/vector.hpp2
-rw-r--r--boost/mpl/vector/aux_/O1_size.hpp2
-rw-r--r--boost/mpl/vector/aux_/at.hpp2
-rw-r--r--boost/mpl/vector/aux_/back.hpp2
-rw-r--r--boost/mpl/vector/aux_/begin_end.hpp2
-rw-r--r--boost/mpl/vector/aux_/clear.hpp2
-rw-r--r--boost/mpl/vector/aux_/empty.hpp2
-rw-r--r--boost/mpl/vector/aux_/front.hpp2
-rw-r--r--boost/mpl/vector/aux_/include_preprocessed.hpp2
-rw-r--r--boost/mpl/vector/aux_/item.hpp2
-rw-r--r--boost/mpl/vector/aux_/iterator.hpp2
-rw-r--r--boost/mpl/vector/aux_/numbered.hpp2
-rw-r--r--boost/mpl/vector/aux_/numbered_c.hpp2
-rw-r--r--boost/mpl/vector/aux_/pop_back.hpp2
-rw-r--r--boost/mpl/vector/aux_/pop_front.hpp2
-rw-r--r--boost/mpl/vector/aux_/push_back.hpp2
-rw-r--r--boost/mpl/vector/aux_/push_front.hpp2
-rw-r--r--boost/mpl/vector/aux_/size.hpp2
-rw-r--r--boost/mpl/vector/aux_/tag.hpp2
-rw-r--r--boost/mpl/vector/aux_/vector0.hpp2
-rw-r--r--boost/mpl/vector/vector0.hpp2
-rw-r--r--boost/mpl/vector/vector0_c.hpp2
-rw-r--r--boost/mpl/vector/vector10.hpp2
-rw-r--r--boost/mpl/vector/vector10_c.hpp2
-rw-r--r--boost/mpl/vector/vector20.hpp2
-rw-r--r--boost/mpl/vector/vector20_c.hpp2
-rw-r--r--boost/mpl/vector/vector30.hpp2
-rw-r--r--boost/mpl/vector/vector30_c.hpp2
-rw-r--r--boost/mpl/vector/vector40.hpp2
-rw-r--r--boost/mpl/vector/vector40_c.hpp2
-rw-r--r--boost/mpl/vector/vector50.hpp2
-rw-r--r--boost/mpl/vector/vector50_c.hpp2
-rw-r--r--boost/mpl/vector_c.hpp2
-rw-r--r--boost/mpl/void.hpp2
-rw-r--r--boost/mpl/void_fwd.hpp2
-rw-r--r--boost/mpl/zip_view.hpp2
-rw-r--r--boost/msm/back/dispatch_table.hpp67
-rw-r--r--boost/msm/back/favor_compile_time.hpp2
-rw-r--r--boost/msm/back/metafunctions.hpp13
-rw-r--r--boost/msm/back/state_machine.hpp186
-rw-r--r--boost/msm/common.hpp2
-rw-r--r--boost/msm/event_traits.hpp36
-rw-r--r--boost/msm/front/euml/common.hpp143
-rw-r--r--boost/msm/front/euml/container.hpp102
-rw-r--r--boost/msm/front/euml/operator.hpp20
-rw-r--r--boost/msm/front/euml/state_grammar.hpp25
-rw-r--r--boost/msm/front/euml/transformation.hpp8
-rw-r--r--boost/msm/front/functor_row.hpp22
-rw-r--r--boost/msm/front/state_machine_def.hpp3
-rw-r--r--boost/msm/front/states.hpp11
-rw-r--r--boost/msm/msm_grammar.hpp40
-rw-r--r--boost/multi_array/base.hpp44
-rw-r--r--boost/multi_array/concept_checks.hpp1
-rw-r--r--boost/multi_array/iterator.hpp18
-rw-r--r--boost/multi_array/multi_array_ref.hpp1
-rw-r--r--boost/multi_array/view.hpp1
-rw-r--r--boost/numeric/conversion/converter_policies.hpp8
-rw-r--r--boost/numeric/interval/detail/msvc_rounding_control.hpp2
-rw-r--r--boost/parameter/aux_/cast.hpp44
-rw-r--r--boost/parameter/preprocessor.hpp3
-rw-r--r--boost/pending/detail/property.hpp139
-rw-r--r--boost/pending/property.hpp240
-rw-r--r--boost/pending/property_serialize.hpp2
-rw-r--r--boost/program_options/detail/cmdline.hpp12
-rw-r--r--boost/program_options/detail/config_file.hpp2
-rw-r--r--boost/program_options/detail/parsers.hpp6
-rw-r--r--boost/program_options/detail/value_semantic.hpp7
-rw-r--r--boost/program_options/errors.hpp454
-rw-r--r--boost/program_options/options_description.hpp10
-rw-r--r--boost/program_options/parsers.hpp30
-rw-r--r--boost/program_options/value_semantic.hpp18
-rw-r--r--boost/program_options/variables_map.hpp13
-rw-r--r--boost/property_map/dynamic_property_map.hpp63
-rw-r--r--boost/property_map/function_property_map.hpp66
-rw-r--r--boost/property_map/parallel/impl/distributed_property_map.ipp4
-rw-r--r--boost/property_map/transform_value_property_map.hpp67
-rw-r--r--boost/property_tree/detail/json_parser_read.hpp3
-rw-r--r--boost/property_tree/detail/ptree_implementation.hpp2
-rw-r--r--boost/proto/context/default.hpp4
-rw-r--r--boost/proto/context/detail/default_eval.hpp2
-rw-r--r--boost/proto/context/detail/preprocessed/default_eval.hpp16
-rw-r--r--boost/proto/debug.hpp3
-rw-r--r--boost/proto/detail/as_expr.hpp9
-rw-r--r--boost/proto/detail/as_lvalue.hpp9
-rw-r--r--boost/proto/detail/decltype.hpp9
-rw-r--r--boost/proto/detail/deduce_domain.hpp1
-rw-r--r--boost/proto/detail/dont_care.hpp9
-rw-r--r--boost/proto/detail/ignore_unused.hpp9
-rw-r--r--boost/proto/domain.hpp9
-rw-r--r--boost/proto/expr.hpp1
-rw-r--r--boost/proto/extends.hpp29
-rw-r--r--boost/proto/fusion.hpp21
-rw-r--r--boost/proto/generate.hpp9
-rw-r--r--boost/proto/make_expr.hpp7
-rw-r--r--boost/proto/matches.hpp18
-rw-r--r--boost/proto/operators.hpp25
-rw-r--r--boost/proto/proto_fwd.hpp26
-rw-r--r--boost/proto/traits.hpp13
-rw-r--r--boost/proto/transform/call.hpp33
-rw-r--r--boost/proto/transform/default.hpp4
-rw-r--r--boost/proto/transform/detail/call.hpp29
-rw-r--r--boost/proto/transform/detail/default_function_impl.hpp2
-rw-r--r--boost/proto/transform/detail/expand_pack.hpp46
-rw-r--r--boost/proto/transform/detail/lazy.hpp21
-rw-r--r--boost/proto/transform/detail/make.hpp24
-rw-r--r--boost/proto/transform/detail/pack.hpp97
-rw-r--r--boost/proto/transform/detail/pack_impl.hpp72
-rw-r--r--boost/proto/transform/detail/preprocessed/call.hpp200
-rw-r--r--boost/proto/transform/detail/preprocessed/default_function_impl.hpp16
-rw-r--r--boost/proto/transform/detail/preprocessed/expand_pack.hpp73
-rw-r--r--boost/proto/transform/detail/preprocessed/lazy.hpp180
-rw-r--r--boost/proto/transform/detail/preprocessed/make.hpp220
-rw-r--r--boost/proto/transform/detail/preprocessed/pack_impl.hpp442
-rw-r--r--boost/proto/transform/detail/preprocessed/when.hpp762
-rw-r--r--boost/proto/transform/detail/when.hpp77
-rw-r--r--boost/proto/transform/impl.hpp9
-rw-r--r--boost/proto/transform/lazy.hpp7
-rw-r--r--boost/proto/transform/make.hpp16
-rw-r--r--boost/proto/transform/pass_through.hpp9
-rw-r--r--boost/proto/transform/when.hpp59
-rw-r--r--boost/python/detail/config.hpp4
-rw-r--r--boost/python/extract.hpp1
-rw-r--r--boost/python/instance_holder.hpp2
-rw-r--r--boost/python/module_init.hpp2
-rw-r--r--boost/python/object/class.hpp1
-rw-r--r--boost/python/object_core.hpp12
-rw-r--r--boost/python/scope.hpp1
-rw-r--r--boost/random/detail/signed_unsigned_tools.hpp2
-rw-r--r--boost/random/discrete_distribution.hpp8
-rw-r--r--boost/random/piecewise_constant_distribution.hpp8
-rw-r--r--boost/random/piecewise_linear_distribution.hpp8
-rw-r--r--boost/random/seed_seq.hpp6
-rw-r--r--boost/range/algorithm/equal.hpp20
-rw-r--r--boost/range/algorithm/for_each.hpp1
-rw-r--r--boost/range/algorithm_ext/copy_n.hpp8
-rw-r--r--boost/range/as_literal.hpp2
-rw-r--r--boost/range/counting_range.hpp1
-rw-r--r--boost/range/detail/any_iterator.hpp1
-rw-r--r--boost/range/detail/any_iterator_buffer.hpp2
-rw-r--r--boost/range/detail/join_iterator.hpp2
-rw-r--r--boost/range/detail/size_type.hpp33
-rw-r--r--boost/range/has_range_iterator.hpp2
-rw-r--r--boost/range/numeric.hpp2
-rw-r--r--boost/range/size.hpp6
-rw-r--r--boost/range/size_type.hpp56
-rw-r--r--boost/ratio/detail/mpl/gcd.hpp45
-rw-r--r--boost/ratio/detail/mpl/lcm.hpp45
-rw-r--r--boost/ratio/detail/overflow_helpers.hpp4
-rw-r--r--boost/ratio/include.hpp3
-rw-r--r--boost/ratio/ratio_io.hpp250
-rw-r--r--boost/regex/concepts.hpp2
-rw-r--r--boost/regex/config.hpp5
-rw-r--r--boost/regex/pending/object_cache.hpp2
-rw-r--r--boost/regex/v4/basic_regex.hpp9
-rw-r--r--boost/regex/v4/basic_regex_creator.hpp65
-rw-r--r--boost/regex/v4/basic_regex_parser.hpp29
-rw-r--r--boost/regex/v4/instances.hpp5
-rw-r--r--boost/regex/v4/match_results.hpp5
-rw-r--r--boost/regex/v4/perl_matcher.hpp5
-rw-r--r--boost/regex/v4/perl_matcher_non_recursive.hpp8
-rw-r--r--boost/regex/v4/regex_format.hpp6
-rw-r--r--boost/regex/v4/regex_iterator.hpp2
-rw-r--r--boost/scope_exit.hpp1357
-rw-r--r--boost/serialization/detail/get_data.hpp14
-rw-r--r--boost/serialization/extended_type_info_no_rtti.hpp2
-rw-r--r--boost/serialization/extended_type_info_typeid.hpp2
-rw-r--r--boost/serialization/factory.hpp2
-rw-r--r--boost/serialization/force_include.hpp6
-rw-r--r--boost/serialization/valarray.hpp4
-rw-r--r--boost/serialization/vector.hpp9
-rw-r--r--boost/serialization/vector_135.hpp2
-rw-r--r--boost/signals2/detail/foreign_ptr.hpp19
-rw-r--r--boost/signals2/detail/variadic_slot_invoker.hpp20
-rw-r--r--boost/smart_ptr/detail/sp_counted_base.hpp6
-rw-r--r--boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp150
-rw-r--r--boost/smart_ptr/detail/spinlock_gcc_arm.hpp29
-rw-r--r--boost/spirit/actor.hpp27
-rw-r--r--boost/spirit/actor/assign_actor.hpp27
-rw-r--r--boost/spirit/actor/assign_key_actor.hpp27
-rw-r--r--boost/spirit/actor/clear_actor.hpp27
-rw-r--r--boost/spirit/actor/decrement_actor.hpp27
-rw-r--r--boost/spirit/actor/erase_actor.hpp27
-rw-r--r--boost/spirit/actor/increment_actor.hpp27
-rw-r--r--boost/spirit/actor/insert_at_actor.hpp27
-rw-r--r--boost/spirit/actor/insert_key_actor.hpp27
-rw-r--r--boost/spirit/actor/push_back_actor.hpp27
-rw-r--r--boost/spirit/actor/push_front_actor.hpp27
-rw-r--r--boost/spirit/actor/ref_actor.hpp27
-rw-r--r--boost/spirit/actor/ref_const_ref_actor.hpp27
-rw-r--r--boost/spirit/actor/ref_const_ref_const_ref_a.hpp27
-rw-r--r--boost/spirit/actor/ref_const_ref_value_actor.hpp27
-rw-r--r--boost/spirit/actor/ref_value_actor.hpp27
-rw-r--r--boost/spirit/actor/swap_actor.hpp27
-rw-r--r--boost/spirit/actor/typeof.hpp27
-rw-r--r--boost/spirit/attribute.hpp27
-rw-r--r--boost/spirit/attribute/closure.hpp27
-rw-r--r--boost/spirit/attribute/closure_context.hpp27
-rw-r--r--boost/spirit/attribute/closure_fwd.hpp27
-rw-r--r--boost/spirit/attribute/parametric.hpp27
-rw-r--r--boost/spirit/attribute/typeof.hpp27
-rw-r--r--boost/spirit/core.hpp27
-rw-r--r--boost/spirit/core/assert.hpp27
-rw-r--r--boost/spirit/core/composite/actions.hpp27
-rw-r--r--boost/spirit/core/composite/alternative.hpp27
-rw-r--r--boost/spirit/core/composite/composite.hpp27
-rw-r--r--boost/spirit/core/composite/difference.hpp27
-rw-r--r--boost/spirit/core/composite/directives.hpp27
-rw-r--r--boost/spirit/core/composite/epsilon.hpp27
-rw-r--r--boost/spirit/core/composite/exclusive_or.hpp27
-rw-r--r--boost/spirit/core/composite/intersection.hpp27
-rw-r--r--boost/spirit/core/composite/kleene_star.hpp27
-rw-r--r--boost/spirit/core/composite/list.hpp27
-rw-r--r--boost/spirit/core/composite/no_actions.hpp27
-rw-r--r--boost/spirit/core/composite/operators.hpp27
-rw-r--r--boost/spirit/core/composite/optional.hpp27
-rw-r--r--boost/spirit/core/composite/positive.hpp27
-rw-r--r--boost/spirit/core/composite/sequence.hpp27
-rw-r--r--boost/spirit/core/composite/sequential_and.hpp27
-rw-r--r--boost/spirit/core/composite/sequential_or.hpp27
-rw-r--r--boost/spirit/core/config.hpp27
-rw-r--r--boost/spirit/core/match.hpp27
-rw-r--r--boost/spirit/core/nil.hpp27
-rw-r--r--boost/spirit/core/non_terminal/grammar.hpp27
-rw-r--r--boost/spirit/core/non_terminal/parser_context.hpp27
-rw-r--r--boost/spirit/core/non_terminal/parser_id.hpp27
-rw-r--r--boost/spirit/core/non_terminal/rule.hpp27
-rw-r--r--boost/spirit/core/non_terminal/subrule.hpp27
-rw-r--r--boost/spirit/core/non_terminal/subrule_fwd.hpp27
-rw-r--r--boost/spirit/core/parser.hpp27
-rw-r--r--boost/spirit/core/primitives/numerics.hpp27
-rw-r--r--boost/spirit/core/primitives/numerics_fwd.hpp27
-rw-r--r--boost/spirit/core/primitives/primitives.hpp27
-rw-r--r--boost/spirit/core/safe_bool.hpp27
-rw-r--r--boost/spirit/core/scanner/scanner.hpp27
-rw-r--r--boost/spirit/core/scanner/scanner_fwd.hpp27
-rw-r--r--boost/spirit/core/scanner/skipper.hpp27
-rw-r--r--boost/spirit/core/scanner/skipper_fwd.hpp27
-rw-r--r--boost/spirit/core/typeof.hpp27
-rw-r--r--boost/spirit/debug.hpp27
-rw-r--r--boost/spirit/debug/debug_node.hpp27
-rw-r--r--boost/spirit/debug/minimal.hpp27
-rw-r--r--boost/spirit/debug/parser_names.hpp27
-rw-r--r--boost/spirit/debug/typeof.hpp27
-rw-r--r--boost/spirit/dynamic.hpp27
-rw-r--r--boost/spirit/dynamic/for.hpp27
-rw-r--r--boost/spirit/dynamic/if.hpp27
-rw-r--r--boost/spirit/dynamic/lazy.hpp27
-rw-r--r--boost/spirit/dynamic/rule_alias.hpp27
-rw-r--r--boost/spirit/dynamic/select.hpp27
-rw-r--r--boost/spirit/dynamic/stored_rule.hpp27
-rw-r--r--boost/spirit/dynamic/stored_rule_fwd.hpp27
-rw-r--r--boost/spirit/dynamic/switch.hpp27
-rw-r--r--boost/spirit/dynamic/typeof.hpp27
-rw-r--r--boost/spirit/dynamic/while.hpp27
-rw-r--r--boost/spirit/error_handling.hpp27
-rw-r--r--boost/spirit/error_handling/exceptions.hpp27
-rw-r--r--boost/spirit/error_handling/exceptions_fwd.hpp27
-rw-r--r--boost/spirit/error_handling/typeof.hpp27
-rw-r--r--boost/spirit/home/qi/detail/assign_to.hpp31
-rw-r--r--boost/spirit/home/support/detail/endian.hpp8
-rw-r--r--boost/spirit/home/support/utree/detail/utree_detail2.hpp2
-rw-r--r--boost/spirit/include/version.hpp4
-rw-r--r--boost/spirit/iterator.hpp27
-rw-r--r--boost/spirit/iterator/file_iterator.hpp27
-rw-r--r--boost/spirit/iterator/file_iterator_fwd.hpp27
-rw-r--r--boost/spirit/iterator/fixed_size_queue.hpp27
-rw-r--r--boost/spirit/iterator/multi_pass.hpp27
-rw-r--r--boost/spirit/iterator/multi_pass_fwd.hpp27
-rw-r--r--boost/spirit/iterator/position_iterator.hpp27
-rw-r--r--boost/spirit/iterator/position_iterator_fwd.hpp27
-rw-r--r--boost/spirit/iterator/typeof.hpp27
-rw-r--r--boost/spirit/meta.hpp27
-rw-r--r--boost/spirit/meta/as_parser.hpp27
-rw-r--r--boost/spirit/meta/fundamental.hpp27
-rw-r--r--boost/spirit/meta/parser_traits.hpp27
-rw-r--r--boost/spirit/meta/refactoring.hpp27
-rw-r--r--boost/spirit/meta/traverse.hpp27
-rw-r--r--boost/spirit/phoenix.hpp27
-rw-r--r--boost/spirit/phoenix/actor.hpp24
-rw-r--r--boost/spirit/phoenix/binders.hpp24
-rw-r--r--boost/spirit/phoenix/casts.hpp24
-rw-r--r--boost/spirit/phoenix/closures.hpp24
-rw-r--r--boost/spirit/phoenix/composite.hpp24
-rw-r--r--boost/spirit/phoenix/functions.hpp24
-rw-r--r--boost/spirit/phoenix/new.hpp24
-rw-r--r--boost/spirit/phoenix/operators.hpp24
-rw-r--r--boost/spirit/phoenix/primitives.hpp24
-rw-r--r--boost/spirit/phoenix/special_ops.hpp24
-rw-r--r--boost/spirit/phoenix/statements.hpp24
-rw-r--r--boost/spirit/phoenix/tuple_helpers.hpp24
-rw-r--r--boost/spirit/phoenix/tuples.hpp24
-rw-r--r--boost/spirit/repository/home/qi/directive/kwd.hpp689
-rw-r--r--boost/spirit/repository/home/qi/operator/detail/keywords.hpp634
-rw-r--r--boost/spirit/repository/home/qi/operator/keywords.hpp420
-rw-r--r--boost/spirit/repository/home/support/kwd.hpp2
-rw-r--r--boost/spirit/symbols.hpp27
-rw-r--r--boost/spirit/symbols/symbols.hpp27
-rw-r--r--boost/spirit/symbols/symbols_fwd.hpp27
-rw-r--r--boost/spirit/symbols/typeof.hpp27
-rw-r--r--boost/spirit/tree/ast.hpp27
-rw-r--r--boost/spirit/tree/ast_fwd.hpp27
-rw-r--r--boost/spirit/tree/common.hpp27
-rw-r--r--boost/spirit/tree/common_fwd.hpp27
-rw-r--r--boost/spirit/tree/parse_tree.hpp27
-rw-r--r--boost/spirit/tree/parse_tree_fwd.hpp27
-rw-r--r--boost/spirit/tree/parse_tree_utils.hpp27
-rw-r--r--boost/spirit/tree/parsetree.dtd21
-rw-r--r--boost/spirit/tree/tree_to_xml.hpp27
-rw-r--r--boost/spirit/tree/typeof.hpp27
-rw-r--r--boost/spirit/utility.hpp27
-rw-r--r--boost/spirit/utility/chset.hpp27
-rw-r--r--boost/spirit/utility/chset_operators.hpp27
-rw-r--r--boost/spirit/utility/confix.hpp27
-rw-r--r--boost/spirit/utility/confix_fwd.hpp27
-rw-r--r--boost/spirit/utility/distinct.hpp27
-rw-r--r--boost/spirit/utility/distinct_fwd.hpp27
-rw-r--r--boost/spirit/utility/escape_char.hpp27
-rw-r--r--boost/spirit/utility/escape_char_fwd.hpp27
-rw-r--r--boost/spirit/utility/flush_multi_pass.hpp27
-rw-r--r--boost/spirit/utility/functor_parser.hpp27
-rw-r--r--boost/spirit/utility/grammar_def.hpp27
-rw-r--r--boost/spirit/utility/grammar_def_fwd.hpp27
-rw-r--r--boost/spirit/utility/lists.hpp27
-rw-r--r--boost/spirit/utility/lists_fwd.hpp27
-rw-r--r--boost/spirit/utility/loops.hpp27
-rw-r--r--boost/spirit/utility/regex.hpp27
-rw-r--r--boost/spirit/utility/rule_parser.hpp27
-rw-r--r--boost/spirit/utility/scoped_lock.hpp27
-rw-r--r--boost/spirit/utility/typeof.hpp27
-rw-r--r--boost/system/config.hpp17
-rw-r--r--boost/thread/barrier.hpp8
-rw-r--r--boost/thread/cv_status.hpp26
-rw-r--r--boost/thread/detail/config.hpp113
-rw-r--r--boost/thread/detail/delete.hpp45
-rw-r--r--boost/thread/detail/memory.hpp54
-rw-r--r--boost/thread/detail/move.hpp182
-rw-r--r--boost/thread/detail/platform.hpp4
-rw-r--r--boost/thread/detail/thread.hpp340
-rw-r--r--boost/thread/detail/thread_interruption.hpp23
-rw-r--r--boost/thread/exceptions.hpp211
-rw-r--r--boost/thread/future.hpp970
-rw-r--r--boost/thread/locks.hpp899
-rw-r--r--boost/thread/once.hpp4
-rw-r--r--boost/thread/pthread/condition_variable.hpp171
-rw-r--r--boost/thread/pthread/condition_variable_fwd.hpp155
-rw-r--r--boost/thread/pthread/mutex.hpp100
-rw-r--r--boost/thread/pthread/once.hpp35
-rw-r--r--boost/thread/pthread/recursive_mutex.hpp97
-rw-r--r--boost/thread/pthread/shared_mutex.hpp252
-rw-r--r--boost/thread/pthread/thread_data.hpp57
-rw-r--r--boost/thread/reverse_lock.hpp58
-rw-r--r--boost/thread/shared_lock_guard.hpp52
-rw-r--r--boost/thread/shared_mutex.hpp9
-rw-r--r--boost/thread/thread.hpp3
-rw-r--r--boost/thread/v2/thread.hpp56
-rw-r--r--boost/thread/win32/basic_recursive_mutex.hpp42
-rw-r--r--boost/thread/win32/basic_timed_mutex.hpp60
-rw-r--r--boost/thread/win32/condition_variable.hpp181
-rw-r--r--boost/thread/win32/mutex.hpp10
-rw-r--r--boost/thread/win32/once.hpp55
-rw-r--r--boost/thread/win32/recursive_mutex.hpp9
-rw-r--r--boost/thread/win32/shared_mutex.hpp256
-rw-r--r--boost/thread/win32/thread_data.hpp51
-rw-r--r--boost/thread/win32/thread_heap_alloc.hpp90
-rw-r--r--boost/thread/win32/thread_primitives.hpp20
-rw-r--r--boost/thread/xtime.hpp12
-rw-r--r--boost/throw_exception.hpp17
-rw-r--r--boost/type_traits/detail/bool_trait_def.hpp2
-rw-r--r--boost/type_traits/detail/bool_trait_undef.hpp2
-rw-r--r--boost/type_traits/detail/size_t_trait_def.hpp2
-rw-r--r--boost/type_traits/detail/size_t_trait_undef.hpp2
-rw-r--r--boost/type_traits/detail/type_trait_def.hpp2
-rw-r--r--boost/type_traits/detail/type_trait_undef.hpp2
-rw-r--r--boost/type_traits/intrinsics.hpp7
-rw-r--r--boost/type_traits/is_virtual_base_of.hpp2
-rw-r--r--boost/units/conversion.hpp6
-rw-r--r--boost/units/detail/one.hpp11
-rw-r--r--boost/units/detail/static_rational_power.hpp4
-rw-r--r--boost/units/quantity.hpp36
-rw-r--r--boost/units/systems/detail/constants.hpp68
-rw-r--r--boost/unordered/detail/allocate.hpp1246
-rw-r--r--boost/unordered/detail/allocator_helpers.hpp523
-rw-r--r--boost/unordered/detail/buckets.hpp519
-rw-r--r--boost/unordered/detail/emplace_args.hpp480
-rw-r--r--boost/unordered/detail/equivalent.hpp322
-rw-r--r--boost/unordered/detail/extract_key.hpp12
-rw-r--r--boost/unordered/detail/fwd.hpp30
-rw-r--r--boost/unordered/detail/table.hpp319
-rw-r--r--boost/unordered/detail/unique.hpp272
-rw-r--r--boost/unordered/detail/util.hpp2
-rw-r--r--boost/unordered/unordered_map.hpp91
-rw-r--r--boost/unordered/unordered_map_fwd.hpp18
-rw-r--r--boost/unordered/unordered_set.hpp77
-rw-r--r--boost/unordered/unordered_set_fwd.hpp16
-rw-r--r--boost/utility.hpp1
-rw-r--r--boost/utility/declval.hpp9
-rw-r--r--boost/utility/identity_type.hpp46
-rw-r--r--boost/uuid/seed_rng.hpp11
-rw-r--r--boost/variant/detail/hash_variant.hpp48
-rw-r--r--boost/variant/detail/visitation_impl.hpp2
-rw-r--r--boost/variant/variant.hpp1
-rw-r--r--boost/version.hpp7
-rw-r--r--boost/wave.hpp2
-rw-r--r--boost/wave/cpp_context.hpp2
-rw-r--r--boost/wave/cpp_exceptions.hpp4
-rw-r--r--boost/wave/cpp_iteration_context.hpp62
-rw-r--r--boost/wave/cpp_throw.hpp2
-rw-r--r--boost/wave/cpplexer/convert_trigraphs.hpp2
-rw-r--r--boost/wave/cpplexer/cpp_lex_interface.hpp2
-rw-r--r--boost/wave/cpplexer/cpp_lex_interface_generator.hpp2
-rw-r--r--boost/wave/cpplexer/cpp_lex_iterator.hpp4
-rw-r--r--boost/wave/cpplexer/cpp_lex_token.hpp2
-rw-r--r--boost/wave/cpplexer/cpplexer_exceptions.hpp2
-rw-r--r--boost/wave/cpplexer/detect_include_guards.hpp2
-rw-r--r--boost/wave/cpplexer/re2clex/aq.hpp2
-rw-r--r--boost/wave/cpplexer/re2clex/cpp_re.hpp2
-rw-r--r--boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp4
-rw-r--r--boost/wave/cpplexer/re2clex/scanner.hpp4
-rw-r--r--boost/wave/cpplexer/token_cache.hpp2
-rw-r--r--boost/wave/cpplexer/validate_universal_char.hpp2
-rw-r--r--boost/wave/grammars/cpp_chlit_grammar.hpp2
-rw-r--r--boost/wave/grammars/cpp_defined_grammar.hpp2
-rw-r--r--boost/wave/grammars/cpp_defined_grammar_gen.hpp2
-rw-r--r--boost/wave/grammars/cpp_expression_grammar.hpp2
-rw-r--r--boost/wave/grammars/cpp_expression_grammar_gen.hpp2
-rw-r--r--boost/wave/grammars/cpp_expression_value.hpp2
-rw-r--r--boost/wave/grammars/cpp_grammar.hpp2
-rw-r--r--boost/wave/grammars/cpp_grammar_gen.hpp2
-rw-r--r--boost/wave/grammars/cpp_intlit_grammar.hpp2
-rw-r--r--boost/wave/grammars/cpp_literal_grammar_gen.hpp2
-rw-r--r--boost/wave/grammars/cpp_predef_macros_gen.hpp2
-rw-r--r--boost/wave/grammars/cpp_predef_macros_grammar.hpp2
-rw-r--r--boost/wave/grammars/cpp_value_error.hpp2
-rw-r--r--boost/wave/language_support.hpp39
-rw-r--r--boost/wave/preprocessing_hooks.hpp2
-rw-r--r--boost/wave/token_ids.hpp4
-rw-r--r--boost/wave/util/cpp_ifblock.hpp2
-rw-r--r--boost/wave/util/cpp_include_paths.hpp2
-rw-r--r--boost/wave/util/cpp_iterator.hpp644
-rw-r--r--boost/wave/util/cpp_macromap.hpp634
-rw-r--r--boost/wave/util/cpp_macromap_predef.hpp4
-rw-r--r--boost/wave/util/cpp_macromap_utils.hpp2
-rw-r--r--boost/wave/util/file_position.hpp2
-rw-r--r--boost/wave/util/filesystem_compatibility.hpp75
-rw-r--r--boost/wave/util/functor_input.hpp2
-rw-r--r--boost/wave/util/insert_whitespace_detection.hpp2
-rw-r--r--boost/wave/util/interpret_pragma.hpp2
-rw-r--r--boost/wave/util/iteration_context.hpp22
-rw-r--r--boost/wave/util/macro_definition.hpp2
-rw-r--r--boost/wave/util/macro_helpers.hpp2
-rw-r--r--boost/wave/util/pattern_parser.hpp2
-rw-r--r--boost/wave/util/symbol_table.hpp2
-rw-r--r--boost/wave/util/time_conversion_helper.hpp2
-rw-r--r--boost/wave/util/transform_iterator.hpp2
-rw-r--r--boost/wave/util/unput_queue_iterator.hpp2
-rw-r--r--boost/wave/wave_config.hpp6
-rw-r--r--boost/wave/wave_config_constant.hpp2
-rw-r--r--boost/wave/wave_version.hpp6
-rw-r--r--boost/wave/whitespace_handling.hpp4
-rw-r--r--boost/xpressive/detail/core/adaptor.hpp2
-rw-r--r--boost/xpressive/detail/static/type_traits.hpp55
-rw-r--r--boost/xpressive/detail/static/width_of.hpp19
-rw-r--r--boost/xpressive/regex_actions.hpp67
-rw-r--r--boost/xpressive/sub_match.hpp7
-rw-r--r--boost/xpressive/traits/cpp_regex_traits.hpp16
-rw-r--r--boost/xpressive/traits/detail/c_ctype.hpp12
-rw-r--r--boost/xpressive/xpressive_fwd.hpp2
1703 files changed, 59341 insertions, 35491 deletions
diff --git a/boost/accumulators/framework/accumulators/droppable_accumulator.hpp b/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
index c0f512f..1beed66 100644
--- a/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
+++ b/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
@@ -115,6 +115,12 @@ namespace boost { namespace accumulators
{
}
+ droppable_accumulator_base(droppable_accumulator_base const &that)
+ : Accumulator(*static_cast<Accumulator const *>(&that))
+ , ref_count_(that.ref_count_)
+ {
+ }
+
template<typename Args>
void operator ()(Args const &args)
{
@@ -162,6 +168,11 @@ namespace boost { namespace accumulators
: droppable_accumulator::base(args)
{
}
+
+ droppable_accumulator(droppable_accumulator const &that)
+ : droppable_accumulator::base(*static_cast<typename droppable_accumulator::base const *>(&that))
+ {
+ }
};
//////////////////////////////////////////////////////////////////////////
diff --git a/boost/accumulators/statistics.hpp b/boost/accumulators/statistics.hpp
index 1d136e5..0178607 100644
--- a/boost/accumulators/statistics.hpp
+++ b/boost/accumulators/statistics.hpp
@@ -25,7 +25,7 @@
#include <boost/accumulators/statistics/peaks_over_threshold.hpp>
#include <boost/accumulators/statistics/pot_tail_mean.hpp>
#include <boost/accumulators/statistics/pot_quantile.hpp>
-#include <boost/accumulators/statistics/p_square_cumulative_distribution.hpp>
+#include <boost/accumulators/statistics/p_square_cumul_dist.hpp>
#include <boost/accumulators/statistics/p_square_quantile.hpp>
#include <boost/accumulators/statistics/skewness.hpp>
#include <boost/accumulators/statistics/stats.hpp>
@@ -45,7 +45,7 @@
#include <boost/accumulators/statistics/weighted_median.hpp>
#include <boost/accumulators/statistics/weighted_moment.hpp>
#include <boost/accumulators/statistics/weighted_peaks_over_threshold.hpp>
-#include <boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp>
+#include <boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp>
#include <boost/accumulators/statistics/weighted_p_square_quantile.hpp>
#include <boost/accumulators/statistics/weighted_skewness.hpp>
#include <boost/accumulators/statistics/weighted_sum.hpp>
diff --git a/boost/accumulators/statistics/extended_p_square_quantile.hpp b/boost/accumulators/statistics/extended_p_square_quantile.hpp
index b6c008d..09ffef2 100644
--- a/boost/accumulators/statistics/extended_p_square_quantile.hpp
+++ b/boost/accumulators/statistics/extended_p_square_quantile.hpp
@@ -10,6 +10,7 @@
#include <vector>
#include <functional>
+#include <boost/throw_exception.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <boost/range/iterator_range.hpp>
diff --git a/boost/accumulators/statistics/median.hpp b/boost/accumulators/statistics/median.hpp
index 13ebb28..919cf69 100644
--- a/boost/accumulators/statistics/median.hpp
+++ b/boost/accumulators/statistics/median.hpp
@@ -19,7 +19,7 @@
#include <boost/accumulators/statistics/count.hpp>
#include <boost/accumulators/statistics/p_square_quantile.hpp>
#include <boost/accumulators/statistics/density.hpp>
-#include <boost/accumulators/statistics/p_square_cumulative_distribution.hpp>
+#include <boost/accumulators/statistics/p_square_cumul_dist.hpp>
namespace boost { namespace accumulators
{
diff --git a/boost/accumulators/statistics/p_square_cumul_dist.hpp b/boost/accumulators/statistics/p_square_cumul_dist.hpp
new file mode 100644
index 0000000..b9e24f6
--- /dev/null
+++ b/boost/accumulators/statistics/p_square_cumul_dist.hpp
@@ -0,0 +1,260 @@
+///////////////////////////////////////////////////////////////////////////////
+// p_square_cumulative_distribution.hpp
+//
+// Copyright 2005 Daniel Egloff, Olivier Gygi. 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_ACCUMULATORS_STATISTICS_P_SQUARE_CUMUL_DIST_HPP_DE_01_01_2006
+#define BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMUL_DIST_HPP_DE_01_01_2006
+
+#include <vector>
+#include <functional>
+#include <boost/parameter/keyword.hpp>
+#include <boost/range.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/accumulators/framework/accumulator_base.hpp>
+#include <boost/accumulators/framework/extractor.hpp>
+#include <boost/accumulators/numeric/functional.hpp>
+#include <boost/accumulators/framework/parameters/sample.hpp>
+#include <boost/accumulators/statistics_fwd.hpp>
+#include <boost/accumulators/statistics/count.hpp>
+
+namespace boost { namespace accumulators
+{
+///////////////////////////////////////////////////////////////////////////////
+// num_cells named parameter
+//
+BOOST_PARAMETER_NESTED_KEYWORD(tag, p_square_cumulative_distribution_num_cells, num_cells)
+
+namespace impl
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // p_square_cumulative_distribution_impl
+ // cumulative_distribution calculation (as histogram)
+ /**
+ @brief Histogram calculation of the cumulative distribution with the \f$P^2\f$ algorithm
+
+ A histogram of the sample cumulative distribution is computed dynamically without storing samples
+ based on the \f$ P^2 \f$ algorithm. The returned histogram has a specifiable amount (num_cells)
+ equiprobable (and not equal-sized) cells.
+
+ For further details, see
+
+ R. Jain and I. Chlamtac, The P^2 algorithmus for dynamic calculation of quantiles and
+ histograms without storing observations, Communications of the ACM,
+ Volume 28 (October), Number 10, 1985, p. 1076-1085.
+
+ @param p_square_cumulative_distribution_num_cells.
+ */
+ template<typename Sample>
+ struct p_square_cumulative_distribution_impl
+ : accumulator_base
+ {
+ typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
+ typedef std::vector<float_type> array_type;
+ typedef std::vector<std::pair<float_type, float_type> > histogram_type;
+ // for boost::result_of
+ typedef iterator_range<typename histogram_type::iterator> result_type;
+
+ template<typename Args>
+ p_square_cumulative_distribution_impl(Args const &args)
+ : num_cells(args[p_square_cumulative_distribution_num_cells])
+ , heights(num_cells + 1)
+ , actual_positions(num_cells + 1)
+ , desired_positions(num_cells + 1)
+ , positions_increments(num_cells + 1)
+ , histogram(num_cells + 1)
+ , is_dirty(true)
+ {
+ std::size_t b = this->num_cells;
+
+ for (std::size_t i = 0; i < b + 1; ++i)
+ {
+ this->actual_positions[i] = i + 1.;
+ this->desired_positions[i] = i + 1.;
+ this->positions_increments[i] = numeric::average(i, b);
+ }
+ }
+
+ template<typename Args>
+ void operator ()(Args const &args)
+ {
+ this->is_dirty = true;
+
+ std::size_t cnt = count(args);
+ std::size_t sample_cell = 1; // k
+ std::size_t b = this->num_cells;
+
+ // accumulate num_cells + 1 first samples
+ if (cnt <= b + 1)
+ {
+ this->heights[cnt - 1] = args[sample];
+
+ // complete the initialization of heights by sorting
+ if (cnt == b + 1)
+ {
+ std::sort(this->heights.begin(), this->heights.end());
+ }
+ }
+ else
+ {
+ // find cell k such that heights[k-1] <= args[sample] < heights[k] and adjust extreme values
+ if (args[sample] < this->heights[0])
+ {
+ this->heights[0] = args[sample];
+ sample_cell = 1;
+ }
+ else if (this->heights[b] <= args[sample])
+ {
+ this->heights[b] = args[sample];
+ sample_cell = b;
+ }
+ else
+ {
+ typename array_type::iterator it;
+ it = std::upper_bound(
+ this->heights.begin()
+ , this->heights.end()
+ , args[sample]
+ );
+
+ sample_cell = std::distance(this->heights.begin(), it);
+ }
+
+ // increment positions of markers above sample_cell
+ for (std::size_t i = sample_cell; i < b + 1; ++i)
+ {
+ ++this->actual_positions[i];
+ }
+
+ // update desired position of markers 2 to num_cells + 1
+ // (desired position of first marker is always 1)
+ for (std::size_t i = 1; i < b + 1; ++i)
+ {
+ this->desired_positions[i] += this->positions_increments[i];
+ }
+
+ // adjust heights of markers 2 to num_cells if necessary
+ for (std::size_t i = 1; i < b; ++i)
+ {
+ // offset to desire position
+ float_type d = this->desired_positions[i] - this->actual_positions[i];
+
+ // offset to next position
+ float_type dp = this->actual_positions[i + 1] - this->actual_positions[i];
+
+ // offset to previous position
+ float_type dm = this->actual_positions[i - 1] - this->actual_positions[i];
+
+ // height ds
+ float_type hp = (this->heights[i + 1] - this->heights[i]) / dp;
+ float_type hm = (this->heights[i - 1] - this->heights[i]) / dm;
+
+ if ( ( d >= 1. && dp > 1. ) || ( d <= -1. && dm < -1. ) )
+ {
+ short sign_d = static_cast<short>(d / std::abs(d));
+
+ // try adjusting heights[i] using p-squared formula
+ float_type h = this->heights[i] + sign_d / (dp - dm) * ( (sign_d - dm) * hp + (dp - sign_d) * hm );
+
+ if ( this->heights[i - 1] < h && h < this->heights[i + 1] )
+ {
+ this->heights[i] = h;
+ }
+ else
+ {
+ // use linear formula
+ if (d>0)
+ {
+ this->heights[i] += hp;
+ }
+ if (d<0)
+ {
+ this->heights[i] -= hm;
+ }
+ }
+ this->actual_positions[i] += sign_d;
+ }
+ }
+ }
+ }
+
+ template<typename Args>
+ result_type result(Args const &args) const
+ {
+ if (this->is_dirty)
+ {
+ this->is_dirty = false;
+
+ // creates a vector of std::pair where each pair i holds
+ // the values heights[i] (x-axis of histogram) and
+ // actual_positions[i] / cnt (y-axis of histogram)
+
+ std::size_t cnt = count(args);
+
+ for (std::size_t i = 0; i < this->histogram.size(); ++i)
+ {
+ this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], cnt));
+ }
+ }
+ //return histogram;
+ return make_iterator_range(this->histogram);
+ }
+
+ private:
+ std::size_t num_cells; // number of cells b
+ array_type heights; // q_i
+ array_type actual_positions; // n_i
+ array_type desired_positions; // n'_i
+ array_type positions_increments; // dn'_i
+ mutable histogram_type histogram; // histogram
+ mutable bool is_dirty;
+ };
+
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////////
+// tag::p_square_cumulative_distribution
+//
+namespace tag
+{
+ struct p_square_cumulative_distribution
+ : depends_on<count>
+ , p_square_cumulative_distribution_num_cells
+ {
+ /// INTERNAL ONLY
+ ///
+ typedef accumulators::impl::p_square_cumulative_distribution_impl<mpl::_1> impl;
+ };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// extract::p_square_cumulative_distribution
+//
+namespace extract
+{
+ extractor<tag::p_square_cumulative_distribution> const p_square_cumulative_distribution = {};
+
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(p_square_cumulative_distribution)
+}
+
+using extract::p_square_cumulative_distribution;
+
+// So that p_square_cumulative_distribution can be automatically substituted with
+// weighted_p_square_cumulative_distribution when the weight parameter is non-void
+template<>
+struct as_weighted_feature<tag::p_square_cumulative_distribution>
+{
+ typedef tag::weighted_p_square_cumulative_distribution type;
+};
+
+template<>
+struct feature_of<tag::weighted_p_square_cumulative_distribution>
+ : feature_of<tag::p_square_cumulative_distribution>
+{
+};
+
+}} // namespace boost::accumulators
+
+#endif
diff --git a/boost/accumulators/statistics/p_square_cumulative_distribution.hpp b/boost/accumulators/statistics/p_square_cumulative_distribution.hpp
index 437469c..5e08b51 100644
--- a/boost/accumulators/statistics/p_square_cumulative_distribution.hpp
+++ b/boost/accumulators/statistics/p_square_cumulative_distribution.hpp
@@ -1,260 +1,19 @@
///////////////////////////////////////////////////////////////////////////////
// p_square_cumulative_distribution.hpp
//
-// Copyright 2005 Daniel Egloff, Olivier Gygi. Distributed under the Boost
+// 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)
-#ifndef BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_DE_01_01_2006
-#define BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_DE_01_01_2006
+#ifndef BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_03_19_2012
+#define BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_03_19_2012
-#include <vector>
-#include <functional>
-#include <boost/parameter/keyword.hpp>
-#include <boost/range.hpp>
-#include <boost/mpl/placeholders.hpp>
-#include <boost/accumulators/framework/accumulator_base.hpp>
-#include <boost/accumulators/framework/extractor.hpp>
-#include <boost/accumulators/numeric/functional.hpp>
-#include <boost/accumulators/framework/parameters/sample.hpp>
-#include <boost/accumulators/statistics_fwd.hpp>
-#include <boost/accumulators/statistics/count.hpp>
-
-namespace boost { namespace accumulators
-{
-///////////////////////////////////////////////////////////////////////////////
-// num_cells named parameter
-//
-BOOST_PARAMETER_NESTED_KEYWORD(tag, p_square_cumulative_distribution_num_cells, num_cells)
-
-namespace impl
-{
- ///////////////////////////////////////////////////////////////////////////////
- // p_square_cumulative_distribution_impl
- // cumulative_distribution calculation (as histogram)
- /**
- @brief Histogram calculation of the cumulative distribution with the \f$P^2\f$ algorithm
-
- A histogram of the sample cumulative distribution is computed dynamically without storing samples
- based on the \f$ P^2 \f$ algorithm. The returned histogram has a specifiable amount (num_cells)
- equiprobable (and not equal-sized) cells.
-
- For further details, see
-
- R. Jain and I. Chlamtac, The P^2 algorithmus for dynamic calculation of quantiles and
- histograms without storing observations, Communications of the ACM,
- Volume 28 (October), Number 10, 1985, p. 1076-1085.
-
- @param p_square_cumulative_distribution_num_cells.
- */
- template<typename Sample>
- struct p_square_cumulative_distribution_impl
- : accumulator_base
- {
- typedef typename numeric::functional::average<Sample, std::size_t>::result_type float_type;
- typedef std::vector<float_type> array_type;
- typedef std::vector<std::pair<float_type, float_type> > histogram_type;
- // for boost::result_of
- typedef iterator_range<typename histogram_type::iterator> result_type;
-
- template<typename Args>
- p_square_cumulative_distribution_impl(Args const &args)
- : num_cells(args[p_square_cumulative_distribution_num_cells])
- , heights(num_cells + 1)
- , actual_positions(num_cells + 1)
- , desired_positions(num_cells + 1)
- , positions_increments(num_cells + 1)
- , histogram(num_cells + 1)
- , is_dirty(true)
- {
- std::size_t b = this->num_cells;
-
- for (std::size_t i = 0; i < b + 1; ++i)
- {
- this->actual_positions[i] = i + 1.;
- this->desired_positions[i] = i + 1.;
- this->positions_increments[i] = numeric::average(i, b);
- }
- }
-
- template<typename Args>
- void operator ()(Args const &args)
- {
- this->is_dirty = true;
-
- std::size_t cnt = count(args);
- std::size_t sample_cell = 1; // k
- std::size_t b = this->num_cells;
-
- // accumulate num_cells + 1 first samples
- if (cnt <= b + 1)
- {
- this->heights[cnt - 1] = args[sample];
-
- // complete the initialization of heights by sorting
- if (cnt == b + 1)
- {
- std::sort(this->heights.begin(), this->heights.end());
- }
- }
- else
- {
- // find cell k such that heights[k-1] <= args[sample] < heights[k] and adjust extreme values
- if (args[sample] < this->heights[0])
- {
- this->heights[0] = args[sample];
- sample_cell = 1;
- }
- else if (this->heights[b] <= args[sample])
- {
- this->heights[b] = args[sample];
- sample_cell = b;
- }
- else
- {
- typename array_type::iterator it;
- it = std::upper_bound(
- this->heights.begin()
- , this->heights.end()
- , args[sample]
- );
-
- sample_cell = std::distance(this->heights.begin(), it);
- }
-
- // increment positions of markers above sample_cell
- for (std::size_t i = sample_cell; i < b + 1; ++i)
- {
- ++this->actual_positions[i];
- }
-
- // update desired position of markers 2 to num_cells + 1
- // (desired position of first marker is always 1)
- for (std::size_t i = 1; i < b + 1; ++i)
- {
- this->desired_positions[i] += this->positions_increments[i];
- }
-
- // adjust heights of markers 2 to num_cells if necessary
- for (std::size_t i = 1; i < b; ++i)
- {
- // offset to desire position
- float_type d = this->desired_positions[i] - this->actual_positions[i];
-
- // offset to next position
- float_type dp = this->actual_positions[i + 1] - this->actual_positions[i];
-
- // offset to previous position
- float_type dm = this->actual_positions[i - 1] - this->actual_positions[i];
-
- // height ds
- float_type hp = (this->heights[i + 1] - this->heights[i]) / dp;
- float_type hm = (this->heights[i - 1] - this->heights[i]) / dm;
-
- if ( ( d >= 1. && dp > 1. ) || ( d <= -1. && dm < -1. ) )
- {
- short sign_d = static_cast<short>(d / std::abs(d));
-
- // try adjusting heights[i] using p-squared formula
- float_type h = this->heights[i] + sign_d / (dp - dm) * ( (sign_d - dm) * hp + (dp - sign_d) * hm );
-
- if ( this->heights[i - 1] < h && h < this->heights[i + 1] )
- {
- this->heights[i] = h;
- }
- else
- {
- // use linear formula
- if (d>0)
- {
- this->heights[i] += hp;
- }
- if (d<0)
- {
- this->heights[i] -= hm;
- }
- }
- this->actual_positions[i] += sign_d;
- }
- }
- }
- }
-
- template<typename Args>
- result_type result(Args const &args) const
- {
- if (this->is_dirty)
- {
- this->is_dirty = false;
-
- // creates a vector of std::pair where each pair i holds
- // the values heights[i] (x-axis of histogram) and
- // actual_positions[i] / cnt (y-axis of histogram)
-
- std::size_t cnt = count(args);
-
- for (std::size_t i = 0; i < this->histogram.size(); ++i)
- {
- this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], cnt));
- }
- }
- //return histogram;
- return make_iterator_range(this->histogram);
- }
-
- private:
- std::size_t num_cells; // number of cells b
- array_type heights; // q_i
- array_type actual_positions; // n_i
- array_type desired_positions; // n'_i
- array_type positions_increments; // dn'_i
- mutable histogram_type histogram; // histogram
- mutable bool is_dirty;
- };
-
-} // namespace detail
-
-///////////////////////////////////////////////////////////////////////////////
-// tag::p_square_cumulative_distribution
-//
-namespace tag
-{
- struct p_square_cumulative_distribution
- : depends_on<count>
- , p_square_cumulative_distribution_num_cells
- {
- /// INTERNAL ONLY
- ///
- typedef accumulators::impl::p_square_cumulative_distribution_impl<mpl::_1> impl;
- };
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// extract::p_square_cumulative_distribution
-//
-namespace extract
-{
- extractor<tag::p_square_cumulative_distribution> const p_square_cumulative_distribution = {};
-
- BOOST_ACCUMULATORS_IGNORE_GLOBAL(p_square_cumulative_distribution)
-}
-
-using extract::p_square_cumulative_distribution;
-
-// So that p_square_cumulative_distribution can be automatically substituted with
-// weighted_p_square_cumulative_distribution when the weight parameter is non-void
-template<>
-struct as_weighted_feature<tag::p_square_cumulative_distribution>
-{
- typedef tag::weighted_p_square_cumulative_distribution type;
-};
-
-template<>
-struct feature_of<tag::weighted_p_square_cumulative_distribution>
- : feature_of<tag::p_square_cumulative_distribution>
-{
-};
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/accumulators/statistics/p_square_cumul_dist.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/accumulators/statistics/p_square_cumul_dist.hpp"
+#endif
-}} // namespace boost::accumulators
+#include <boost/accumulators/statistics/p_square_cumul_dist.hpp>
#endif
diff --git a/boost/accumulators/statistics/weighted_median.hpp b/boost/accumulators/statistics/weighted_median.hpp
index 46880c8..b8b94f9 100644
--- a/boost/accumulators/statistics/weighted_median.hpp
+++ b/boost/accumulators/statistics/weighted_median.hpp
@@ -20,7 +20,7 @@
#include <boost/accumulators/statistics/median.hpp>
#include <boost/accumulators/statistics/weighted_p_square_quantile.hpp>
#include <boost/accumulators/statistics/weighted_density.hpp>
-#include <boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp>
+#include <boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp>
namespace boost { namespace accumulators
{
diff --git a/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp b/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp
new file mode 100644
index 0000000..832e231
--- /dev/null
+++ b/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp
@@ -0,0 +1,262 @@
+///////////////////////////////////////////////////////////////////////////////
+// weighted_p_square_cumul_dist.hpp
+//
+// Copyright 2006 Daniel Egloff, Olivier Gygi. 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_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMUL_DIST_HPP_DE_01_01_2006
+#define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMUL_DIST_HPP_DE_01_01_2006
+
+#include <vector>
+#include <functional>
+#include <boost/parameter/keyword.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/range.hpp>
+#include <boost/accumulators/framework/accumulator_base.hpp>
+#include <boost/accumulators/framework/extractor.hpp>
+#include <boost/accumulators/numeric/functional.hpp>
+#include <boost/accumulators/framework/parameters/sample.hpp>
+#include <boost/accumulators/statistics_fwd.hpp>
+#include <boost/accumulators/statistics/count.hpp>
+#include <boost/accumulators/statistics/sum.hpp>
+#include <boost/accumulators/statistics/p_square_cumul_dist.hpp> // for named parameter p_square_cumulative_distribution_num_cells
+
+namespace boost { namespace accumulators
+{
+
+namespace impl
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // weighted_p_square_cumulative_distribution_impl
+ // cumulative distribution calculation (as histogram)
+ /**
+ @brief Histogram calculation of the cumulative distribution with the \f$P^2\f$ algorithm for weighted samples
+
+ A histogram of the sample cumulative distribution is computed dynamically without storing samples
+ based on the \f$ P^2 \f$ algorithm for weighted samples. The returned histogram has a specifiable
+ amount (num_cells) equiprobable (and not equal-sized) cells.
+
+ Note that applying importance sampling results in regions to be more and other regions to be less
+ accurately estimated than without importance sampling, i.e., with unweighted samples.
+
+ For further details, see
+
+ R. Jain and I. Chlamtac, The P^2 algorithmus for dynamic calculation of quantiles and
+ histograms without storing observations, Communications of the ACM,
+ Volume 28 (October), Number 10, 1985, p. 1076-1085.
+
+ @param p_square_cumulative_distribution_num_cells
+ */
+ template<typename Sample, typename Weight>
+ struct weighted_p_square_cumulative_distribution_impl
+ : accumulator_base
+ {
+ typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
+ typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type float_type;
+ typedef std::vector<std::pair<float_type, float_type> > histogram_type;
+ typedef std::vector<float_type> array_type;
+ // for boost::result_of
+ typedef iterator_range<typename histogram_type::iterator> result_type;
+
+ template<typename Args>
+ weighted_p_square_cumulative_distribution_impl(Args const &args)
+ : num_cells(args[p_square_cumulative_distribution_num_cells])
+ , heights(num_cells + 1)
+ , actual_positions(num_cells + 1)
+ , desired_positions(num_cells + 1)
+ , histogram(num_cells + 1)
+ , is_dirty(true)
+ {
+ }
+
+ template<typename Args>
+ void operator ()(Args const &args)
+ {
+ this->is_dirty = true;
+
+ std::size_t cnt = count(args);
+ std::size_t sample_cell = 1; // k
+ std::size_t b = this->num_cells;
+
+ // accumulate num_cells + 1 first samples
+ if (cnt <= b + 1)
+ {
+ this->heights[cnt - 1] = args[sample];
+ this->actual_positions[cnt - 1] = args[weight];
+
+ // complete the initialization of heights by sorting
+ if (cnt == b + 1)
+ {
+ //std::sort(this->heights.begin(), this->heights.end());
+
+ // TODO: we need to sort the initial samples (in heights) in ascending order and
+ // sort their weights (in actual_positions) the same way. The following lines do
+ // it, but there must be a better and more efficient way of doing this.
+ typename array_type::iterator it_begin, it_end, it_min;
+
+ it_begin = this->heights.begin();
+ it_end = this->heights.end();
+
+ std::size_t pos = 0;
+
+ while (it_begin != it_end)
+ {
+ it_min = std::min_element(it_begin, it_end);
+ std::size_t d = std::distance(it_begin, it_min);
+ std::swap(*it_begin, *it_min);
+ std::swap(this->actual_positions[pos], this->actual_positions[pos + d]);
+ ++it_begin;
+ ++pos;
+ }
+
+ // calculate correct initial actual positions
+ for (std::size_t i = 1; i < b; ++i)
+ {
+ this->actual_positions[i] += this->actual_positions[i - 1];
+ }
+ }
+ }
+ else
+ {
+ // find cell k such that heights[k-1] <= args[sample] < heights[k] and adjust extreme values
+ if (args[sample] < this->heights[0])
+ {
+ this->heights[0] = args[sample];
+ this->actual_positions[0] = args[weight];
+ sample_cell = 1;
+ }
+ else if (this->heights[b] <= args[sample])
+ {
+ this->heights[b] = args[sample];
+ sample_cell = b;
+ }
+ else
+ {
+ typename array_type::iterator it;
+ it = std::upper_bound(
+ this->heights.begin()
+ , this->heights.end()
+ , args[sample]
+ );
+
+ sample_cell = std::distance(this->heights.begin(), it);
+ }
+
+ // increment positions of markers above sample_cell
+ for (std::size_t i = sample_cell; i < b + 1; ++i)
+ {
+ this->actual_positions[i] += args[weight];
+ }
+
+ // determine desired marker positions
+ for (std::size_t i = 1; i < b + 1; ++i)
+ {
+ this->desired_positions[i] = this->actual_positions[0]
+ + numeric::average((i-1) * (sum_of_weights(args) - this->actual_positions[0]), b);
+ }
+
+ // adjust heights of markers 2 to num_cells if necessary
+ for (std::size_t i = 1; i < b; ++i)
+ {
+ // offset to desire position
+ float_type d = this->desired_positions[i] - this->actual_positions[i];
+
+ // offset to next position
+ float_type dp = this->actual_positions[i + 1] - this->actual_positions[i];
+
+ // offset to previous position
+ float_type dm = this->actual_positions[i - 1] - this->actual_positions[i];
+
+ // height ds
+ float_type hp = (this->heights[i + 1] - this->heights[i]) / dp;
+ float_type hm = (this->heights[i - 1] - this->heights[i]) / dm;
+
+ if ( ( d >= 1. && dp > 1. ) || ( d <= -1. && dm < -1. ) )
+ {
+ short sign_d = static_cast<short>(d / std::abs(d));
+
+ // try adjusting heights[i] using p-squared formula
+ float_type h = this->heights[i] + sign_d / (dp - dm) * ( (sign_d - dm) * hp + (dp - sign_d) * hm );
+
+ if ( this->heights[i - 1] < h && h < this->heights[i + 1] )
+ {
+ this->heights[i] = h;
+ }
+ else
+ {
+ // use linear formula
+ if (d>0)
+ {
+ this->heights[i] += hp;
+ }
+ if (d<0)
+ {
+ this->heights[i] -= hm;
+ }
+ }
+ this->actual_positions[i] += sign_d;
+ }
+ }
+ }
+ }
+
+ template<typename Args>
+ result_type result(Args const &args) const
+ {
+ if (this->is_dirty)
+ {
+ this->is_dirty = false;
+
+ // creates a vector of std::pair where each pair i holds
+ // the values heights[i] (x-axis of histogram) and
+ // actual_positions[i] / sum_of_weights (y-axis of histogram)
+
+ for (std::size_t i = 0; i < this->histogram.size(); ++i)
+ {
+ this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], sum_of_weights(args)));
+ }
+ }
+
+ return make_iterator_range(this->histogram);
+ }
+
+ private:
+ std::size_t num_cells; // number of cells b
+ array_type heights; // q_i
+ array_type actual_positions; // n_i
+ array_type desired_positions; // n'_i
+ mutable histogram_type histogram; // histogram
+ mutable bool is_dirty;
+ };
+
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////////
+// tag::weighted_p_square_cumulative_distribution
+//
+namespace tag
+{
+ struct weighted_p_square_cumulative_distribution
+ : depends_on<count, sum_of_weights>
+ , p_square_cumulative_distribution_num_cells
+ {
+ typedef accumulators::impl::weighted_p_square_cumulative_distribution_impl<mpl::_1, mpl::_2> impl;
+ };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// extract::weighted_p_square_cumulative_distribution
+//
+namespace extract
+{
+ extractor<tag::weighted_p_square_cumulative_distribution> const weighted_p_square_cumulative_distribution = {};
+
+ BOOST_ACCUMULATORS_IGNORE_GLOBAL(weighted_p_square_cumulative_distribution)
+}
+
+using extract::weighted_p_square_cumulative_distribution;
+
+}} // namespace boost::accumulators
+
+#endif
diff --git a/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp b/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp
index 290f090..918970e 100644
--- a/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp
+++ b/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp
@@ -1,262 +1,19 @@
///////////////////////////////////////////////////////////////////////////////
// weighted_p_square_cumulative_distribution.hpp
//
-// Copyright 2006 Daniel Egloff, Olivier Gygi. Distributed under the Boost
+// 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)
-#ifndef BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_DE_01_01_2006
-#define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_DE_01_01_2006
+#ifndef BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_03_19_2012
+#define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_03_19_2012
-#include <vector>
-#include <functional>
-#include <boost/parameter/keyword.hpp>
-#include <boost/mpl/placeholders.hpp>
-#include <boost/range.hpp>
-#include <boost/accumulators/framework/accumulator_base.hpp>
-#include <boost/accumulators/framework/extractor.hpp>
-#include <boost/accumulators/numeric/functional.hpp>
-#include <boost/accumulators/framework/parameters/sample.hpp>
-#include <boost/accumulators/statistics_fwd.hpp>
-#include <boost/accumulators/statistics/count.hpp>
-#include <boost/accumulators/statistics/sum.hpp>
-#include <boost/accumulators/statistics/p_square_cumulative_distribution.hpp> // for named parameter p_square_cumulative_distribution_num_cells
-
-namespace boost { namespace accumulators
-{
-
-namespace impl
-{
- ///////////////////////////////////////////////////////////////////////////////
- // weighted_p_square_cumulative_distribution_impl
- // cumulative distribution calculation (as histogram)
- /**
- @brief Histogram calculation of the cumulative distribution with the \f$P^2\f$ algorithm for weighted samples
-
- A histogram of the sample cumulative distribution is computed dynamically without storing samples
- based on the \f$ P^2 \f$ algorithm for weighted samples. The returned histogram has a specifiable
- amount (num_cells) equiprobable (and not equal-sized) cells.
-
- Note that applying importance sampling results in regions to be more and other regions to be less
- accurately estimated than without importance sampling, i.e., with unweighted samples.
-
- For further details, see
-
- R. Jain and I. Chlamtac, The P^2 algorithmus for dynamic calculation of quantiles and
- histograms without storing observations, Communications of the ACM,
- Volume 28 (October), Number 10, 1985, p. 1076-1085.
-
- @param p_square_cumulative_distribution_num_cells
- */
- template<typename Sample, typename Weight>
- struct weighted_p_square_cumulative_distribution_impl
- : accumulator_base
- {
- typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
- typedef typename numeric::functional::average<weighted_sample, std::size_t>::result_type float_type;
- typedef std::vector<std::pair<float_type, float_type> > histogram_type;
- typedef std::vector<float_type> array_type;
- // for boost::result_of
- typedef iterator_range<typename histogram_type::iterator> result_type;
-
- template<typename Args>
- weighted_p_square_cumulative_distribution_impl(Args const &args)
- : num_cells(args[p_square_cumulative_distribution_num_cells])
- , heights(num_cells + 1)
- , actual_positions(num_cells + 1)
- , desired_positions(num_cells + 1)
- , histogram(num_cells + 1)
- , is_dirty(true)
- {
- }
-
- template<typename Args>
- void operator ()(Args const &args)
- {
- this->is_dirty = true;
-
- std::size_t cnt = count(args);
- std::size_t sample_cell = 1; // k
- std::size_t b = this->num_cells;
-
- // accumulate num_cells + 1 first samples
- if (cnt <= b + 1)
- {
- this->heights[cnt - 1] = args[sample];
- this->actual_positions[cnt - 1] = args[weight];
-
- // complete the initialization of heights by sorting
- if (cnt == b + 1)
- {
- //std::sort(this->heights.begin(), this->heights.end());
-
- // TODO: we need to sort the initial samples (in heights) in ascending order and
- // sort their weights (in actual_positions) the same way. The following lines do
- // it, but there must be a better and more efficient way of doing this.
- typename array_type::iterator it_begin, it_end, it_min;
-
- it_begin = this->heights.begin();
- it_end = this->heights.end();
-
- std::size_t pos = 0;
-
- while (it_begin != it_end)
- {
- it_min = std::min_element(it_begin, it_end);
- std::size_t d = std::distance(it_begin, it_min);
- std::swap(*it_begin, *it_min);
- std::swap(this->actual_positions[pos], this->actual_positions[pos + d]);
- ++it_begin;
- ++pos;
- }
-
- // calculate correct initial actual positions
- for (std::size_t i = 1; i < b; ++i)
- {
- this->actual_positions[i] += this->actual_positions[i - 1];
- }
- }
- }
- else
- {
- // find cell k such that heights[k-1] <= args[sample] < heights[k] and adjust extreme values
- if (args[sample] < this->heights[0])
- {
- this->heights[0] = args[sample];
- this->actual_positions[0] = args[weight];
- sample_cell = 1;
- }
- else if (this->heights[b] <= args[sample])
- {
- this->heights[b] = args[sample];
- sample_cell = b;
- }
- else
- {
- typename array_type::iterator it;
- it = std::upper_bound(
- this->heights.begin()
- , this->heights.end()
- , args[sample]
- );
-
- sample_cell = std::distance(this->heights.begin(), it);
- }
-
- // increment positions of markers above sample_cell
- for (std::size_t i = sample_cell; i < b + 1; ++i)
- {
- this->actual_positions[i] += args[weight];
- }
-
- // determine desired marker positions
- for (std::size_t i = 1; i < b + 1; ++i)
- {
- this->desired_positions[i] = this->actual_positions[0]
- + numeric::average((i-1) * (sum_of_weights(args) - this->actual_positions[0]), b);
- }
-
- // adjust heights of markers 2 to num_cells if necessary
- for (std::size_t i = 1; i < b; ++i)
- {
- // offset to desire position
- float_type d = this->desired_positions[i] - this->actual_positions[i];
-
- // offset to next position
- float_type dp = this->actual_positions[i + 1] - this->actual_positions[i];
-
- // offset to previous position
- float_type dm = this->actual_positions[i - 1] - this->actual_positions[i];
-
- // height ds
- float_type hp = (this->heights[i + 1] - this->heights[i]) / dp;
- float_type hm = (this->heights[i - 1] - this->heights[i]) / dm;
-
- if ( ( d >= 1. && dp > 1. ) || ( d <= -1. && dm < -1. ) )
- {
- short sign_d = static_cast<short>(d / std::abs(d));
-
- // try adjusting heights[i] using p-squared formula
- float_type h = this->heights[i] + sign_d / (dp - dm) * ( (sign_d - dm) * hp + (dp - sign_d) * hm );
-
- if ( this->heights[i - 1] < h && h < this->heights[i + 1] )
- {
- this->heights[i] = h;
- }
- else
- {
- // use linear formula
- if (d>0)
- {
- this->heights[i] += hp;
- }
- if (d<0)
- {
- this->heights[i] -= hm;
- }
- }
- this->actual_positions[i] += sign_d;
- }
- }
- }
- }
-
- template<typename Args>
- result_type result(Args const &args) const
- {
- if (this->is_dirty)
- {
- this->is_dirty = false;
-
- // creates a vector of std::pair where each pair i holds
- // the values heights[i] (x-axis of histogram) and
- // actual_positions[i] / sum_of_weights (y-axis of histogram)
-
- for (std::size_t i = 0; i < this->histogram.size(); ++i)
- {
- this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], sum_of_weights(args)));
- }
- }
-
- return make_iterator_range(this->histogram);
- }
-
- private:
- std::size_t num_cells; // number of cells b
- array_type heights; // q_i
- array_type actual_positions; // n_i
- array_type desired_positions; // n'_i
- mutable histogram_type histogram; // histogram
- mutable bool is_dirty;
- };
-
-} // namespace detail
-
-///////////////////////////////////////////////////////////////////////////////
-// tag::weighted_p_square_cumulative_distribution
-//
-namespace tag
-{
- struct weighted_p_square_cumulative_distribution
- : depends_on<count, sum_of_weights>
- , p_square_cumulative_distribution_num_cells
- {
- typedef accumulators::impl::weighted_p_square_cumulative_distribution_impl<mpl::_1, mpl::_2> impl;
- };
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// extract::weighted_p_square_cumulative_distribution
-//
-namespace extract
-{
- extractor<tag::weighted_p_square_cumulative_distribution> const weighted_p_square_cumulative_distribution = {};
-
- BOOST_ACCUMULATORS_IGNORE_GLOBAL(weighted_p_square_cumulative_distribution)
-}
-
-using extract::weighted_p_square_cumulative_distribution;
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp"
+#endif
-}} // namespace boost::accumulators
+#include <boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp>
#endif
diff --git a/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp b/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
index 6d3017b..8ee2c56 100644
--- a/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
+++ b/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
@@ -12,6 +12,7 @@
#include <limits>
#include <numeric>
#include <functional>
+#include <boost/throw_exception.hpp>
#include <boost/range.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/placeholders.hpp>
diff --git a/boost/algorithm/clamp.hpp b/boost/algorithm/clamp.hpp
new file mode 100644
index 0000000..ae98d15
--- /dev/null
+++ b/boost/algorithm/clamp.hpp
@@ -0,0 +1,175 @@
+/*
+ Copyright (c) Marshall Clow 2008-2012.
+
+ 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)
+
+ Revision history:
+ 27 June 2009 mtc First version
+ 23 Oct 2010 mtc Added predicate version
+
+*/
+
+/// \file clamp.hpp
+/// \brief Clamp algorithm
+/// \author Marshall Clow
+///
+/// Suggested by olafvdspek in https://svn.boost.org/trac/boost/ticket/3215
+
+#ifndef BOOST_ALGORITHM_CLAMP_HPP
+#define BOOST_ALGORITHM_CLAMP_HPP
+
+#include <functional> // For std::less
+#include <iterator> // For std::iterator_traits
+#include <cassert>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/mpl/identity.hpp> // for identity
+#include <boost/utility/enable_if.hpp> // for boost::disable_if
+
+namespace boost { namespace algorithm {
+
+/// \fn clamp ( T const& val,
+/// typename boost::mpl::identity<T>::type const& lo,
+/// typename boost::mpl::identity<T>::type const& hi, Pred p )
+/// \return the value "val" brought into the range [ lo, hi ]
+/// using the comparison predicate p.
+/// If p ( val, lo ) return lo.
+/// If p ( hi, val ) return hi.
+/// Otherwise, return the original value.
+///
+/// \param val The value to be clamped
+/// \param lo The lower bound of the range to be clamped to
+/// \param hi The upper bound of the range to be clamped to
+/// \param p A predicate to use to compare the values.
+/// p ( a, b ) returns a boolean.
+///
+ template<typename T, typename Pred>
+ T const & clamp ( T const& val,
+ typename boost::mpl::identity<T>::type const & lo,
+ typename boost::mpl::identity<T>::type const & hi, Pred p )
+ {
+// assert ( !p ( hi, lo )); // Can't assert p ( lo, hi ) b/c they might be equal
+ return p ( val, lo ) ? lo : p ( hi, val ) ? hi : val;
+ }
+
+
+/// \fn clamp ( T const& val,
+/// typename boost::mpl::identity<T>::type const& lo,
+/// typename boost::mpl::identity<T>::type const& hi )
+/// \return the value "val" brought into the range [ lo, hi ].
+/// If the value is less than lo, return lo.
+/// If the value is greater than "hi", return hi.
+/// Otherwise, return the original value.
+///
+/// \param val The value to be clamped
+/// \param lo The lower bound of the range to be clamped to
+/// \param hi The upper bound of the range to be clamped to
+///
+ template<typename T>
+ T const& clamp ( const T& val,
+ typename boost::mpl::identity<T>::type const & lo,
+ typename boost::mpl::identity<T>::type const & hi )
+ {
+ return (clamp) ( val, lo, hi, std::less<T>());
+ }
+
+/// \fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out,
+/// std::iterator_traits<InputIterator>::value_type lo,
+/// std::iterator_traits<InputIterator>::value_type hi )
+/// \return clamp the sequence of values [first, last) into [ lo, hi ]
+///
+/// \param first The start of the range of values
+/// \param last One past the end of the range of input values
+/// \param out An output iterator to write the clamped values into
+/// \param lo The lower bound of the range to be clamped to
+/// \param hi The upper bound of the range to be clamped to
+///
+ template<typename InputIterator, typename OutputIterator>
+ OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out,
+ typename std::iterator_traits<InputIterator>::value_type lo,
+ typename std::iterator_traits<InputIterator>::value_type hi )
+ {
+ // this could also be written with bind and std::transform
+ while ( first != last )
+ *out++ = clamp ( *first++, lo, hi );
+ return out;
+ }
+
+/// \fn clamp_range ( const Range &r, OutputIterator out,
+/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type lo,
+/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type hi )
+/// \return clamp the sequence of values [first, last) into [ lo, hi ]
+///
+/// \param r The range of values to be clamped
+/// \param out An output iterator to write the clamped values into
+/// \param lo The lower bound of the range to be clamped to
+/// \param hi The upper bound of the range to be clamped to
+///
+ template<typename Range, typename OutputIterator>
+ typename boost::disable_if_c<boost::is_same<Range, OutputIterator>::value, OutputIterator>::type
+ clamp_range ( const Range &r, OutputIterator out,
+ typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type lo,
+ typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type hi )
+ {
+ return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi );
+ }
+
+
+/// \fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out,
+/// std::iterator_traits<InputIterator>::value_type lo,
+/// std::iterator_traits<InputIterator>::value_type hi, Pred p )
+/// \return clamp the sequence of values [first, last) into [ lo, hi ]
+/// using the comparison predicate p.
+///
+/// \param first The start of the range of values
+/// \param last One past the end of the range of input values
+/// \param out An output iterator to write the clamped values into
+/// \param lo The lower bound of the range to be clamped to
+/// \param hi The upper bound of the range to be clamped to
+/// \param p A predicate to use to compare the values.
+/// p ( a, b ) returns a boolean.
+
+///
+ template<typename InputIterator, typename OutputIterator, typename Pred>
+ OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out,
+ typename std::iterator_traits<InputIterator>::value_type lo,
+ typename std::iterator_traits<InputIterator>::value_type hi, Pred p )
+ {
+ // this could also be written with bind and std::transform
+ while ( first != last )
+ *out++ = clamp ( *first++, lo, hi, p );
+ return out;
+ }
+
+/// \fn clamp_range ( const Range &r, OutputIterator out,
+/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type lo,
+/// typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type hi,
+/// Pred p )
+/// \return clamp the sequence of values [first, last) into [ lo, hi ]
+/// using the comparison predicate p.
+///
+/// \param r The range of values to be clamped
+/// \param out An output iterator to write the clamped values into
+/// \param lo The lower bound of the range to be clamped to
+/// \param hi The upper bound of the range to be clamped to
+/// \param p A predicate to use to compare the values.
+/// p ( a, b ) returns a boolean.
+//
+// Disable this template if the first two parameters are the same type;
+// In that case, the user will get the two iterator version.
+ template<typename Range, typename OutputIterator, typename Pred>
+ typename boost::disable_if_c<boost::is_same<Range, OutputIterator>::value, OutputIterator>::type
+ clamp_range ( const Range &r, OutputIterator out,
+ typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type lo,
+ typename std::iterator_traits<typename boost::range_iterator<const Range>::type>::value_type hi,
+ Pred p )
+ {
+ return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi, p );
+ }
+
+
+}}
+
+#endif // BOOST_ALGORITHM_CLAMP_HPP
diff --git a/boost/algorithm/cxx11/all_of.hpp b/boost/algorithm/cxx11/all_of.hpp
new file mode 100644
index 0000000..b76cb3f
--- /dev/null
+++ b/boost/algorithm/cxx11/all_of.hpp
@@ -0,0 +1,91 @@
+/*
+ Copyright (c) Marshall Clow 2008-2012.
+
+ 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)
+*/
+
+/// \file all_of.hpp
+/// \brief Test ranges to see if all elements match a value or predicate.
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_ALL_OF_HPP
+#define BOOST_ALGORITHM_ALL_OF_HPP
+
+#include <algorithm> // for std::all_of, if available
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of all_of if it is available
+using std::all_of; // Section 25.2.1
+#else
+/// \fn all_of ( InputIterator first, InputIterator last, Predicate p )
+/// \return true if all elements in [first, last) satisfy the predicate 'p'
+/// \note returns true on an empty range
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param p A predicate for testing the elements of the sequence
+///
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template<typename InputIterator, typename Predicate>
+bool all_of ( InputIterator first, InputIterator last, Predicate p )
+{
+ for ( ; first != last; ++first )
+ if ( !p(*first))
+ return false;
+ return true;
+}
+#endif
+
+/// \fn all_of ( const Range &r, Predicate p )
+/// \return true if all elements in the range satisfy the predicate 'p'
+/// \note returns true on an empty range
+///
+/// \param r The input range
+/// \param p A predicate for testing the elements of the range
+///
+template<typename Range, typename Predicate>
+bool all_of ( const Range &r, Predicate p )
+{
+ return boost::algorithm::all_of ( boost::begin (r), boost::end (r), p );
+}
+
+/// \fn all_of_equal ( InputIterator first, InputIterator last, const T &val )
+/// \return true if all elements in [first, last) are equal to 'val'
+/// \note returns true on an empty range
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param val A value to compare against
+///
+template<typename InputIterator, typename T>
+bool all_of_equal ( InputIterator first, InputIterator last, const T &val )
+{
+ for ( ; first != last; ++first )
+ if ( val != *first )
+ return false;
+ return true;
+}
+
+/// \fn all_of_equal ( const Range &r, const T &val )
+/// \return true if all elements in the range are equal to 'val'
+/// \note returns true on an empty range
+///
+/// \param r The input range
+/// \param val A value to compare against
+///
+template<typename Range, typename T>
+bool all_of_equal ( const Range &r, const T &val )
+{
+ return boost::algorithm::all_of_equal ( boost::begin (r), boost::end (r), val );
+}
+
+}} // namespace boost and algorithm
+
+#endif // BOOST_ALGORITHM_ALL_OF_HPP
diff --git a/boost/algorithm/cxx11/any_of.hpp b/boost/algorithm/cxx11/any_of.hpp
new file mode 100644
index 0000000..c3ab3ce
--- /dev/null
+++ b/boost/algorithm/cxx11/any_of.hpp
@@ -0,0 +1,90 @@
+/*
+ Copyright (c) Marshall Clow 2008-2012.
+
+ 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)
+
+ For more information, see http://www.boost.org
+*/
+
+/// \file
+/// \brief Test ranges to see if any elements match a value or predicate.
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_ANY_OF_HPP
+#define BOOST_ALGORITHM_ANY_OF_HPP
+
+#include <algorithm> // for std::any_of, if available
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+// Use the C++11 versions of any_of if it is available
+#if __cplusplus >= 201103L
+using std::any_of; // Section 25.2.2
+#else
+/// \fn any_of ( InputIterator first, InputIterator last, Predicate p )
+/// \return true if any of the elements in [first, last) satisfy the predicate
+/// \note returns false on an empty range
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param p A predicate for testing the elements of the sequence
+///
+template<typename InputIterator, typename Predicate>
+bool any_of ( InputIterator first, InputIterator last, Predicate p )
+{
+ for ( ; first != last; ++first )
+ if ( p(*first))
+ return true;
+ return false;
+}
+#endif
+
+/// \fn any_of ( const Range &r, Predicate p )
+/// \return true if any elements in the range satisfy the predicate 'p'
+/// \note returns false on an empty range
+///
+/// \param r The input range
+/// \param p A predicate for testing the elements of the range
+///
+template<typename Range, typename Predicate>
+bool any_of ( const Range &r, Predicate p )
+{
+ return boost::algorithm::any_of (boost::begin (r), boost::end (r), p);
+}
+
+/// \fn any_of_equal ( InputIterator first, InputIterator last, const V &val )
+/// \return true if any of the elements in [first, last) are equal to 'val'
+/// \note returns false on an empty range
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param val A value to compare against
+///
+template<typename InputIterator, typename V>
+bool any_of_equal ( InputIterator first, InputIterator last, const V &val )
+{
+ for ( ; first != last; ++first )
+ if ( val == *first )
+ return true;
+ return false;
+}
+
+/// \fn any_of_equal ( const Range &r, const V &val )
+/// \return true if any of the elements in the range are equal to 'val'
+/// \note returns false on an empty range
+///
+/// \param r The input range
+/// \param val A value to compare against
+///
+template<typename Range, typename V>
+bool any_of_equal ( const Range &r, const V &val )
+{
+ return boost::algorithm::any_of_equal (boost::begin (r), boost::end (r), val);
+}
+
+}} // namespace boost and algorithm
+
+#endif // BOOST_ALGORITHM_ANY_OF_HPP
diff --git a/boost/algorithm/cxx11/copy_if.hpp b/boost/algorithm/cxx11/copy_if.hpp
new file mode 100644
index 0000000..6d0ba00
--- /dev/null
+++ b/boost/algorithm/cxx11/copy_if.hpp
@@ -0,0 +1,133 @@
+/*
+ Copyright (c) Marshall Clow 2008-2012.
+
+ 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)
+*/
+
+/// \file copy_if.hpp
+/// \brief Copy a subset of a sequence to a new sequence
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_COPY_IF_HPP
+#define BOOST_ALGORITHM_COPY_IF_HPP
+
+#include <algorithm> // for std::copy_if, if available
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of copy_if if it is available
+using std::copy_if; // Section 25.3.1
+#else
+/// \fn copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
+/// \brief Copies all the elements from the input range that satisfy the
+/// predicate to the output range.
+/// \return The updated output iterator
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param result An output iterator to write the results into
+/// \param p A predicate for testing the elements of the range
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template<typename InputIterator, typename OutputIterator, typename Predicate>
+OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
+{
+ for ( ; first != last; ++first )
+ if (p(*first))
+ *result++ = first;
+ return result;
+}
+#endif
+
+/// \fn copy_if ( const Range &r, OutputIterator result, Predicate p )
+/// \brief Copies all the elements from the input range that satisfy the
+/// predicate to the output range.
+/// \return The updated output iterator
+///
+/// \param r The input range
+/// \param result An output iterator to write the results into
+/// \param p A predicate for testing the elements of the range
+///
+template<typename Range, typename OutputIterator, typename Predicate>
+OutputIterator copy_if ( const Range &r, OutputIterator result, Predicate p )
+{
+ return boost::algorithm::copy_if (boost::begin (r), boost::end(r), result, p);
+}
+
+
+/// \fn copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
+/// \brief Copies all the elements at the start of the input range that
+/// satisfy the predicate to the output range.
+/// \return The updated output iterator
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param result An output iterator to write the results into
+/// \param p A predicate for testing the elements of the range
+///
+template<typename InputIterator, typename OutputIterator, typename Predicate>
+OutputIterator copy_while ( InputIterator first, InputIterator last,
+ OutputIterator result, Predicate p )
+{
+ for ( ; first != last && p(*first); ++first )
+ *result++ = first;
+ return result;
+}
+
+/// \fn copy_while ( const Range &r, OutputIterator result, Predicate p )
+/// \brief Copies all the elements at the start of the input range that
+/// satisfy the predicate to the output range.
+/// \return The updated output iterator
+///
+/// \param r The input range
+/// \param result An output iterator to write the results into
+/// \param p A predicate for testing the elements of the range
+///
+template<typename Range, typename OutputIterator, typename Predicate>
+OutputIterator copy_while ( const Range &r, OutputIterator result, Predicate p )
+{
+ return boost::algorithm::copy_while (boost::begin (r), boost::end(r), result, p);
+}
+
+
+/// \fn copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
+/// \brief Copies all the elements at the start of the input range that do not
+/// satisfy the predicate to the output range.
+/// \return The updated output iterator
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param result An output iterator to write the results into
+/// \param p A predicate for testing the elements of the range
+///
+template<typename InputIterator, typename OutputIterator, typename Predicate>
+OutputIterator copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
+{
+ for ( ; first != last && !p(*first); ++first )
+ *result++ = first;
+ return result;
+}
+
+/// \fn copy_until ( const Range &r, OutputIterator result, Predicate p )
+/// \brief Copies all the elements at the start of the input range that do not
+/// satisfy the predicate to the output range.
+/// \return The updated output iterator
+///
+/// \param r The input range
+/// \param result An output iterator to write the results into
+/// \param p A predicate for testing the elements of the range
+///
+template<typename Range, typename OutputIterator, typename Predicate>
+OutputIterator copy_until ( const Range &r, OutputIterator result, Predicate p )
+{
+ return boost::algorithm::copy_until (boost::begin (r), boost::end(r), result, p);
+}
+
+}} // namespace boost and algorithm
+
+#endif // BOOST_ALGORITHM_COPY_IF_HPP
diff --git a/boost/algorithm/cxx11/copy_n.hpp b/boost/algorithm/cxx11/copy_n.hpp
new file mode 100644
index 0000000..0ea53bd
--- /dev/null
+++ b/boost/algorithm/cxx11/copy_n.hpp
@@ -0,0 +1,44 @@
+/*
+ Copyright (c) Marshall Clow 2011-2012.
+
+ 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)
+*/
+
+/// \file copy_n.hpp
+/// \brief Copy n items from one sequence to another
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_COPY_N_HPP
+#define BOOST_ALGORITHM_COPY_N_HPP
+
+#include <algorithm> // for std::copy_n, if available
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of copy_n if it is available
+using std::copy_n; // Section 25.3.1
+#else
+/// \fn copy_n ( InputIterator first, Size n, OutputIterator result )
+/// \brief Copies exactly n (n > 0) elements from the range starting at first to
+/// the range starting at result.
+/// \return The updated output iterator
+///
+/// \param first The start of the input sequence
+/// \param n The number of elements to copy
+/// \param result An output iterator to write the results into
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template <typename InputIterator, typename Size, typename OutputIterator>
+OutputIterator copy_n ( InputIterator first, Size n, OutputIterator result )
+{
+ for ( ; n > 0; --n, ++first, ++result )
+ *result = *first;
+ return result;
+}
+#endif
+}} // namespace boost and algorithm
+
+#endif // BOOST_ALGORITHM_COPY_IF_HPP
diff --git a/boost/algorithm/cxx11/find_if_not.hpp b/boost/algorithm/cxx11/find_if_not.hpp
new file mode 100644
index 0000000..4beed00
--- /dev/null
+++ b/boost/algorithm/cxx11/find_if_not.hpp
@@ -0,0 +1,60 @@
+/*
+ Copyright (c) Marshall Clow 2011-2012.
+
+ 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)
+*/
+
+/// \file find_if_not.hpp
+/// \brief Find the first element in a sequence that does not satisfy a predicate.
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_FIND_IF_NOT_HPP
+#define BOOST_ALGORITHM_FIND_IF_NOT_HPP
+
+#include <algorithm> // for std::find_if_not, if it exists
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of find_if_not if it is available
+using std::find_if_not; // Section 25.2.5
+#else
+/// \fn find_if_not(InputIterator first, InputIterator last, Predicate p)
+/// \brief Finds the first element in the sequence that does not satisfy the predicate.
+/// \return The iterator pointing to the desired element.
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param p A predicate for testing the elements of the range
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template<typename InputIterator, typename Predicate>
+InputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p )
+{
+ for ( ; first != last; ++first )
+ if ( !p(*first))
+ break;
+ return first;
+}
+#endif
+
+/// \fn find_if_not ( const Range &r, Predicate p )
+/// \brief Finds the first element in the sequence that does not satisfy the predicate.
+/// \return The iterator pointing to the desired element.
+///
+/// \param r The input range
+/// \param p A predicate for testing the elements of the range
+///
+template<typename Range, typename Predicate>
+typename boost::range_iterator<const Range>::type find_if_not ( const Range &r, Predicate p )
+{
+ return boost::algorithm::find_if_not (boost::begin (r), boost::end(r), p);
+}
+
+}}
+#endif // BOOST_ALGORITHM_FIND_IF_NOT_HPP
diff --git a/boost/algorithm/cxx11/iota.hpp b/boost/algorithm/cxx11/iota.hpp
new file mode 100644
index 0000000..b4f0daf
--- /dev/null
+++ b/boost/algorithm/cxx11/iota.hpp
@@ -0,0 +1,74 @@
+/*
+ Copyright (c) Marshall Clow 2008-2012.
+
+ 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)
+*/
+
+/// \file iota.hpp
+/// \brief Generate an increasing series
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_IOTA_HPP
+#define BOOST_ALGORITHM_IOTA_HPP
+
+#include <numeric>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of iota if it is available
+using std::iota; // Section 26.7.6
+#else
+/// \fn iota ( ForwardIterator first, ForwardIterator last, T value )
+/// \brief Generates an increasing sequence of values, and stores them in [first, last)
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param value The initial value of the sequence to be generated
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template <typename ForwardIterator, typename T>
+void iota ( ForwardIterator first, ForwardIterator last, T value )
+{
+ for ( ; first != last; ++first, ++value )
+ *first = value;
+}
+#endif
+
+/// \fn iota ( Range &r, T value )
+/// \brief Generates an increasing sequence of values, and stores them in the input Range.
+///
+/// \param r The input range
+/// \param value The initial value of the sequence to be generated
+///
+template <typename Range, typename T>
+void iota ( Range &r, T value )
+{
+ boost::algorithm::iota (boost::begin(r), boost::end(r), value);
+}
+
+
+/// \fn iota_n ( OutputIterator out, T value, std::size_t n )
+/// \brief Generates an increasing sequence of values, and stores them in the input Range.
+///
+/// \param out An output iterator to write the results into
+/// \param value The initial value of the sequence to be generated
+/// \param n The number of items to write
+///
+template <typename OutputIterator, typename T>
+OutputIterator iota_n ( OutputIterator out, T value, std::size_t n )
+{
+ while ( n-- > 0 )
+ *out++ = value++;
+
+ return out;
+}
+
+}}
+
+#endif // BOOST_ALGORITHM_IOTA_HPP
diff --git a/boost/algorithm/cxx11/is_partitioned.hpp b/boost/algorithm/cxx11/is_partitioned.hpp
new file mode 100644
index 0000000..d647183
--- /dev/null
+++ b/boost/algorithm/cxx11/is_partitioned.hpp
@@ -0,0 +1,65 @@
+/*
+ Copyright (c) Marshall Clow 2011-2012.
+
+ 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)
+*/
+
+/// \file is_partitioned.hpp
+/// \brief Tell if a sequence is partitioned
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_IS_PARTITIONED_HPP
+#define BOOST_ALGORITHM_IS_PARTITIONED_HPP
+
+#include <algorithm> // for std::is_partitioned, if available
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of is_partitioned if it is available
+using std::is_partitioned; // Section 25.3.13
+#else
+/// \fn is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p )
+/// \brief Tests to see if a sequence is partititioned according to a predicate
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param p The predicicate to test the values with
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template <typename InputIterator, typename UnaryPredicate>
+bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p )
+{
+// Run through the part that satisfy the predicate
+ for ( ; first != last; ++first )
+ if ( !p (*first))
+ break;
+// Now the part that does not satisfy the predicate
+ for ( ; first != last; ++first )
+ if ( p (*first))
+ return false;
+ return true;
+}
+#endif
+
+/// \fn is_partitioned ( const Range &r, UnaryPredicate p )
+/// \brief Generates an increasing sequence of values, and stores them in the input Range.
+///
+/// \param r The input range
+/// \param p The predicicate to test the values with
+///
+template <typename Range, typename UnaryPredicate>
+bool is_partitioned ( const Range &r, UnaryPredicate p )
+{
+ return boost::algorithm::is_partitioned (boost::begin(r), boost::end(r), p);
+}
+
+
+}}
+
+#endif // BOOST_ALGORITHM_IS_PARTITIONED_HPP
diff --git a/boost/algorithm/cxx11/is_permutation.hpp b/boost/algorithm/cxx11/is_permutation.hpp
new file mode 100644
index 0000000..33cb712
--- /dev/null
+++ b/boost/algorithm/cxx11/is_permutation.hpp
@@ -0,0 +1,139 @@
+/*
+ Copyright (c) Marshall Clow 2011-2012.
+
+ 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)
+*/
+
+/// \file is_permutation.hpp
+/// \brief Is a sequence a permutation of another sequence
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_IS_PERMUTATION_HPP
+#define BOOST_ALGORITHM_IS_PERMUTATION_HPP
+
+#include <algorithm> // for std::less, tie, mismatch and is_permutation (if available)
+#include <utility> // for std::make_pair
+#include <functional> // for std::equal_to
+#include <iterator>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/tr1/tr1/tuple> // for tie
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of is_permutation if it is available
+using std::is_permutation; // Section 25.2.12
+#else
+/// \cond DOXYGEN_HIDE
+namespace detail {
+ template <typename Predicate, typename Iterator>
+ struct value_predicate {
+ value_predicate ( Predicate p, Iterator it ) : p_ ( p ), it_ ( it ) {}
+
+ template <typename T1>
+ bool operator () ( const T1 &t1 ) const { return p_ ( *it_, t1 ); }
+ private:
+ Predicate &p_;
+ Iterator it_;
+ };
+}
+/// \endcond
+
+
+/// \fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 first2, BinaryPredicate p )
+/// \brief Tests to see if a the sequence [first,last) is a permutation of the sequence starting at first2
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param first2 The start of the second sequence
+/// \param p The predicate to compare elements with
+///
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >
+bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
+ ForwardIterator2 first2, BinaryPredicate p )
+{
+// Skip the common prefix (if any)
+// std::tie (first1, first2) = std::mismatch (first1, last1, first2, p);
+ std::pair<ForwardIterator1, ForwardIterator2> eq = std::mismatch (first1, last1, first2, p);
+ first1 = eq.first;
+ first2 = eq.second;
+ if ( first1 != last1 ) {
+ // Create last2
+ ForwardIterator2 last2 = first2;
+ std::advance ( last2, std::distance (first1, last1));
+
+ // for each unique value in the sequence [first1,last1), count how many times
+ // it occurs, and make sure it occurs the same number of times in [first2, last2)
+ for ( ForwardIterator1 iter = first1; iter != last1; ++iter ) {
+ detail::value_predicate<BinaryPredicate, ForwardIterator1> pred ( p, iter );
+
+ /* For each value we haven't seen yet... */
+ if ( std::find_if ( first1, iter, pred ) == iter ) {
+ std::size_t dest_count = std::count_if ( first2, last2, pred );
+ if ( dest_count == 0 || dest_count != (std::size_t) std::count_if ( iter, last1, pred ))
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+/// \fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 first2 )
+/// \brief Tests to see if a the sequence [first,last) is a permutation of the sequence starting at first2
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param first2 The start of the second sequence
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template< class ForwardIterator1, class ForwardIterator2 >
+bool is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 first2 )
+{
+// How should I deal with the idea that ForwardIterator1::value_type
+// and ForwardIterator2::value_type could be different? Define my own comparison predicate?
+ return boost::algorithm::is_permutation ( first, last, first2,
+ std::equal_to<typename std::iterator_traits<ForwardIterator1>::value_type> ());
+}
+
+#endif
+
+/// \fn is_permutation ( const Range &r, ForwardIterator first2 )
+/// \brief Tests to see if a the sequence [first,last) is a permutation of the sequence starting at first2
+///
+/// \param r The input range
+/// \param first2 The start of the second sequence
+template <typename Range, typename ForwardIterator>
+bool is_permutation ( const Range &r, ForwardIterator first2 )
+{
+ return boost::algorithm::is_permutation (boost::begin (r), boost::end (r), first2 );
+}
+
+/// \fn is_permutation ( const Range &r, ForwardIterator first2, BinaryPredicate pred )
+/// \brief Tests to see if a the sequence [first,last) is a permutation of the sequence starting at first2
+///
+/// \param r The input range
+/// \param first2 The start of the second sequence
+/// \param pred The predicate to compare elements with
+///
+// Disable this template when the first two parameters are the same type
+// That way the non-range version will be chosen.
+template <typename Range, typename ForwardIterator, typename BinaryPredicate>
+typename boost::disable_if_c<boost::is_same<Range, ForwardIterator>::value, bool>::type
+is_permutation ( const Range &r, ForwardIterator first2, BinaryPredicate pred )
+{
+ return boost::algorithm::is_permutation (boost::begin (r), boost::end (r), first2, pred );
+}
+
+}}
+
+#endif // BOOST_ALGORITHM_IS_PERMUTATION_HPP
diff --git a/boost/algorithm/cxx11/is_sorted.hpp b/boost/algorithm/cxx11/is_sorted.hpp
new file mode 100644
index 0000000..c9bc65f
--- /dev/null
+++ b/boost/algorithm/cxx11/is_sorted.hpp
@@ -0,0 +1,287 @@
+// Copyright (c) 2010 Nuovation System Designs, LLC
+// Grant Erickson <gerickson@nuovations.com>
+//
+// Reworked somewhat by Marshall Clow; August 2010
+//
+// 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)
+//
+// See http://www.boost.org/ for latest version.
+//
+
+#ifndef BOOST_ALGORITHM_ORDERED_HPP
+#define BOOST_ALGORITHM_ORDERED_HPP
+
+#include <algorithm>
+#include <functional>
+#include <iterator>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of is_sorted/is_sorted_until if they are available
+using std::is_sorted_until; // Section 25.4.1.5
+using std::is_sorted; // Section 25.4.1.5
+#else
+/// \fn is_sorted_until ( ForwardIterator first, ForwardIterator last, Pred p )
+/// \return the point in the sequence [first, last) where the elements are unordered
+/// (according to the comparison predicate 'p').
+///
+/// \param first The start of the sequence to be tested.
+/// \param last One past the end of the sequence
+/// \param p A binary predicate that returns true if two elements are ordered.
+///
+ template <typename ForwardIterator, typename Pred>
+ ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last, Pred p )
+ {
+ if ( first == last ) return last; // the empty sequence is ordered
+ ForwardIterator next = first;
+ while ( ++next != last )
+ {
+ if ( p ( *next, *first ))
+ return next;
+ first = next;
+ }
+ return last;
+ }
+
+/// \fn is_sorted_until ( ForwardIterator first, ForwardIterator last )
+/// \return the point in the sequence [first, last) where the elements are unordered
+///
+/// \param first The start of the sequence to be tested.
+/// \param last One past the end of the sequence
+///
+ template <typename ForwardIterator>
+ ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last )
+ {
+ typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;
+ return boost::algorithm::is_sorted_until ( first, last, std::less<value_type>());
+ }
+
+
+/// \fn is_sorted ( ForwardIterator first, ForwardIterator last, Pred p )
+/// \return whether or not the entire sequence is sorted
+///
+/// \param first The start of the sequence to be tested.
+/// \param last One past the end of the sequence
+/// \param p A binary predicate that returns true if two elements are ordered.
+///
+ template <typename ForwardIterator, typename Pred>
+ bool is_sorted ( ForwardIterator first, ForwardIterator last, Pred p )
+ {
+ return boost::algorithm::is_sorted_until (first, last, p) == last;
+ }
+
+/// \fn is_sorted ( ForwardIterator first, ForwardIterator last )
+/// \return whether or not the entire sequence is sorted
+///
+/// \param first The start of the sequence to be tested.
+/// \param last One past the end of the sequence
+///
+ template <typename ForwardIterator>
+ bool is_sorted ( ForwardIterator first, ForwardIterator last )
+ {
+ return boost::algorithm::is_sorted_until (first, last) == last;
+ }
+#endif
+
+///
+/// -- Range based versions of the C++11 functions
+///
+
+/// \fn is_sorted_until ( const R &range, Pred p )
+/// \return the point in the range R where the elements are unordered
+/// (according to the comparison predicate 'p').
+///
+/// \param range The range to be tested.
+/// \param p A binary predicate that returns true if two elements are ordered.
+///
+ template <typename R, typename Pred>
+ typename boost::lazy_disable_if_c<
+ boost::is_same<R, Pred>::value,
+ typename boost::range_iterator<const R>
+ >::type is_sorted_until ( const R &range, Pred p )
+ {
+ return boost::algorithm::is_sorted_until ( boost::begin ( range ), boost::end ( range ), p );
+ }
+
+
+/// \fn is_sorted_until ( const R &range )
+/// \return the point in the range R where the elements are unordered
+///
+/// \param range The range to be tested.
+///
+ template <typename R>
+ typename boost::range_iterator<const R>::type is_sorted_until ( const R &range )
+ {
+ return boost::algorithm::is_sorted_until ( boost::begin ( range ), boost::end ( range ));
+ }
+
+/// \fn is_sorted ( const R &range, Pred p )
+/// \return whether or not the entire range R is sorted
+/// (according to the comparison predicate 'p').
+///
+/// \param range The range to be tested.
+/// \param p A binary predicate that returns true if two elements are ordered.
+///
+ template <typename R, typename Pred>
+ typename boost::lazy_disable_if_c< boost::is_same<R, Pred>::value, boost::mpl::identity<bool> >::type
+ is_sorted ( const R &range, Pred p )
+ {
+ return boost::algorithm::is_sorted ( boost::begin ( range ), boost::end ( range ), p );
+ }
+
+
+/// \fn is_sorted ( const R &range )
+/// \return whether or not the entire range R is sorted
+///
+/// \param range The range to be tested.
+///
+ template <typename R>
+ bool is_sorted ( const R &range )
+ {
+ return boost::algorithm::is_sorted ( boost::begin ( range ), boost::end ( range ));
+ }
+
+
+///
+/// -- Range based versions of the C++11 functions
+///
+
+/// \fn is_increasing ( ForwardIterator first, ForwardIterator last )
+/// \return true if the entire sequence is increasing; i.e, each item is greater than or
+/// equal to the previous one.
+///
+/// \param first The start of the sequence to be tested.
+/// \param last One past the end of the sequence
+///
+/// \note This function will return true for sequences that contain items that compare
+/// equal. If that is not what you intended, you should use is_strictly_increasing instead.
+ template <typename ForwardIterator>
+ bool is_increasing ( ForwardIterator first, ForwardIterator last )
+ {
+ typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;
+ return boost::algorithm::is_sorted (first, last, std::less<value_type>());
+ }
+
+
+/// \fn is_increasing ( const R &range )
+/// \return true if the entire sequence is increasing; i.e, each item is greater than or
+/// equal to the previous one.
+///
+/// \param range The range to be tested.
+///
+/// \note This function will return true for sequences that contain items that compare
+/// equal. If that is not what you intended, you should use is_strictly_increasing instead.
+ template <typename R>
+ bool is_increasing ( const R &range )
+ {
+ return is_increasing ( boost::begin ( range ), boost::end ( range ));
+ }
+
+
+
+/// \fn is_decreasing ( ForwardIterator first, ForwardIterator last )
+/// \return true if the entire sequence is decreasing; i.e, each item is less than
+/// or equal to the previous one.
+///
+/// \param first The start of the sequence to be tested.
+/// \param last One past the end of the sequence
+///
+/// \note This function will return true for sequences that contain items that compare
+/// equal. If that is not what you intended, you should use is_strictly_decreasing instead.
+ template <typename ForwardIterator>
+ bool is_decreasing ( ForwardIterator first, ForwardIterator last )
+ {
+ typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;
+ return boost::algorithm::is_sorted (first, last, std::greater<value_type>());
+ }
+
+/// \fn is_decreasing ( const R &range )
+/// \return true if the entire sequence is decreasing; i.e, each item is less than
+/// or equal to the previous one.
+///
+/// \param range The range to be tested.
+///
+/// \note This function will return true for sequences that contain items that compare
+/// equal. If that is not what you intended, you should use is_strictly_decreasing instead.
+ template <typename R>
+ bool is_decreasing ( const R &range )
+ {
+ return is_decreasing ( boost::begin ( range ), boost::end ( range ));
+ }
+
+
+
+/// \fn is_strictly_increasing ( ForwardIterator first, ForwardIterator last )
+/// \return true if the entire sequence is strictly increasing; i.e, each item is greater
+/// than the previous one
+///
+/// \param first The start of the sequence to be tested.
+/// \param last One past the end of the sequence
+///
+/// \note This function will return false for sequences that contain items that compare
+/// equal. If that is not what you intended, you should use is_increasing instead.
+ template <typename ForwardIterator>
+ bool is_strictly_increasing ( ForwardIterator first, ForwardIterator last )
+ {
+ typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;
+ return boost::algorithm::is_sorted (first, last, std::less_equal<value_type>());
+ }
+
+/// \fn is_strictly_increasing ( const R &range )
+/// \return true if the entire sequence is strictly increasing; i.e, each item is greater
+/// than the previous one
+///
+/// \param range The range to be tested.
+///
+/// \note This function will return false for sequences that contain items that compare
+/// equal. If that is not what you intended, you should use is_increasing instead.
+ template <typename R>
+ bool is_strictly_increasing ( const R &range )
+ {
+ return is_strictly_increasing ( boost::begin ( range ), boost::end ( range ));
+ }
+
+
+/// \fn is_strictly_decreasing ( ForwardIterator first, ForwardIterator last )
+/// \return true if the entire sequence is strictly decreasing; i.e, each item is less than
+/// the previous one
+///
+/// \param first The start of the sequence to be tested.
+/// \param last One past the end of the sequence
+///
+/// \note This function will return false for sequences that contain items that compare
+/// equal. If that is not what you intended, you should use is_decreasing instead.
+ template <typename ForwardIterator>
+ bool is_strictly_decreasing ( ForwardIterator first, ForwardIterator last )
+ {
+ typedef typename std::iterator_traits<ForwardIterator>::value_type value_type;
+ return boost::algorithm::is_sorted (first, last, std::greater_equal<value_type>());
+ }
+
+/// \fn is_strictly_decreasing ( const R &range )
+/// \return true if the entire sequence is strictly decreasing; i.e, each item is less than
+/// the previous one
+///
+/// \param range The range to be tested.
+///
+/// \note This function will return false for sequences that contain items that compare
+/// equal. If that is not what you intended, you should use is_decreasing instead.
+ template <typename R>
+ bool is_strictly_decreasing ( const R &range )
+ {
+ return is_strictly_decreasing ( boost::begin ( range ), boost::end ( range ));
+ }
+
+}} // namespace boost
+
+#endif // BOOST_ALGORITHM_ORDERED_HPP
diff --git a/boost/algorithm/cxx11/none_of.hpp b/boost/algorithm/cxx11/none_of.hpp
new file mode 100644
index 0000000..feae991
--- /dev/null
+++ b/boost/algorithm/cxx11/none_of.hpp
@@ -0,0 +1,88 @@
+/*
+ Copyright (c) Marshall Clow 2008-2012.
+
+ 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)
+*/
+
+/// \file none_of.hpp
+/// \brief Test ranges to see if no elements match a value or predicate.
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_NONE_OF_HPP
+#define BOOST_ALGORITHM_NONE_OF_HPP
+
+#include <algorithm> // for std::none_of, if available
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+// Use the C++11 versions of the none_of if it is available
+#if __cplusplus >= 201103L
+using std::none_of; // Section 25.2.3
+#else
+/// \fn none_of ( InputIterator first, InputIterator last, Predicate p )
+/// \return true if none of the elements in [first, last) satisfy the predicate 'p'
+/// \note returns true on an empty range
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param p A predicate for testing the elements of the sequence
+///
+template<typename InputIterator, typename Predicate>
+bool none_of ( InputIterator first, InputIterator last, Predicate p )
+{
+for ( ; first != last; ++first )
+ if ( p(*first))
+ return false;
+ return true;
+}
+#endif
+
+/// \fn none_of ( const Range &r, Predicate p )
+/// \return true if none of the elements in the range satisfy the predicate 'p'
+/// \note returns true on an empty range
+///
+/// \param r The input range
+/// \param p A predicate for testing the elements of the range
+///
+template<typename Range, typename Predicate>
+bool none_of ( const Range &r, Predicate p )
+{
+ return boost::algorithm::none_of (boost::begin (r), boost::end (r), p );
+}
+
+/// \fn none_of_equal ( InputIterator first, InputIterator last, const V &val )
+/// \return true if none of the elements in [first, last) are equal to 'val'
+/// \note returns true on an empty range
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param val A value to compare against
+///
+template<typename InputIterator, typename V>
+bool none_of_equal ( InputIterator first, InputIterator last, const V &val )
+{
+ for ( ; first != last; ++first )
+ if ( val == *first )
+ return false;
+ return true;
+}
+
+/// \fn none_of_equal ( const Range &r, const V &val )
+/// \return true if none of the elements in the range are equal to 'val'
+/// \note returns true on an empty range
+///
+/// \param r The input range
+/// \param val A value to compare against
+///
+template<typename Range, typename V>
+bool none_of_equal ( const Range &r, const V & val )
+{
+ return boost::algorithm::none_of_equal (boost::begin (r), boost::end (r), val);
+}
+
+}} // namespace boost and algorithm
+
+#endif // BOOST_ALGORITHM_NONE_OF_HPP
diff --git a/boost/algorithm/cxx11/one_of.hpp b/boost/algorithm/cxx11/one_of.hpp
new file mode 100644
index 0000000..b6e8c77
--- /dev/null
+++ b/boost/algorithm/cxx11/one_of.hpp
@@ -0,0 +1,82 @@
+/*
+ Copyright (c) Marshall Clow 2008-2012.
+
+ 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)
+*/
+
+/// \file one_of.hpp
+/// \brief Test ranges to see if only one element matches a value or predicate.
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_ONE_OF_HPP
+#define BOOST_ALGORITHM_ONE_OF_HPP
+
+#include <algorithm> // for std::find and std::find_if
+#include <boost/algorithm/cxx11/none_of.hpp>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+/// \fn one_of ( InputIterator first, InputIterator last, Predicate p )
+/// \return true if the predicate 'p' is true for exactly one item in [first, last).
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param p A predicate for testing the elements of the sequence
+///
+template<typename InputIterator, typename Predicate>
+bool one_of ( InputIterator first, InputIterator last, Predicate p )
+{
+ InputIterator i = std::find_if (first, last, p);
+ if (i == last)
+ return false; // Didn't occur at all
+ return boost::algorithm::none_of (++i, last, p);
+}
+
+/// \fn one_of ( const Range &r, Predicate p )
+/// \return true if the predicate 'p' is true for exactly one item in the range.
+///
+/// \param r The input range
+/// \param p A predicate for testing the elements of the range
+///
+template<typename Range, typename Predicate>
+bool one_of ( const Range &r, Predicate p )
+{
+ return boost::algorithm::one_of ( boost::begin (r), boost::end (r), p );
+}
+
+
+/// \fn one_of_equal ( InputIterator first, InputIterator last, const V &val )
+/// \return true if the value 'val' exists only once in [first, last).
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param val A value to compare against
+///
+template<typename InputIterator, typename V>
+bool one_of_equal ( InputIterator first, InputIterator last, const V &val )
+{
+ InputIterator i = std::find (first, last, val); // find first occurrence of 'val'
+ if (i == last)
+ return false; // Didn't occur at all
+ return boost::algorithm::none_of_equal (++i, last, val);
+}
+
+/// \fn one_of_equal ( const Range &r, const V &val )
+/// \return true if the value 'val' exists only once in the range.
+///
+/// \param r The input range
+/// \param val A value to compare against
+///
+template<typename Range, typename V>
+bool one_of_equal ( const Range &r, const V &val )
+{
+ return boost::algorithm::one_of_equal ( boost::begin (r), boost::end (r), val );
+}
+
+}} // namespace boost and algorithm
+
+#endif // BOOST_ALGORITHM_ALL_HPP
diff --git a/boost/algorithm/cxx11/partition_copy.hpp b/boost/algorithm/cxx11/partition_copy.hpp
new file mode 100644
index 0000000..15c4dd6
--- /dev/null
+++ b/boost/algorithm/cxx11/partition_copy.hpp
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) Marshall Clow 2011-2012.
+
+ 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)
+*/
+
+/// \file partition_copy.hpp
+/// \brief Copy a subset of a sequence to a new sequence
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_PARTITION_COPY_HPP
+#define BOOST_ALGORITHM_PARTITION_COPY_HPP
+
+#include <algorithm> // for std::partition_copy, if available
+#include <utility> // for make_pair
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of partition_copy if it is available
+using std::partition_copy; // Section 25.3.13
+#else
+/// \fn partition_copy ( InputIterator first, InputIterator last,
+/// OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p )
+/// \brief Copies the elements that satisfy the predicate p from the range [first, last)
+/// to the range beginning at d_first_true, and
+/// copies the elements that do not satisfy p to the range beginning at d_first_false.
+///
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param out_true An output iterator to write the elements that satisfy the predicate into
+/// \param out_false An output iterator to write the elements that do not satisfy the predicate into
+/// \param p A predicate for dividing the elements of the input sequence.
+///
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template <typename InputIterator,
+ typename OutputIterator1, typename OutputIterator2, typename UnaryPredicate>
+std::pair<OutputIterator1, OutputIterator2>
+partition_copy ( InputIterator first, InputIterator last,
+ OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p )
+{
+ for ( ; first != last; ++first )
+ if ( p (*first))
+ *out_true++ = *first;
+ else
+ *out_false++ = *first;
+ return std::pair<OutputIterator1, OutputIterator2> ( out_true, out_false );
+}
+#endif
+
+/// \fn partition_copy ( const Range &r,
+/// OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p )
+///
+/// \param r The input range
+/// \param out_true An output iterator to write the elements that satisfy the predicate into
+/// \param out_false An output iterator to write the elements that do not satisfy the predicate into
+/// \param p A predicate for dividing the elements of the input sequence.
+///
+template <typename Range, typename OutputIterator1, typename OutputIterator2,
+ typename UnaryPredicate>
+std::pair<OutputIterator1, OutputIterator2>
+partition_copy ( const Range &r, OutputIterator1 out_true, OutputIterator2 out_false,
+ UnaryPredicate p )
+{
+ return boost::algorithm::partition_copy
+ (boost::begin(r), boost::end(r), out_true, out_false, p );
+}
+
+}} // namespace boost and algorithm
+
+#endif // BOOST_ALGORITHM_PARTITION_COPY_HPP
diff --git a/boost/algorithm/cxx11/partition_point.hpp b/boost/algorithm/cxx11/partition_point.hpp
new file mode 100644
index 0000000..36d8384
--- /dev/null
+++ b/boost/algorithm/cxx11/partition_point.hpp
@@ -0,0 +1,72 @@
+/*
+ Copyright (c) Marshall Clow 2011-2012.
+
+ 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)
+*/
+
+/// \file partition_point.hpp
+/// \brief Find the partition point in a sequence
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_PARTITION_POINT_HPP
+#define BOOST_ALGORITHM_PARTITION_POINT_HPP
+
+#include <algorithm> // for std::partition_point, if available
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost { namespace algorithm {
+
+#if __cplusplus >= 201103L
+// Use the C++11 versions of partition_point if it is available
+using std::partition_point; // Section 25.3.13
+#else
+/// \fn partition_point ( ForwardIterator first, ForwardIterator last, Predicate p )
+/// \brief Given a partitioned range, returns the partition point, i.e, the first element
+/// that does not satisfy p
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param p The predicate to test the values with
+/// \note This function is part of the C++2011 standard library.
+/// We will use the standard one if it is available,
+/// otherwise we have our own implementation.
+template <typename ForwardIterator, typename Predicate>
+ForwardIterator partition_point ( ForwardIterator first, ForwardIterator last, Predicate p )
+{
+ std::size_t dist = std::distance ( first, last );
+ while ( first != last ) {
+ std::size_t d2 = dist / 2;
+ ForwardIterator ret_val = first;
+ std::advance (ret_val, d2);
+ if (p (*ret_val)) {
+ first = ++ret_val;
+ dist -= d2 + 1;
+ }
+ else {
+ last = ret_val;
+ dist = d2;
+ }
+ }
+ return first;
+}
+#endif
+
+/// \fn partition_point ( Range &r, Predicate p )
+/// \brief Given a partitioned range, returns the partition point
+///
+/// \param r The input range
+/// \param p The predicate to test the values with
+///
+template <typename Range, typename Predicate>
+typename boost::range_iterator<Range> partition_point ( Range &r, Predicate p )
+{
+ return boost::algorithm::partition_point (boost::begin(r), boost::end(r), p);
+}
+
+
+}}
+
+#endif // BOOST_ALGORITHM_PARTITION_POINT_HPP
diff --git a/boost/algorithm/hex.hpp b/boost/algorithm/hex.hpp
new file mode 100644
index 0000000..3f3c0c6
--- /dev/null
+++ b/boost/algorithm/hex.hpp
@@ -0,0 +1,265 @@
+/*
+ Copyright (c) Marshall Clow 2011-2012.
+
+ 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)
+
+ Thanks to Nevin for his comments/help.
+*/
+
+/*
+ General problem - turn a sequence of integral types into a sequence of hexadecimal characters.
+ - and back.
+
+TO DO:
+ 1. these should really only work on integral types. (see the >> and << operations)
+ -- this is done, I think.
+ 2. The 'value_type_or_char' struct is really a hack.
+ -- but it's a better hack now that it works with back_insert_iterators
+*/
+
+/// \file hex.hpp
+/// \brief Convert sequence of integral types into a sequence of hexadecimal
+/// characters and back. Based on the MySQL functions HEX and UNHEX
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_HEXHPP
+#define BOOST_ALGORITHM_HEXHPP
+
+#include <iterator> // for std::iterator_traits
+#include <stdexcept>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/exception/all.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_integral.hpp>
+
+
+namespace boost { namespace algorithm {
+
+/*!
+ \struct hex_decode_error
+ \brief Base exception class for all hex decoding errors
+
+ \struct non_hex_input
+ \brief Thrown when a non-hex value (0-9, A-F) encountered when decoding.
+ Contains the offending character
+
+ \struct not_enough_input
+ \brief Thrown when the input sequence unexpectedly ends
+
+*/
+struct hex_decode_error : virtual boost::exception, virtual std::exception {};
+struct not_enough_input : virtual hex_decode_error {};
+struct non_hex_input : virtual hex_decode_error {};
+typedef boost::error_info<struct bad_char_,char> bad_char;
+
+namespace detail {
+/// \cond DOXYGEN_HIDE
+
+ template <typename T, typename OutputIterator>
+ OutputIterator encode_one ( T val, OutputIterator out ) {
+ const std::size_t num_hex_digits = 2 * sizeof ( T );
+ char res [ num_hex_digits ];
+ char *p = res + num_hex_digits;
+ for ( std::size_t i = 0; i < num_hex_digits; ++i, val >>= 4 )
+ *--p = "0123456789ABCDEF" [ val & 0x0F ];
+ return std::copy ( res, res + num_hex_digits, out );
+ }
+
+ unsigned hex_char_to_int ( char c ) {
+ if ( c >= '0' && c <= '9' ) return c - '0';
+ if ( c >= 'A' && c <= 'F' ) return c - 'A' + 10;
+ if ( c >= 'a' && c <= 'f' ) return c - 'a' + 10;
+ BOOST_THROW_EXCEPTION (non_hex_input() << bad_char (c));
+ return 0; // keep dumb compilers happy
+ }
+
+
+// My own iterator_traits class.
+// It is here so that I can "reach inside" some kinds of output iterators
+// and get the type to write.
+ template <typename Iterator>
+ struct hex_iterator_traits {
+ typedef typename std::iterator_traits<Iterator>::value_type value_type;
+ };
+
+ template<typename Container>
+ struct hex_iterator_traits< std::back_insert_iterator<Container> > {
+ typedef typename Container::value_type value_type;
+ };
+
+ template<typename Container>
+ struct hex_iterator_traits< std::front_insert_iterator<Container> > {
+ typedef typename Container::value_type value_type;
+ };
+
+ template<typename Container>
+ struct hex_iterator_traits< std::insert_iterator<Container> > {
+ typedef typename Container::value_type value_type;
+ };
+
+// ostream_iterators have three template parameters.
+// The first one is the output type, the second one is the character type of
+// the underlying stream, the third is the character traits.
+// We only care about the first one.
+ template<typename T, typename charType, typename traits>
+ struct hex_iterator_traits< std::ostream_iterator<T, charType, traits> > {
+ typedef T value_type;
+ };
+
+ template <typename Iterator>
+ bool iter_end ( Iterator current, Iterator last ) { return current == last; }
+
+ template <typename T>
+ bool ptr_end ( const T* ptr, const T* /*end*/ ) { return *ptr == '\0'; }
+
+// What can we assume here about the inputs?
+// is std::iterator_traits<InputIterator>::value_type always 'char' ?
+// Could it be wchar_t, say? Does it matter?
+// We are assuming ASCII for the values - but what about the storage?
+ template <typename InputIterator, typename OutputIterator, typename EndPred>
+ typename boost::enable_if<boost::is_integral<typename hex_iterator_traits<OutputIterator>::value_type>, OutputIterator>::type
+ decode_one ( InputIterator &first, InputIterator last, OutputIterator out, EndPred pred ) {
+ typedef typename hex_iterator_traits<OutputIterator>::value_type T;
+ T res (0);
+
+ // Need to make sure that we get can read that many chars here.
+ for ( std::size_t i = 0; i < 2 * sizeof ( T ); ++i, ++first ) {
+ if ( pred ( first, last ))
+ BOOST_THROW_EXCEPTION (not_enough_input ());
+ res = ( 16 * res ) + hex_char_to_int (static_cast<char> (*first));
+ }
+
+ *out = res;
+ return ++out;
+ }
+/// \endcond
+ }
+
+
+/// \fn hex ( InputIterator first, InputIterator last, OutputIterator out )
+/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters.
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param out An output iterator to the results into
+/// \return The updated output iterator
+/// \note Based on the MySQL function of the same name
+template <typename InputIterator, typename OutputIterator>
+typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<InputIterator>::value_type>, OutputIterator>::type
+hex ( InputIterator first, InputIterator last, OutputIterator out ) {
+ for ( ; first != last; ++first )
+ out = detail::encode_one ( *first, out );
+ return out;
+ }
+
+
+/// \fn hex ( const T *ptr, OutputIterator out )
+/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters.
+///
+/// \param ptr A pointer to a 0-terminated sequence of data.
+/// \param out An output iterator to the results into
+/// \return The updated output iterator
+/// \note Based on the MySQL function of the same name
+template <typename T, typename OutputIterator>
+typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
+hex ( const T *ptr, OutputIterator out ) {
+ while ( *ptr )
+ out = detail::encode_one ( *ptr++, out );
+ return out;
+ }
+
+/// \fn hex ( const Range &r, OutputIterator out )
+/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters.
+///
+/// \param r The input range
+/// \param out An output iterator to the results into
+/// \return The updated output iterator
+/// \note Based on the MySQL function of the same name
+template <typename Range, typename OutputIterator>
+typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<typename Range::iterator>::value_type>, OutputIterator>::type
+hex ( const Range &r, OutputIterator out ) {
+ return hex (boost::begin(r), boost::end(r), out);
+}
+
+
+/// \fn unhex ( InputIterator first, InputIterator last, OutputIterator out )
+/// \brief Converts a sequence of hexadecimal characters into a sequence of integers.
+///
+/// \param first The start of the input sequence
+/// \param last One past the end of the input sequence
+/// \param out An output iterator to the results into
+/// \return The updated output iterator
+/// \note Based on the MySQL function of the same name
+template <typename InputIterator, typename OutputIterator>
+OutputIterator unhex ( InputIterator first, InputIterator last, OutputIterator out ) {
+ while ( first != last )
+ out = detail::decode_one ( first, last, out, detail::iter_end<InputIterator> );
+ return out;
+ }
+
+
+/// \fn unhex ( const T *ptr, OutputIterator out )
+/// \brief Converts a sequence of hexadecimal characters into a sequence of integers.
+///
+/// \param ptr A pointer to a null-terminated input sequence.
+/// \param out An output iterator to the results into
+/// \return The updated output iterator
+/// \note Based on the MySQL function of the same name
+template <typename T, typename OutputIterator>
+OutputIterator unhex ( const T *ptr, OutputIterator out ) {
+ typedef typename detail::hex_iterator_traits<OutputIterator>::value_type OutputType;
+// If we run into the terminator while decoding, we will throw a
+// malformed input exception. It would be nicer to throw a 'Not enough input'
+// exception - but how much extra work would that require?
+ while ( *ptr )
+ out = detail::decode_one ( ptr, (const T *) NULL, out, detail::ptr_end<T> );
+ return out;
+ }
+
+
+/// \fn OutputIterator unhex ( const Range &r, OutputIterator out )
+/// \brief Converts a sequence of hexadecimal characters into a sequence of integers.
+///
+/// \param r The input range
+/// \param out An output iterator to the results into
+/// \return The updated output iterator
+/// \note Based on the MySQL function of the same name
+template <typename Range, typename OutputIterator>
+OutputIterator unhex ( const Range &r, OutputIterator out ) {
+ return unhex (boost::begin(r), boost::end(r), out);
+ }
+
+
+/// \fn String hex ( const String &input )
+/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters.
+///
+/// \param input A container to be converted
+/// \return A container with the encoded text
+template<typename String>
+String hex ( const String &input ) {
+ String output;
+ output.reserve (input.size () * (2 * sizeof (typename String::value_type)));
+ (void) hex (input, std::back_inserter (output));
+ return output;
+ }
+
+/// \fn String unhex ( const String &input )
+/// \brief Converts a sequence of hexadecimal characters into a sequence of characters.
+///
+/// \param input A container to be converted
+/// \return A container with the decoded text
+template<typename String>
+String unhex ( const String &input ) {
+ String output;
+ output.reserve (input.size () / (2 * sizeof (typename String::value_type)));
+ (void) unhex (input, std::back_inserter (output));
+ return output;
+ }
+
+}}
+
+#endif // BOOST_ALGORITHM_HEXHPP
diff --git a/boost/algorithm/searching/boyer_moore.hpp b/boost/algorithm/searching/boyer_moore.hpp
new file mode 100644
index 0000000..958f0b8
--- /dev/null
+++ b/boost/algorithm/searching/boyer_moore.hpp
@@ -0,0 +1,268 @@
+/*
+ Copyright (c) Marshall Clow 2010-2012.
+
+ 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)
+
+ For more information, see http://www.boost.org
+*/
+
+#ifndef BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP
+#define BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP
+
+#include <iterator> // for std::iterator_traits
+
+#include <boost/assert.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/algorithm/searching/detail/bm_traits.hpp>
+#include <boost/algorithm/searching/detail/debugging.hpp>
+
+namespace boost { namespace algorithm {
+
+/*
+ A templated version of the boyer-moore searching algorithm.
+
+References:
+ http://www.cs.utexas.edu/users/moore/best-ideas/string-searching/
+ http://www.cs.utexas.edu/~moore/publications/fstrpos.pdf
+
+Explanations: boostinspect:noascii (test tool complains)
+ http://en.wikipedia.org/wiki/Boyer–Moore_string_search_algorithm
+ http://www.movsd.com/bm.htm
+ http://www.cs.ucdavis.edu/~gusfield/cs224f09/bnotes.pdf
+
+The Boyer-Moore search algorithm uses two tables, a "bad character" table
+to tell how far to skip ahead when it hits a character that is not in the pattern,
+and a "good character" table to tell how far to skip ahead when it hits a
+mismatch on a character that _is_ in the pattern.
+
+Requirements:
+ * Random access iterators
+ * The two iterator types (patIter and corpusIter) must
+ "point to" the same underlying type and be comparable.
+ * Additional requirements may be imposed but the skip table, such as:
+ ** Numeric type (array-based skip table)
+ ** Hashable type (map-based skip table)
+*/
+
+ template <typename patIter, typename traits = detail::BM_traits<patIter> >
+ class boyer_moore {
+ typedef typename std::iterator_traits<patIter>::difference_type difference_type;
+ public:
+ boyer_moore ( patIter first, patIter last )
+ : pat_first ( first ), pat_last ( last ),
+ k_pattern_length ( std::distance ( pat_first, pat_last )),
+ skip_ ( k_pattern_length, -1 ),
+ suffix_ ( k_pattern_length + 1 )
+ {
+ this->build_skip_table ( first, last );
+ this->build_suffix_table ( first, last );
+ }
+
+ ~boyer_moore () {}
+
+ /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last )
+ /// \brief Searches the corpus for the pattern that was passed into the constructor
+ ///
+ /// \param corpus_first The start of the data to search (Random Access Iterator)
+ /// \param corpus_last One past the end of the data to search
+ ///
+ template <typename corpusIter>
+ corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
+ BOOST_STATIC_ASSERT (( boost::is_same<
+ typename std::iterator_traits<patIter>::value_type,
+ typename std::iterator_traits<corpusIter>::value_type>::value ));
+
+ if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it!
+ if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start
+
+ const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
+ // If the pattern is larger than the corpus, we can't find it!
+ if ( k_corpus_length < k_pattern_length )
+ return corpus_last;
+
+ // Do the search
+ return this->do_search ( corpus_first, corpus_last );
+ }
+
+ template <typename Range>
+ typename boost::range_iterator<Range>::type operator () ( Range &r ) const {
+ return (*this) (boost::begin(r), boost::end(r));
+ }
+
+ private:
+/// \cond DOXYGEN_HIDE
+ patIter pat_first, pat_last;
+ const difference_type k_pattern_length;
+ typename traits::skip_table_t skip_;
+ std::vector <difference_type> suffix_;
+
+ /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )
+ /// \brief Searches the corpus for the pattern that was passed into the constructor
+ ///
+ /// \param corpus_first The start of the data to search (Random Access Iterator)
+ /// \param corpus_last One past the end of the data to search
+ /// \param p A predicate used for the search comparisons.
+ ///
+ template <typename corpusIter>
+ corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const {
+ /* ---- Do the matching ---- */
+ corpusIter curPos = corpus_first;
+ const corpusIter lastPos = corpus_last - k_pattern_length;
+ difference_type j, k, m;
+
+ while ( curPos <= lastPos ) {
+ /* while ( std::distance ( curPos, corpus_last ) >= k_pattern_length ) { */
+ // Do we match right where we are?
+ j = k_pattern_length;
+ while ( pat_first [j-1] == curPos [j-1] ) {
+ j--;
+ // We matched - we're done!
+ if ( j == 0 )
+ return curPos;
+ }
+
+ // Since we didn't match, figure out how far to skip forward
+ k = skip_ [ curPos [ j - 1 ]];
+ m = j - k - 1;
+ if ( k < j && m > suffix_ [ j ] )
+ curPos += m;
+ else
+ curPos += suffix_ [ j ];
+ }
+
+ return corpus_last; // We didn't find anything
+ }
+
+
+ void build_skip_table ( patIter first, patIter last ) {
+ for ( std::size_t i = 0; first != last; ++first, ++i )
+ skip_.insert ( *first, i );
+ }
+
+
+ template<typename Iter, typename Container>
+ void compute_bm_prefix ( Iter pat_first, Iter pat_last, Container &prefix ) {
+ const std::size_t count = std::distance ( pat_first, pat_last );
+ BOOST_ASSERT ( count > 0 );
+ BOOST_ASSERT ( prefix.size () == count );
+
+ prefix[0] = 0;
+ std::size_t k = 0;
+ for ( std::size_t i = 1; i < count; ++i ) {
+ BOOST_ASSERT ( k < count );
+ while ( k > 0 && ( pat_first[k] != pat_first[i] )) {
+ BOOST_ASSERT ( k < count );
+ k = prefix [ k - 1 ];
+ }
+
+ if ( pat_first[k] == pat_first[i] )
+ k++;
+ prefix [ i ] = k;
+ }
+ }
+
+ void build_suffix_table ( patIter pat_first, patIter pat_last ) {
+ const std::size_t count = (std::size_t) std::distance ( pat_first, pat_last );
+
+ if ( count > 0 ) { // empty pattern
+ std::vector<typename std::iterator_traits<patIter>::value_type> reversed(count);
+ (void) std::reverse_copy ( pat_first, pat_last, reversed.begin ());
+
+ std::vector<difference_type> prefix (count);
+ compute_bm_prefix ( pat_first, pat_last, prefix );
+
+ std::vector<difference_type> prefix_reversed (count);
+ compute_bm_prefix ( reversed.begin (), reversed.end (), prefix_reversed );
+
+ for ( std::size_t i = 0; i <= count; i++ )
+ suffix_[i] = count - prefix [count-1];
+
+ for ( std::size_t i = 0; i < count; i++ ) {
+ const std::size_t j = count - prefix_reversed[i];
+ const difference_type k = i - prefix_reversed[i] + 1;
+
+ if (suffix_[j] > k)
+ suffix_[j] = k;
+ }
+ }
+ }
+/// \endcond
+ };
+
+
+/* Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters
+ Use a bit of TMP to disambiguate the 3-argument templates */
+
+/// \fn boyer_moore_search ( corpusIter corpus_first, corpusIter corpus_last,
+/// patIter pat_first, patIter pat_last )
+/// \brief Searches the corpus for the pattern.
+///
+/// \param corpus_first The start of the data to search (Random Access Iterator)
+/// \param corpus_last One past the end of the data to search
+/// \param pat_first The start of the pattern to search for (Random Access Iterator)
+/// \param pat_last One past the end of the data to search for
+///
+ template <typename patIter, typename corpusIter>
+ corpusIter boyer_moore_search (
+ corpusIter corpus_first, corpusIter corpus_last,
+ patIter pat_first, patIter pat_last )
+ {
+ boyer_moore<patIter> bm ( pat_first, pat_last );
+ return bm ( corpus_first, corpus_last );
+ }
+
+ template <typename PatternRange, typename corpusIter>
+ corpusIter boyer_moore_search (
+ corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
+ {
+ typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
+ boyer_moore<pattern_iterator> bm ( boost::begin(pattern), boost::end (pattern));
+ return bm ( corpus_first, corpus_last );
+ }
+
+ template <typename patIter, typename CorpusRange>
+ typename boost::lazy_disable_if_c<
+ boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >
+ ::type
+ boyer_moore_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
+ {
+ boyer_moore<patIter> bm ( pat_first, pat_last );
+ return bm (boost::begin (corpus), boost::end (corpus));
+ }
+
+ template <typename PatternRange, typename CorpusRange>
+ typename boost::range_iterator<CorpusRange>::type
+ boyer_moore_search ( CorpusRange &corpus, const PatternRange &pattern )
+ {
+ typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
+ boyer_moore<pattern_iterator> bm ( boost::begin(pattern), boost::end (pattern));
+ return bm (boost::begin (corpus), boost::end (corpus));
+ }
+
+
+ // Creator functions -- take a pattern range, return an object
+ template <typename Range>
+ boost::algorithm::boyer_moore<typename boost::range_iterator<const Range>::type>
+ make_boyer_moore ( const Range &r ) {
+ return boost::algorithm::boyer_moore
+ <typename boost::range_iterator<const Range>::type> (boost::begin(r), boost::end(r));
+ }
+
+ template <typename Range>
+ boost::algorithm::boyer_moore<typename boost::range_iterator<Range>::type>
+ make_boyer_moore ( Range &r ) {
+ return boost::algorithm::boyer_moore
+ <typename boost::range_iterator<Range>::type> (boost::begin(r), boost::end(r));
+ }
+
+}}
+
+#endif // BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP
diff --git a/boost/algorithm/searching/boyer_moore_horspool.hpp b/boost/algorithm/searching/boyer_moore_horspool.hpp
new file mode 100644
index 0000000..5e59cf3
--- /dev/null
+++ b/boost/algorithm/searching/boyer_moore_horspool.hpp
@@ -0,0 +1,194 @@
+/*
+ Copyright (c) Marshall Clow 2010-2012.
+
+ 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)
+
+ For more information, see http://www.boost.org
+*/
+
+#ifndef BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP
+#define BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP
+
+#include <iterator> // for std::iterator_traits
+
+#include <boost/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/algorithm/searching/detail/bm_traits.hpp>
+#include <boost/algorithm/searching/detail/debugging.hpp>
+
+// #define BOOST_ALGORITHM_BOYER_MOORE_HORSPOOL_DEBUG_HPP
+
+namespace boost { namespace algorithm {
+
+/*
+ A templated version of the boyer-moore-horspool searching algorithm.
+
+ Requirements:
+ * Random access iterators
+ * The two iterator types (patIter and corpusIter) must
+ "point to" the same underlying type.
+ * Additional requirements may be imposed buy the skip table, such as:
+ ** Numeric type (array-based skip table)
+ ** Hashable type (map-based skip table)
+
+http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html
+
+*/
+
+ template <typename patIter, typename traits = detail::BM_traits<patIter> >
+ class boyer_moore_horspool {
+ typedef typename std::iterator_traits<patIter>::difference_type difference_type;
+ public:
+ boyer_moore_horspool ( patIter first, patIter last )
+ : pat_first ( first ), pat_last ( last ),
+ k_pattern_length ( std::distance ( pat_first, pat_last )),
+ skip_ ( k_pattern_length, k_pattern_length ) {
+
+ // Build the skip table
+ std::size_t i = 0;
+ if ( first != last ) // empty pattern?
+ for ( patIter iter = first; iter != last-1; ++iter, ++i )
+ skip_.insert ( *iter, k_pattern_length - 1 - i );
+#ifdef BOOST_ALGORITHM_BOYER_MOORE_HORSPOOL_DEBUG_HPP
+ skip_.PrintSkipTable ();
+#endif
+ }
+
+ ~boyer_moore_horspool () {}
+
+ /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )
+ /// \brief Searches the corpus for the pattern that was passed into the constructor
+ ///
+ /// \param corpus_first The start of the data to search (Random Access Iterator)
+ /// \param corpus_last One past the end of the data to search
+ /// \param p A predicate used for the search comparisons.
+ ///
+ template <typename corpusIter>
+ corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
+ BOOST_STATIC_ASSERT (( boost::is_same<
+ typename std::iterator_traits<patIter>::value_type,
+ typename std::iterator_traits<corpusIter>::value_type>::value ));
+
+ if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it!
+ if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start
+
+ const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
+ // If the pattern is larger than the corpus, we can't find it!
+ if ( k_corpus_length < k_pattern_length )
+ return corpus_last;
+
+ // Do the search
+ return this->do_search ( corpus_first, corpus_last );
+ }
+
+ template <typename Range>
+ typename boost::range_iterator<Range>::type operator () ( Range &r ) const {
+ return (*this) (boost::begin(r), boost::end(r));
+ }
+
+ private:
+/// \cond DOXYGEN_HIDE
+ patIter pat_first, pat_last;
+ const difference_type k_pattern_length;
+ typename traits::skip_table_t skip_;
+
+ /// \fn do_search ( corpusIter corpus_first, corpusIter corpus_last )
+ /// \brief Searches the corpus for the pattern that was passed into the constructor
+ ///
+ /// \param corpus_first The start of the data to search (Random Access Iterator)
+ /// \param corpus_last One past the end of the data to search
+ /// \param k_corpus_length The length of the corpus to search
+ ///
+ template <typename corpusIter>
+ corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const {
+ corpusIter curPos = corpus_first;
+ const corpusIter lastPos = corpus_last - k_pattern_length;
+ while ( curPos <= lastPos ) {
+ // Do we match right where we are?
+ std::size_t j = k_pattern_length - 1;
+ while ( pat_first [j] == curPos [j] ) {
+ // We matched - we're done!
+ if ( j == 0 )
+ return curPos;
+ j--;
+ }
+
+ curPos += skip_ [ curPos [ k_pattern_length - 1 ]];
+ }
+
+ return corpus_last;
+ }
+// \endcond
+ };
+
+/* Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters
+ Use a bit of TMP to disambiguate the 3-argument templates */
+
+/// \fn boyer_moore_horspool_search ( corpusIter corpus_first, corpusIter corpus_last,
+/// patIter pat_first, patIter pat_last )
+/// \brief Searches the corpus for the pattern.
+///
+/// \param corpus_first The start of the data to search (Random Access Iterator)
+/// \param corpus_last One past the end of the data to search
+/// \param pat_first The start of the pattern to search for (Random Access Iterator)
+/// \param pat_last One past the end of the data to search for
+///
+ template <typename patIter, typename corpusIter>
+ corpusIter boyer_moore_horspool_search (
+ corpusIter corpus_first, corpusIter corpus_last,
+ patIter pat_first, patIter pat_last )
+ {
+ boyer_moore_horspool<patIter> bmh ( pat_first, pat_last );
+ return bmh ( corpus_first, corpus_last );
+ }
+
+ template <typename PatternRange, typename corpusIter>
+ corpusIter boyer_moore_horspool_search (
+ corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
+ {
+ typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
+ boyer_moore_horspool<pattern_iterator> bmh ( boost::begin(pattern), boost::end (pattern));
+ return bmh ( corpus_first, corpus_last );
+ }
+
+ template <typename patIter, typename CorpusRange>
+ typename boost::lazy_disable_if_c<
+ boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >
+ ::type
+ boyer_moore_horspool_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
+ {
+ boyer_moore_horspool<patIter> bmh ( pat_first, pat_last );
+ return bm (boost::begin (corpus), boost::end (corpus));
+ }
+
+ template <typename PatternRange, typename CorpusRange>
+ typename boost::range_iterator<CorpusRange>::type
+ boyer_moore_horspool_search ( CorpusRange &corpus, const PatternRange &pattern )
+ {
+ typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
+ boyer_moore_horspool<pattern_iterator> bmh ( boost::begin(pattern), boost::end (pattern));
+ return bmh (boost::begin (corpus), boost::end (corpus));
+ }
+
+
+ // Creator functions -- take a pattern range, return an object
+ template <typename Range>
+ boost::algorithm::boyer_moore_horspool<typename boost::range_iterator<const Range>::type>
+ make_boyer_moore_horspool ( const Range &r ) {
+ return boost::algorithm::boyer_moore_horspool
+ <typename boost::range_iterator<const Range>::type> (boost::begin(r), boost::end(r));
+ }
+
+ template <typename Range>
+ boost::algorithm::boyer_moore_horspool<typename boost::range_iterator<Range>::type>
+ make_boyer_moore_horspool ( Range &r ) {
+ return boost::algorithm::boyer_moore_horspool
+ <typename boost::range_iterator<Range>::type> (boost::begin(r), boost::end(r));
+ }
+
+}}
+
+#endif // BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP
diff --git a/boost/algorithm/searching/detail/bm_traits.hpp b/boost/algorithm/searching/detail/bm_traits.hpp
new file mode 100644
index 0000000..ea150c3
--- /dev/null
+++ b/boost/algorithm/searching/detail/bm_traits.hpp
@@ -0,0 +1,105 @@
+/*
+ Copyright (c) Marshall Clow 2010-2012.
+
+ 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)
+
+ For more information, see http://www.boost.org
+*/
+
+#ifndef BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP
+#define BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP
+
+#include <climits> // for CHAR_BIT
+#include <vector>
+#include <iterator> // for std::iterator_traits
+
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/array.hpp>
+#include <boost/tr1/tr1/unordered_map>
+
+#include <boost/algorithm/searching/detail/debugging.hpp>
+
+namespace boost { namespace algorithm { namespace detail {
+
+//
+// Default implementations of the skip tables for B-M and B-M-H
+//
+ template<typename key_type, typename value_type, bool /*useArray*/> class skip_table;
+
+// General case for data searching other than bytes; use a map
+ template<typename key_type, typename value_type>
+ class skip_table<key_type, value_type, false> {
+ private:
+ typedef std::tr1::unordered_map<key_type, value_type> skip_map;
+ const value_type k_default_value;
+ skip_map skip_;
+
+ public:
+ skip_table ( std::size_t patSize, value_type default_value )
+ : k_default_value ( default_value ), skip_ ( patSize ) {}
+
+ void insert ( key_type key, value_type val ) {
+ skip_ [ key ] = val; // Would skip_.insert (val) be better here?
+ }
+
+ value_type operator [] ( key_type key ) const {
+ typename skip_map::const_iterator it = skip_.find ( key );
+ return it == skip_.end () ? k_default_value : it->second;
+ }
+
+ void PrintSkipTable () const {
+ std::cout << "BM(H) Skip Table <unordered_map>:" << std::endl;
+ for ( typename skip_map::const_iterator it = skip_.begin (); it != skip_.end (); ++it )
+ if ( it->second != k_default_value )
+ std::cout << " " << it->first << ": " << it->second << std::endl;
+ std::cout << std::endl;
+ }
+ };
+
+
+// Special case small numeric values; use an array
+ template<typename key_type, typename value_type>
+ class skip_table<key_type, value_type, true> {
+ private:
+ typedef typename boost::make_unsigned<key_type>::type unsigned_key_type;
+ typedef boost::array<value_type, 1U << (CHAR_BIT * sizeof(key_type))> skip_map;
+ skip_map skip_;
+ const value_type k_default_value;
+ public:
+ skip_table ( std::size_t patSize, value_type default_value ) : k_default_value ( default_value ) {
+ std::fill_n ( skip_.begin(), skip_.size(), default_value );
+ }
+
+ void insert ( key_type key, value_type val ) {
+ skip_ [ static_cast<unsigned_key_type> ( key ) ] = val;
+ }
+
+ value_type operator [] ( key_type key ) const {
+ return skip_ [ static_cast<unsigned_key_type> ( key ) ];
+ }
+
+ void PrintSkipTable () const {
+ std::cout << "BM(H) Skip Table <boost:array>:" << std::endl;
+ for ( typename skip_map::const_iterator it = skip_.begin (); it != skip_.end (); ++it )
+ if ( *it != k_default_value )
+ std::cout << " " << std::distance (skip_.begin (), it) << ": " << *it << std::endl;
+ std::cout << std::endl;
+ }
+ };
+
+ template<typename Iterator>
+ struct BM_traits {
+ typedef typename std::iterator_traits<Iterator>::difference_type value_type;
+ typedef typename std::iterator_traits<Iterator>::value_type key_type;
+ typedef boost::algorithm::detail::skip_table<key_type, value_type,
+ boost::is_integral<key_type>::value && (sizeof(key_type)==1)> skip_table_t;
+ };
+
+}}} // namespaces
+
+#endif // BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP
diff --git a/boost/algorithm/searching/detail/debugging.hpp b/boost/algorithm/searching/detail/debugging.hpp
new file mode 100644
index 0000000..3996e0f
--- /dev/null
+++ b/boost/algorithm/searching/detail/debugging.hpp
@@ -0,0 +1,30 @@
+/*
+ Copyright (c) Marshall Clow 2010-2012.
+
+ 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)
+
+ For more information, see http://www.boost.org
+*/
+
+#ifndef BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP
+#define BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP
+
+#include <iostream>
+/// \cond DOXYGEN_HIDE
+
+namespace boost { namespace algorithm { namespace detail {
+
+// Debugging support
+ template <typename Iter>
+ void PrintTable ( Iter first, Iter last ) {
+ std::cout << std::distance ( first, last ) << ": { ";
+ for ( Iter iter = first; iter != last; ++iter )
+ std::cout << *iter << " ";
+ std::cout << "}" << std::endl;
+ }
+
+}}}
+/// \endcond
+
+#endif // BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP
diff --git a/boost/algorithm/searching/knuth_morris_pratt.hpp b/boost/algorithm/searching/knuth_morris_pratt.hpp
new file mode 100644
index 0000000..cc83185
--- /dev/null
+++ b/boost/algorithm/searching/knuth_morris_pratt.hpp
@@ -0,0 +1,253 @@
+/*
+ Copyright (c) Marshall Clow 2010-2012.
+
+ 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)
+
+ For more information, see http://www.boost.org
+*/
+
+#ifndef BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP
+#define BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP
+
+#include <vector>
+#include <iterator> // for std::iterator_traits
+
+#include <boost/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/algorithm/searching/detail/debugging.hpp>
+
+// #define BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_DEBUG
+
+namespace boost { namespace algorithm {
+
+// #define NEW_KMP
+
+/*
+ A templated version of the Knuth-Morris-Pratt searching algorithm.
+
+ Requirements:
+ * Random-access iterators
+ * The two iterator types (I1 and I2) must "point to" the same underlying type.
+
+ http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm
+ http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmpen.htm
+*/
+
+ template <typename patIter>
+ class knuth_morris_pratt {
+ typedef typename std::iterator_traits<patIter>::difference_type difference_type;
+ public:
+ knuth_morris_pratt ( patIter first, patIter last )
+ : pat_first ( first ), pat_last ( last ),
+ k_pattern_length ( std::distance ( pat_first, pat_last )),
+ skip_ ( k_pattern_length + 1 ) {
+#ifdef NEW_KMP
+ preKmp ( pat_first, pat_last );
+#else
+ init_skip_table ( pat_first, pat_last );
+#endif
+#ifdef BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_DEBUG
+ detail::PrintTable ( skip_.begin (), skip_.end ());
+#endif
+ }
+
+ ~knuth_morris_pratt () {}
+
+ /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )
+ /// \brief Searches the corpus for the pattern that was passed into the constructor
+ ///
+ /// \param corpus_first The start of the data to search (Random Access Iterator)
+ /// \param corpus_last One past the end of the data to search
+ /// \param p A predicate used for the search comparisons.
+ ///
+ template <typename corpusIter>
+ corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
+ BOOST_STATIC_ASSERT (( boost::is_same<
+ typename std::iterator_traits<patIter>::value_type,
+ typename std::iterator_traits<corpusIter>::value_type>::value ));
+ if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it!
+ if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start
+
+ const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
+ // If the pattern is larger than the corpus, we can't find it!
+ if ( k_corpus_length < k_pattern_length )
+ return corpus_last;
+
+ return do_search ( corpus_first, corpus_last, k_corpus_length );
+ }
+
+ template <typename Range>
+ typename boost::range_iterator<Range>::type operator () ( Range &r ) const {
+ return (*this) (boost::begin(r), boost::end(r));
+ }
+
+ private:
+/// \cond DOXYGEN_HIDE
+ patIter pat_first, pat_last;
+ const difference_type k_pattern_length;
+ std::vector <difference_type> skip_;
+
+ /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )
+ /// \brief Searches the corpus for the pattern that was passed into the constructor
+ ///
+ /// \param corpus_first The start of the data to search (Random Access Iterator)
+ /// \param corpus_last One past the end of the data to search
+ /// \param p A predicate used for the search comparisons.
+ ///
+ template <typename corpusIter>
+ corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last,
+ difference_type k_corpus_length ) const {
+ difference_type match_start = 0; // position in the corpus that we're matching
+
+#ifdef NEW_KMP
+ int patternIdx = 0;
+ while ( match_start < k_corpus_length ) {
+ while ( patternIdx > -1 && pat_first[patternIdx] != corpus_first [match_start] )
+ patternIdx = skip_ [patternIdx]; //<--- Shifting the pattern on mismatch
+
+ patternIdx++;
+ match_start++; //<--- corpus is always increased by 1
+
+ if ( patternIdx >= (int) k_pattern_length )
+ return corpus_first + match_start - patternIdx;
+ }
+
+#else
+// At this point, we know:
+// k_pattern_length <= k_corpus_length
+// for all elements of skip, it holds -1 .. k_pattern_length
+//
+// In the loop, we have the following invariants
+// idx is in the range 0 .. k_pattern_length
+// match_start is in the range 0 .. k_corpus_length - k_pattern_length + 1
+
+ const difference_type last_match = k_corpus_length - k_pattern_length;
+ difference_type idx = 0; // position in the pattern we're comparing
+
+ while ( match_start <= last_match ) {
+ while ( pat_first [ idx ] == corpus_first [ match_start + idx ] ) {
+ if ( ++idx == k_pattern_length )
+ return corpus_first + match_start;
+ }
+ // Figure out where to start searching again
+ // assert ( idx - skip_ [ idx ] > 0 ); // we're always moving forward
+ match_start += idx - skip_ [ idx ];
+ idx = skip_ [ idx ] >= 0 ? skip_ [ idx ] : 0;
+ // assert ( idx >= 0 && idx < k_pattern_length );
+ }
+#endif
+
+ // We didn't find anything
+ return corpus_last;
+ }
+
+
+ void preKmp ( patIter first, patIter last ) {
+ const /*std::size_t*/ int count = std::distance ( first, last );
+
+ int i, j;
+
+ i = 0;
+ j = skip_[0] = -1;
+ while (i < count) {
+ while (j > -1 && first[i] != first[j])
+ j = skip_[j];
+ i++;
+ j++;
+ if (first[i] == first[j])
+ skip_[i] = skip_[j];
+ else
+ skip_[i] = j;
+ }
+ }
+
+
+ void init_skip_table ( patIter first, patIter last ) {
+ const difference_type count = std::distance ( first, last );
+
+ int j;
+ skip_ [ 0 ] = -1;
+ for ( int i = 1; i <= count; ++i ) {
+ j = skip_ [ i - 1 ];
+ while ( j >= 0 ) {
+ if ( first [ j ] == first [ i - 1 ] )
+ break;
+ j = skip_ [ j ];
+ }
+ skip_ [ i ] = j + 1;
+ }
+ }
+// \endcond
+ };
+
+
+/* Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters
+ Use a bit of TMP to disambiguate the 3-argument templates */
+
+/// \fn knuth_morris_pratt_search ( corpusIter corpus_first, corpusIter corpus_last,
+/// patIter pat_first, patIter pat_last )
+/// \brief Searches the corpus for the pattern.
+///
+/// \param corpus_first The start of the data to search (Random Access Iterator)
+/// \param corpus_last One past the end of the data to search
+/// \param pat_first The start of the pattern to search for (Random Access Iterator)
+/// \param pat_last One past the end of the data to search for
+///
+ template <typename patIter, typename corpusIter>
+ corpusIter knuth_morris_pratt_search (
+ corpusIter corpus_first, corpusIter corpus_last,
+ patIter pat_first, patIter pat_last )
+ {
+ knuth_morris_pratt<patIter> kmp ( pat_first, pat_last );
+ return kmp ( corpus_first, corpus_last );
+ }
+
+ template <typename PatternRange, typename corpusIter>
+ corpusIter knuth_morris_pratt_search (
+ corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
+ {
+ typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
+ knuth_morris_pratt<pattern_iterator> kmp ( boost::begin(pattern), boost::end (pattern));
+ return kmp ( corpus_first, corpus_last );
+ }
+
+ template <typename patIter, typename CorpusRange>
+ typename boost::lazy_disable_if_c<
+ boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >
+ ::type
+ knuth_morris_pratt_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
+ {
+ knuth_morris_pratt<patIter> kmp ( pat_first, pat_last );
+ return kmp (boost::begin (corpus), boost::end (corpus));
+ }
+
+ template <typename PatternRange, typename CorpusRange>
+ typename boost::range_iterator<CorpusRange>::type
+ knuth_morris_pratt_search ( CorpusRange &corpus, const PatternRange &pattern )
+ {
+ typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
+ knuth_morris_pratt<pattern_iterator> kmp ( boost::begin(pattern), boost::end (pattern));
+ return kmp (boost::begin (corpus), boost::end (corpus));
+ }
+
+
+ // Creator functions -- take a pattern range, return an object
+ template <typename Range>
+ boost::algorithm::knuth_morris_pratt<typename boost::range_iterator<const Range>::type>
+ make_knuth_morris_pratt ( const Range &r ) {
+ return boost::algorithm::knuth_morris_pratt
+ <typename boost::range_iterator<const Range>::type> (boost::begin(r), boost::end(r));
+ }
+
+ template <typename Range>
+ boost::algorithm::knuth_morris_pratt<typename boost::range_iterator<Range>::type>
+ make_knuth_morris_pratt ( Range &r ) {
+ return boost::algorithm::knuth_morris_pratt
+ <typename boost::range_iterator<Range>::type> (boost::begin(r), boost::end(r));
+ }
+}}
+
+#endif // BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP
diff --git a/boost/algorithm/string/find.hpp b/boost/algorithm/string/find.hpp
index 304646d..cc99ca1 100644
--- a/boost/algorithm/string/find.hpp
+++ b/boost/algorithm/string/find.hpp
@@ -228,13 +228,13 @@ namespace boost {
//! 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 @@ namespace boost {
//! 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
diff --git a/boost/algorithm/string/iter_find.hpp b/boost/algorithm/string/iter_find.hpp
index 9e0245f..e106528 100644
--- a/boost/algorithm/string/iter_find.hpp
+++ b/boost/algorithm/string/iter_find.hpp
@@ -60,7 +60,7 @@ namespace boost {
a match).
\param Input A container which will be searched.
\param Finder A Finder object used for searching
- \return A reference the result
+ \return A reference to the result
\note Prior content of the result will be overwritten.
*/
@@ -122,7 +122,7 @@ namespace boost {
Each match is used as a separator of segments. These segments are then
returned in the result.
- \param Result A 'container container' to container the result of search.
+ \param Result A 'container container' to contain the result of search.
Both outer and inner container must have constructor taking a pair
of iterators as an argument.
Typical type of the result is
@@ -131,7 +131,7 @@ namespace boost {
a match).
\param Input A container which will be searched.
\param Finder A finder object used for searching
- \return A reference the result
+ \return A reference to the result
\note Prior content of the result will be overwritten.
*/
diff --git a/boost/archive/basic_archive.hpp b/boost/archive/basic_archive.hpp
index d408485..c5ac880 100644
--- a/boost/archive/basic_archive.hpp
+++ b/boost/archive/basic_archive.hpp
@@ -150,7 +150,8 @@ private:
base_type t;
public:
object_id_type(): t(0) {};
- explicit object_id_type(const unsigned int & t_) : t(t_){
+ // note: presumes that size_t >= unsigned int.
+ explicit object_id_type(const std::size_t & t_) : t(t_){
BOOST_ASSERT(t_ <= boost::integer_traits<base_type>::const_max);
}
object_id_type(const object_id_type & t_) :
diff --git a/boost/archive/detail/basic_serializer_map.hpp b/boost/archive/detail/basic_serializer_map.hpp
index 19defcb..a991ea1 100644
--- a/boost/archive/detail/basic_serializer_map.hpp
+++ b/boost/archive/detail/basic_serializer_map.hpp
@@ -19,7 +19,7 @@
#include <set>
#include <boost/config.hpp>
-#include <boost/utility.hpp>
+#include <boost/noncopyable.hpp>
#include <boost/archive/detail/auto_link_archive.hpp>
#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
diff --git a/boost/archive/detail/iserializer.hpp b/boost/archive/detail/iserializer.hpp
index 46033fd..53765af 100644
--- a/boost/archive/detail/iserializer.hpp
+++ b/boost/archive/detail/iserializer.hpp
@@ -61,7 +61,7 @@ namespace std{
#define DONT_USE_HAS_NEW_OPERATOR ( \
defined(__BORLANDC__) \
- || defined(__IBMCPP__) \
+ || BOOST_WORKAROUND(__IBMCPP__, < 1210) \
|| defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) \
|| defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590) \
)
diff --git a/boost/archive/iterators/head_iterator.hpp b/boost/archive/iterators/head_iterator.hpp
index 7d39a35..2fdd475 100644
--- a/boost/archive/iterators/head_iterator.hpp
+++ b/boost/archive/iterators/head_iterator.hpp
@@ -42,8 +42,8 @@ private:
> 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){
diff --git a/boost/archive/iterators/remove_whitespace.hpp b/boost/archive/iterators/remove_whitespace.hpp
index a8e1092..a01049f 100644
--- a/boost/archive/iterators/remove_whitespace.hpp
+++ b/boost/archive/iterators/remove_whitespace.hpp
@@ -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 @@ public:
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:
diff --git a/boost/archive/shared_ptr_helper.hpp b/boost/archive/shared_ptr_helper.hpp
index 0e5f4f2..39e6eb8 100644
--- a/boost/archive/shared_ptr_helper.hpp
+++ b/boost/archive/shared_ptr_helper.hpp
@@ -127,7 +127,7 @@ public:
template<class T>
struct non_polymorphic {
static const boost::serialization::extended_type_info *
- get_object_identifier(T & t){
+ get_object_identifier(T &){
return & boost::serialization::singleton<
BOOST_DEDUCED_TYPENAME
boost::serialization::type_info_implementation< T >::type
diff --git a/boost/array.hpp b/boost/array.hpp
index ffb504b..fa06fa9 100644
--- a/boost/array.hpp
+++ b/boost/array.hpp
@@ -13,6 +13,7 @@
* accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
+ * 14 Apr 2012 - (mtc) Added support for boost::hash
* 28 Dec 2010 - (mtc) Added cbegin and cend (and crbegin and crend) for C++Ox compatibility.
* 10 Mar 2010 - (mtc) fill method added, matching resolution of the standard library working group.
* See <http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#776> or Trac issue #3168
@@ -46,6 +47,7 @@
// Handles broken standard libraries better than <iterator>
#include <boost/detail/iterator.hpp>
#include <boost/throw_exception.hpp>
+#include <boost/functional/hash_fwd.hpp>
#include <algorithm>